[
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    {one line to give the program's name and a brief idea of what it does.}\n    Copyright (C) {year}  {name of author}\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    {project}  Copyright (C) {year}  {fullname}\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>."
  },
  {
    "path": "README.md",
    "content": "# AntRunner\n[中文](./README_cn.md)\n * [Introduce](#introduce)\n * [Feature](#feature)\n * [Specification](#specification)\n * [How to Use](#how-to-use)\n * [System Detail](#system-detail)\n    * [Gpredict](#gpredict)\n    * [Hamlib](#hamlib)\n    * [Look4Sat](#look4sat)\n    * [SDR#](#sdr)\n * [How to Get One](#how-to-get-one)\n * [Reference](#reference)\n\n## Introduce\nAntRunner is a portable antenna rotator designed and made by MuseLab(Another model we designed is the [AntRunner-Pro](https://github.com/wuxx/AntRunner-Pro), which is suitable for fixed installation and long-term operation). It can be used for real-time automatic tracking of satellites with corresponding open source software which is available on Windows/Linux/Mac/RaspberryPi/Android. The rotator and the host computer can communicate via wired (serial port) or wireless (Wifi 2.4G).  It can install various types of antennas (usually Yagi antennas), support 360-degree azimuth and 180-degree elevation control, and can support antennas up to 10KG.  It can be powered by a 12V battery or by a fast charging power bank with a 12V fast charging trigger cable. It’s easy to carry as its weight is relatively light and very convenient to use in the wild for HAM.\n\n![AntRunner-1](https://github.com/wuxx/AntRunner/blob/master/doc/1.jpg)\n![AntRunner-2](https://github.com/wuxx/AntRunner/blob/master/doc/3.jpg)\n![AntRunner-3](https://github.com/wuxx/AntRunner/blob/master/doc/2.jpg)\n\n## Feature\n- full Azimuth and elevation angle tracking\n- Support Windows/Linux/RaspberryPi/Android\n- Support wired serial port control\n- Support wireless WiFi 2.4G control\n- 12V power supply, convenient for field erection\n- Easy disassembly and assembly\n\n## Specification\n- Rotation Limit: AZ: 0 - 360°; EL: 0-180°\n- Max Load: 10KG\n- Backlash: AZ:1° EL:1°\n- Weight: 2.5KG\n- Rotator Diameter x Height:  120mmØ x 65mm (H)\n- Support Material: 5mm/10mm Acrylic\n\n## How to Use\n\n### Windows\n\n#### 0 Antenna installation\nInstall the antenna on the U-shaped bracket of the rotator through the U-shaped hoop, and pay attention to install it at the center of gravity of the antenna to make the operation more stable.\n\n#### 1 Rotator adjustment\nBefore powering on, you need to adjust the azimuth of the rotator to true north (azimuth angle of 0 degrees), and the pitch to be horizontal (pitch angle of 0 degrees). This step can be adjusted through the mobile compass APP.\n\n#### 2 Power up\nUse the 12V power supply to power on the rotator, and connect the rotator and PC through the TYPE-C cable. After the normal connection, a serial port will appear in the device manager, as shown in the figure.\n![AntRunner-1](https://github.com/wuxx/AntRunner/blob/master/doc/AntRunner_Start-1.png)\n\n#### 3 Start Hamlib\nEnter the Hamlib directory, there is a batch script in the directory, and the script is a command, as shown below, you need to manually edit the script to modify the serial port number. Since the serial port number is assigned by the system, the serial number is different for different systems, so you need to use a text editor to manually change the serial port number before running.\n```\nrotctld.exe -vvvvv -m 2401 -r COMx\n```\nModify COMx to the actual serial port number that appears in the device manager, save the script, and double-click to run it.\n![AntRunner-2](https://github.com/wuxx/AntRunner/blob/master/doc/AntRunner_Start-2.png)\n![AntRunner-3](https://github.com/wuxx/AntRunner/blob/master/doc/AntRunner_Start-3.png)\n![AntRunner-4](https://github.com/wuxx/AntRunner/blob/master/doc/AntRunner_Start-4.png)\n\n#### 4 Start Gpredict\nDouble-click gpredict.exe to open the Gpredict program\n\n![Gpredict-1a](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-1a.png)\n\n##### 4.1 Longitude and latitude configuration\nFirst, you need to configure the latitude and longitude of your region, select Edit -> General -> Ground Stations -> Add new, and configure your local latitude, longitude and altitude on the page that comes out.\n![Gpredict-1c](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-1c.png)\n\n##### 4.2 Satellite configuration\nYou need to add the satellites you want to track to the list, click the inverted triangle on the upper right, select Configure, and add the satellites you want to track to the small window on the right in the window that appears.\n![Gpredict-1b](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-1b.png)\n\n\n##### 4.3 Rotator configuration\nCreate a new rotator device, select Edit -> Interfaces -> Rotators -> Add New, and configure it as shown\n![Gpredict-1d](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-1d.png)\n\n##### 4.4 Rotator test\nAfter configuring the rotator device, you can perform a preliminary test on the rotator. Click the inverted triangle on the upper right and select Antenna Control to enter the antenna control page.\nselect the newly created grbltrk, click Engage to initialize the rotator, and then configure the azimuth and pitch angles. After configuring the rotator, it will respond immediately and return the current angle value in real time.\n![Gpredict-2b](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-2b.png)\n![Gpredict-2c](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-2c.png)\n![Gpredict-2d](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-2d.png)\n\n##### 4.5 satellite tracking\nSelect the satellite to be tracked in Target, such as ISS, click Track, the rotator will start tracking the satellite in real time, if the satellite is not in entry, it will adjust the pitch angle to 0 degrees, and the azimuth angle to the angle when the satellite enters, wait for the satellite to enter, The radar map on the left also shows the satellite's inbound trajectory and the current rotator position.\n![Gpredict-2e](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-2e.png)\n![Gpredict-3](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-3.png)\n\n### Raspberry\nSince Gpredict is also supported under Linux, it can be directly run and used in the Raspberry Pi. The operation steps are basically the same, and will not be repeated here.\nhere is how to start the Hamlib\n```\nrotctld -vvvvv -m 2401 -r /dev/ttyUSB0\n```\n\n\n### Android\n#### Look4Sat \nLook4Sat wireless control is currently supported, please refer to this repo [Look4Sat-AntRunner-Controller](https://github.com/wuxx/Look4Sat-AntRunner-Controller)\n\n## System Detail\nThis section is a detailed description of the technical principle. Those who are not interested can ignore the description in this section and go directly to the actual operation chapter.\n\n### Rotator Motor Control \nThe bottom chip of the rotary controller uses ESP32, and the firmware running on it is GRBL, which was originally an open source CNC control firmware, and was first run on the ATmega328P chip (a low-end single-chip microcomputer with a main frequency of only 16MHz, SRAM The capacity is 2KB, and the Flash storage capacity is 32KB), while ESP32 is a WiFi chip launched by Espressif Information Technology. With 40nm process, dual-core 32-bit MCU, 2.4GHz dual-mode Wi-Fi and Bluetooth chip, the main frequency is up to 240MHz, the SRAM capacity is 520KB, and the Flash capacity is up to 16MB. It supports more and stronger features, so the [Grbl_ESP32 version](https://github.com/bdring/Grbl_Esp32) transplanted by the open source community is used.\n\nIt not only supports conventional serial port control, but also has a complete set of WEBUI, which can be manually controlled and configured through the WEBUI, and can also be controlled through the telnet 22 port. (Of course, an HTTP request can also be constructed to realize control from the WEB 80 port), since ESP32 supports Bluetooth, the motor control can also be achieved theoretically through Bluetooth. Since WiFi communication is more universal, the speed and stability of communication are also relatively high. Better, and the software protocol stack based on TCP/IP makes communication more stable and reliable, so the current implementation of wireless control is based on WiFi.\n\nBy default it creates its own wireless network SSID `GRBL_ESP` with default password `12345678` you can connect. You can connect and use WebUI to change, or you can change through serial commands to e.g. connect to your existing WiFi network. See the [Grbl_Esp32 wiki](https://github.com/bdring/Grbl_Esp32/wiki/Setting-up-the-Wifi-Network) for more instructions.\n\nNote 1: The control command of the Grbl system is generally called G-code, which is a simple command system also used for e.g. CNC or 3D printing. For example: \"G0 X0 Y5\" means to move the current position to the coordinates [0mm, 5mm]. But with AntRunner [360º = 40mm](https://github.com/Hamlib/Hamlib/blob/e9fb733dae0e7acb2897850787ebbdcf2520e37c/rotators/grbltrk/grbltrk.c#L220) (both X Azimuth and Y Elevation), so to move to 45º elevation `G0 Y5` or to move azimuth by one degree `G91 G0 X0.111 G90` (relative and then restore absolute).\n\nGrbl also has its own `$…` command system. For more:\n\n* [Grbl FAQ for G-Code](https://github.com/gnea/grbl/wiki/Frequently-Asked-Questions#where-are-g-codes-defined-what-does-each-of-them-do) points to http://linuxcnc.org/docs/html/gcode.html\n* Grbl `$…` commands: https://github.com/gnea/grbl/wiki/Grbl-v1.1-Commands\n* Grbl ESP32 has additional settings: https://github.com/bdring/Grbl_Esp32/wiki/Settings\n\n\n\n### Gpredict \nGpredict (https://github.com/csete/gpredict) is lead by Alexandru Csete (call sign oz9aec) is an open source real-time satellite tracking and orbit forecasting software that can track an unlimited number of satellites and display their positions and other data in lists, tables, maps, radars, etc. It can also predict the future time through a satellite and provide you with detailed information. In addition, it can connect to a variety of commonly used radio stations, SDR equipment and a variety of antenna rotators. The main use scenario of AntRunner is to cooperate with Gpredict. Real-time tracking control.\nSince it is an open source project based on GPL, Gpredict is still developing under the impetus of the community, and it is believed that more functions and more convenient features will be implemented in the future.\n\n### Hamlib \nHamlib (https://hamlib.github.io/) is a control library for radios and rotators based on the LGPL open source protocol, supporting Windows/Linux. Gpredict mentioned above can control various types of radio equipment and rotators. The above are all controlled by Hamlib. It can be understood that Hamlib is the middle layer between Gpredict and the actual hardware. Hamlib provides a unified control interface to Gpredict, and itself realizes the operation of complex hardware devices. In actual operation, Hamlib runs in the background as a separate task, which receives requests and sends responses through TCP port 4533. For example: Gpredict sends \"p 30 60\" through TCP port 4533, which means to adjust the current rotator azimuth to 30 degrees, the pitch angle is adjusted to 60 degrees, and the actual hardware operation is performed by Hamlib. Gpredict does not need to care what type of rotator is used, just specify the model of the rotator when Hamlib starts.\nNote: AntRunner's driver is implemented in Hamlib, and has been incorporated into the official Hamlib repository (https://github.com/Hamlib/Hamlib), merge node: https://github.com/Hamlib/Hamlib/pull/1032. Just take the latest version of Hamlib or any release [version 4.5](https://github.com/Hamlib/Hamlib/releases/tag/4.5) or later.\n\n### Look4Sat\nLook4Sat (https://github.com/rt-bishop/Look4Sat) is an Android-based open source satellite tracking software implemented by Arty Bishop. The page is concise and easy to use. The latest submission also supports the control of the rotator. The real-time display of the gyroscope is supported during the tracking process, which can easily align the satellite. At present, other similar satellite prediction software does not support this simple use method, and it is widely used in the current HAM.\nLook4Sat's control of the rotator is sent over the network, for example \"\\set_pos 30.0 60.0\" means to adjust the current spinner azimuth to 30 degrees and pitch to 60 degrees.\nSince Hamlib is not currently supported on the Android side, an additional hardware device is required to control through Look4Sat. Here, I designed a small system based on ESP32-C3 to convert network requests into actual GRBL commands and send them to the GRBL firmware to achieve orientation and The control of pitch is equivalent to implementing a simple \"Hamlib\" by itself. check the project here [Look4Sat-AntRunner-Controller](https://github.com/wuxx/Look4Sat-AntRunner-Controller)\n\n### SDR#\nSDR# is a popular SDR control application. It is simple and convenient to use. It supports a variety of common SDR devices, supports a variety of plug-in functions, and can be linked with Gpredict. At the same time, Gpredict can also support wireless devices and rotators. : Use SDR equipment such as RTL-SDR, and use Gpredict to track satellites at the same time, gpredict can send Doppler frequency to SDR# through the corresponding plug-in in SDR# for real-time adjustment, and Gpredict can control the rotator in real time for tracking. Other plug-ins in SDR# can analyze and record the received signal waveform to realize the linkage of the whole system.\n\n### How to Get One\nSome guys ask me if they could buy AntRunner rotator, so I made some AntRunner prototypes. Interested friends can place an order in my tindie store: https://www.tindie.com/products/johnnywu/the-antrunner-rotator/\n\n## Reference\n- Gpredict (https://github.com/csete/gpredict) \n- Hamlib (https://hamlib.github.io/)\n- Look4Sat (https://github.com/rt-bishop/Look4Sat)\n- sdr# (https://airspy.com/download/)\n- Look4Sat-AntRunner-Controller (https://github.com/wuxx/Look4Sat-AntRunner-Controller)\n"
  },
  {
    "path": "README_cn.md",
    "content": "# AntRunner 天线旋转器\n[English](./README.md)\n * [介绍](#介绍)\n * [特性](#特性)\n * [规格](#规格)\n * [使用教程](#使用教程)\n * [系统原理说明](#系统原理说明)\n * [参考](#参考)\n\n## 介绍\nAntRunner是MuseLab设计实现的便携式天线旋转器，支持360度方位角和180度俯仰角的控制，可承重最大10KG的天线，支持平台 Windows/Linux/Mac/RaspberryPi/Android，配合对应的开源上位机可实现卫星的实时自动指向跟踪，支持有线（串口）与无线（ Wifi 2.4G）2种控制方式，支持多种规格的天线（一般为八木天线），安装方便。使用12V电池供电，可利用充电宝+12V快充诱骗线直接供电，整体重量较轻，便于携带，精心设计的多种功能，更方便各位HAM在野外的架台使用。\n\n![AntRunner-1](https://github.com/wuxx/AntRunner/blob/master/doc/1.jpg)\n![AntRunner-3](https://github.com/wuxx/AntRunner/blob/master/doc/3.jpg)\n![AntRunner-2](https://github.com/wuxx/AntRunner/blob/master/doc/2.jpg)\n\n## 特性\n- 方位角和仰角全角度跟踪\n- 支持平台 Windows/Linux/RaspberryPi/Android\n- 支持有线串口控制\n- 支持无线WiFi 2.4G 控制\n- 12V电源供电，方便野外架设\n- 拆装方便\n\n## 规格\n- 旋转限制: AZ: 0 - 360°; EL: 0-180°\n- 最大负载: 10KG\n- 齿隙: AZ:1° EL:1°\n- 重量: 3.5KG\n- 尺寸:  120mmØ x 65mm (H)\ni\n## 使用教程\n\n### Windows\n\n#### 0 天线安装\n将天线通过U型抱箍安装至旋转器U型支架上，注意尽量安装至天线的重心处，以使运行更加平稳。\n\n#### 1 旋转器调整\n上电之前需要将旋转器的方位角调整到正北方(方位角0度)，俯仰调整为水平(俯仰角0度)，此步骤可通过手机指南针APP配合完成调整。\n\n#### 2 接线上电\n使用12V电源将旋转器上电，并通过TYPE-C线连接旋转器和PC，正常连接后设备管理器中会出现一个串口，如图所示\n![AntRunner-1](https://github.com/wuxx/AntRunner/blob/master/doc/AntRunner_Start-1.png)\n\n#### 3 启动Hamlib\n进入Hamlib目录，目录中有一批处理脚本，脚本中为一条命令, 如下所示，需要手动编辑一下脚本，修改其中的串口号。由于串口编号为系统分配，不同系统编号有所不同，故需要使用文本编辑器手动更改串口号再运行\n```\nrotctld.exe -vvvvv -m 2401 -r COMx\n```\n将COMx修改成设备管理器中出现的实际串口号即可，保存脚本，双击运行即可。\n![AntRunner-2](https://github.com/wuxx/AntRunner/blob/master/doc/AntRunner_Start-2.png)\n![AntRunner-3](https://github.com/wuxx/AntRunner/blob/master/doc/AntRunner_Start-3.png)\n![AntRunner-4](https://github.com/wuxx/AntRunner/blob/master/doc/AntRunner_Start-4.png)\n\n#### 4 启动Gpredict\n双击gpredict.exe，即可打开Gpredict程序\n\n![Gpredict-1a](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-1a.png)\n\n##### 4.1 经纬度配置\n首先需要配置你所在的地区的经纬度，选择 Edit -> General -> Ground Stations -> Add new，在出来的页面中配置好自己当地的经纬度、高度即可。\n![Gpredict-1c](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-1c.png)\n\n##### 4.2 卫星配置\n需要将欲跟踪的卫星添加至列表中，点击右上方的倒三角，选择 Configure, 在出现中的窗口中将欲跟踪卫星添加至右侧小窗口内即可\n![Gpredict-1b](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-1b.png)\n\n\n##### 4.3 旋转器配置\n新建一个旋转器设备，选择 Edit -> Interfaces -> Rotators -> Add New，并根据如图所示配置\n![Gpredict-1d](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-1d.png)\n\n##### 4.4 旋转器测试\n配置完旋转器之后，即可对旋转器进行初步的测试，点击右上方的倒三角，选择Antennna Control，即可进入旋转器控制页面，\nDevice选择刚刚新建的grbltrk, 点击Engage初始化旋转器，然后即可配置方位角和俯仰角，配置完旋转器会即时响应，并会实时返回当前的角度值。\n![Gpredict-2b](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-2b.png)\n![Gpredict-2c](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-2c.png)\n![Gpredict-2d](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-2d.png)\n\n##### 4.5 卫星跟踪\n在Target中选择需要跟踪的卫星如ISS，点击Track，旋转器即会开始实时跟踪卫星，若卫星未入境，则会调整俯仰角为0度，方位角为卫星入境时的角度，等待卫星入境，左方的雷达图中亦会显示卫星的入境轨迹以及当前的旋转器位置。\n![Gpredict-2e](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-2e.png)\n![Gpredict-3](https://github.com/wuxx/AntRunner/blob/master/doc/Gpredict-3.png)\n\n### 树莓派\n由于Linux下亦支持Gpredict，树莓派中可直接运行使用，操作步骤基本相同，在此不再赘述。\nHamlib启动命令如下\n```\nrotctld -vvvvv -m 2401 -r /dev/ttyUSB0\n```\n\n\n### Android\n#### Look4Sat \n目前已经实现通过Look4Sat控制，需要额外的控制板，具体参考此项目[Look4Sat-AntRunner-Controller](https://github.com/wuxx/Look4Sat-AntRunner-Controller)  \n注意：由于Look4Sat源码始终处于迭代开发中，适配代码可能过时，可能需要手动修改控制源码适配最新的Look4Sat\n\n## 系统原理说明\n本节为技术原理细节描述，不感兴趣的朋友可直接忽略本节说明，直接前往实际操作章节使用。\n\n### 旋转器电机控制原理说明\n旋转控制器底层芯片使用ESP32，其上运行的固件为GRBL，这原本是一款开源的CNC控制固件，最早运行于ATmega328P芯片上（一款性能较为低端，主频仅为16MHz的单片机，SRAM容量为2KB，Flash存储容量为32KB），而ESP32则是乐鑫信息科技推出的一颗WiFi芯片。拥有40nm工艺、双核32位MCU、2.4GHz双模Wi-Fi和蓝牙芯片、主频高达240MHz，SRAM容量为520KB，Flash容量最高则可达16MB， 较高的性能，丰富的外设使得其可以支持更多更强的特性功能，故这里使用的是开源社区移植的[GRBL版本](https://github.com/bdring/Grbl_Esp32)。其不仅支持常规的串口控制，而且有一套完善的WEBUI，可通过WEBUI进行手动控制、配置，也可通过telnet 22端口实现网络控制。（当然，也可以构造HTTP请求从WEB 80端口实现控制），由于ESP32支持蓝牙，理论上也可通过蓝牙实现电机的控制，由于WiFi的通信更加具有普适性，通信的速度、稳定性也相对更好一些，且基于TCP/IP的软件协议栈使得通信也更加稳定可靠，故当前无线控制的实现基于WiFi实现。\n注1：GRBL系统的控制命令一般称之为gcode，是一种简单的指令系统，例如：\"G0, X0, Y5\" 表明将当前位置移动到坐标[0mm, 5mm]处。\n\n### Gpredict上位机说明\nGpredict (https://github.com/csete/gpredict)为 Alexandru Csete （呼号为\noz9aec）发起并主导的开源的实时卫星跟踪和轨道预报软件，它可以跟踪无限数量的卫星,并以列表,表格,地图,雷达等方式显示他们的位置和其他数据。它还可以通过一个卫星预测未来的时间, 并为您提供详细资料，另外它还可以对接多种常用的电台、SDR设备和多种的天线旋转器，AntRunner的主要使用场景即为和Gpredict配合实现实时的跟踪控制。\n由于其是基于GPL的开源项目，当前Gpredict仍然在社区的推动下不断的发展，相信后续会有更多的功能、更方便的特性实现。\n\n\n### Hamlib中间件说明\nHamlib (https://hamlib.github.io/) 为基于LGPL开源协议的无线电和旋转器的控制库，支持Windows/Linux, 上面提到Gpredict可控制各种规格型号的无线电设备和旋转器，实际上都是通过Hamlib实现控制的，可以理解成Hamlib是Gpredict和实际的硬件的中间一层，Hamlib向Gpredict提供统一的控制接口，其自身则实现复杂的各类硬件设备的操作。在实际运行时，Hamlib为一个单独的任务运行在后台，其过TCP 4533端口接收请求并发送响应，例如：Gpredict通过4533 TCP端口发送“p 30 60”则意为将当前旋转器方位角调整为30度，俯仰角调整为60度，由Hamlib来进行实际的硬件操作，Gpredict并不需要关心使用的什么规格型号的旋转器，只需在Hamlib启动时候指定旋转器的型号即可。\n注：AntRunner的驱动即实现在Hamlib中，并已经合入到官方Hamlib仓库 (https://github.com/Hamlib/Hamlib) 取Hamlib的最新版本即可。合入点：https://github.com/Hamlib/Hamlib/pull/1032\n\n### Look4Sat说明 \nLook4Sat (https://github.com/rt-bishop/Look4Sat) 为 Arty Bishop实现的基于Android的开源卫星跟踪软件，页面简洁使用，最新的提交也支持了旋转器的控制，其主要特色是在卫星跟踪过程中支持陀螺仪的实时显示，可以方便的对准卫星，目前其他同类卫星预测软件均不支持这种简洁的使用方式，在当前HAM中较为广泛使用。\nLook4Sat对于旋转器的控制通过网络发送，例如\"\\set_pos 30.0 60.0\" 表明将当前旋转器方位角调整为30度，俯仰角调整为60度。\n由于Android端当前并不支持Hamlib，所以通过Look4Sat控制需要一个额外的硬件设备，这里自己基于ESP32-C3设计了一个小系统，用于将网络请求转换成实际的GRBL命令发送给GRBL固件实现方位和俯仰的控制，其作用相当于自己实现了一个简单的\"Hamlib\"。\n\n\n### SDR#\nSDR# 是目前流行的SDR控制上位机，使用简单方便，支持多种常见的SDR设备，支持多种插件功能，可以和Gpredict实现联动，同时Gpredict又可支持控制无线设备和旋转器，故可以实现：使用SDR设备例如RTL-SDR，同时用Gpredict跟踪卫星，gpredict可以通过SDR#中的对应插件向SDR#发送多普勒频率进行实时调整，同时Gpredict又可实时的控制旋转器进行跟踪。SDR#中的其他插件则可以对接收到的信号波形进行分析、录制等，实现全系统的联动。\n\n## 参考\n"
  },
  {
    "path": "firmware/flash_dump.sh",
    "content": "#!/bin/bash\n\nesptool.py -b 115200 -p /dev/ttyUSB0 read_flash 0x0 0x400000 flash_image.bin\n\n"
  },
  {
    "path": "firmware/flash_erase.sh",
    "content": "#!/bin/bash\n\nesptool.py -b 115200 -p /dev/ttyUSB0 erase_flash\n\n"
  },
  {
    "path": "firmware/flash_write.sh",
    "content": "#!/bin/bash\n\nESPTOOL=esptool.py\n\n\n#SER_PORT=COM32 #on windows with git-bash\n\nSER_PORT=/dev/ttyUSB0\n#SER_PORT=/dev/ttyUSB1\n#SER_PORT=/dev/ttyACM0\n\nBAUDRATE=460800\n\nIMAGE=flash_image_20220821.bin\n\necho \"write [$IMAGE]\"\n\n${ESPTOOL} \\\n        --chip esp32 \\\n        -p ${SER_PORT} \\\n        -b ${BAUDRATE} \\\n        --before=default_reset \\\n        --after=hard_reset \\\n        write_flash \\\n        --flash_mode dio \\\n        --flash_freq 40m \\\n        --flash_size 4MB \\\n        0x0 ${IMAGE}\n\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/AUTHORS.txt",
    "content": "This file is licensed to you under the license specified in the included file\n`COPYING'. Look there for further details.\n\nAuthors of the Hamlib API, original code:\n\n Frank Singleton and Stephane Fillod\n\n\nContributors:\n(if any is missing, please email the current maintainer).\nFor any reason, if you prefer not to appear in this list, please let me know.\n\nM: Current maintainer\nC: Contributors\nW: Web-page with status/info\nS: Status, one of the following:\n\n        Supported:      Someone is actually bothered to look after this.\n        Maintained:     Someone actually looks after it.\n        Odd Fixes:      It has a maintainer but they don't have time to do\n                        much other than throw the odd patch in. See below..\n        Orphan:         No current maintainer [but maybe you could take the\n                        role as you write your new code].\n        Obsolete:       Old code. Something tagged obsolete generally means\n                        it has been replaced by a better system and you\n                        should be using that.\n\n\nBackends:\n\n[adat: ADT-200A]\nM: Frank Goenninger DG1SBG\n\n[alinco: DX77-T]\nM: Ben Coleman NJ8J\n\n\n[aor]\nC: testing by John Ronan\n\n[aor: AR-7030]\nM: Friedrich Melchert DC9RP\n\n[aor: AR-7030 Plus]\nM: Larry Gadallah VE6VQ\n\n[aor: AR-3030]\nM: Tristan Mills\n\n[aor: AR-8200]\nM: Rob Walker\n\n\n[drake]\nM: Mark J. Fine\n\n\n[icom: ic7000]\nM: Kent Hill, AD7AI\n\n[icom: ic7200]\nM: James Watson, HZ1JW\n\n[icom: ic718]\nM: Chuck Gilkes, WD0FCL/4\n\n[icom: icr7000]\nM: Chuck Hemker, N2POR\n\n[icom: ic735]\nC: Darren Hatcher, G0WCW\n\n[icom: ic751]\nC: Lars E. Pettersson, SM6RPZ\n\n[icom: icr75]\nM: Mark J. Fine\n\n[icom: OptoScan]\nM: Michael Smith, KE4RJQ\n\n[icom]\nM: Stephane Fillod, F8CFE\n\n\n[jrc]\nM: Mark J. Fine\nC: Manual and testing by Bob Parnass, AJ9S\n\n\n[kenwood]\nM: Joop Stakenborg, PG4I\nC: Alessandro Zummo, IZ1PRB\n\n[kenwood: K2]\nM: Nate Bargmann, N0NB\nM: Brian Mury, VE7NGR\nC: Leigh Klotz, WA5ZNU\n\n[kenwood: K3]\nM: Nate Bargmann, N0NB\nC: Alexander Sack\n\n[kenwood: TS-480SAT]\nM: Juergen Rinas, DC3BW\n\n[kenwood: TS-570]\nM: Rob Frohne, KL7NA\nC: Thomas Beierlein, DL1JBE\n\n[kenwood: R-5000]\nM: Mark J. Fine\n\n[kenwood: tmd700]\nM: Charles Suprin, AA1VS\n\n[kenwood: thg71,tmv7,tmd700]\nC: Thierry Leconte, F4DWV\n\n[kenwood: thg71,tmv7]\nM: Andrew McNamara\n\n[kenwood: thd7]\nM: Stephane Fillod, F8CFE\n\n[kenwood: ts-850]\nC: Rob Frohne, KL7NA\n\n\n[kit: Si570 AVR-USB]\nC: Fabrice, F4AVI\n\n[kit: Elektor SDR]\nC: John Nogatch, AC6SL\n\n[pcr: pcr100,pcr1000]\nM: Alessandro Zummo, IZ1PRB\nC: Darren Hatcher, G0WCW\n\n\n[tentec]\nM:\nC: testing by James Chance, N3TKD\n\n[tentec: tt516]\nM: James Nykiel\n\n[tentec: tt538]\nM: Mike Markowski AB3AP\n\n[tentec: tt550]\nM: Ken Koster, N7IPB\n\n[tentec: tt565]\nM: Martin Ewing AA6E\n\n[tentec: Argonaut V]\nC: Dave Freese, W1HKJ\n\n[tentec: tt585]\nC: Bert, KG4BEC\n\n[tentec: rx331]\nM: Berndt Josef Wulf, VK5ABN\n\n\n[uniden: 245xlt]\nM: Eric Cottrell WB1HBU\n\n\n[winradio]\nM:\nC: Pascal Brisset\n\n\n[yeasu: ft1000d]\nM: Serge Pashenkov\n\n[yeasu: ft100]\nM: Alex V Flinsch, KC2IVL\n\n[yaesu: ft736]\nC: Ron Patterson, W6FM\n\n[yaesu: ft747]\nM:\nC: Chris Bryant, G3WIE\nC: Frank Singleton, VK3FCS\n\n[yaesu: ft767gx]\nM: Steve Conklin, AI4QR\n\n[yaesu: ft817]\nM: Chris Karpinsky, AA1VL\n\n[yaesu: ft847]\nM: Jim Jerzycke, KQ6EA\nC: Frank Singleton, VK3FCS\n\n[yaesu: ft920, ft890, ft900]\nM: Nate Bargmann, N0NB\n\n[yaesu: ft980]\nM: Wolfgang Buesser, DK1BW\n\n[yaesu: ft990]\nM: Berndt Josef Wulf, VK5ABN\n\n[yaesu: ft950,newcat]\nM: Terry Embry, KJ4EED\n\n[yaesu: VR-5000]\nM: Jacob Heder\n\n[yaesu: FT-600]\nC: Kārlis Millers\n\n[CM108 GPIO PTT]\nM: Andrew Errington, ZL3AME\n\n\nRotators\n[celestron]\nM: Stephane Fillod, F8CFE\nC: Eric/N3KQX\n\n\n[easycomm]\nM: Luc Langehegermann, LX2GT\nC: Francois Retief\n\n\n[fodtrack]\nM: Luc Langehegermann, LX2GT\n\n\n[amsat/if-100]\nM: Stephane Fillod, F8CFE\nC: Patrick Strasser, OE6PSE\n\n\n[heathkit:HD 1780 Intellirotor]\nM: Rob Frohne, KL7NA\n\n\n[rotorez]\nM: Nate Bargmann, N0NB\n\n\n[spid]\nM: Norvald H. Ryeng, LA6YKA\n\n\n[m2]\nM: Magne Mæhre, LA1BFA\nC: Ron Patterson, W6FM\n\n\n[ars]\nM: Stephane Fillod, F8CFE\nC: Chris Bryant, G3WIE\n\n\n[ts7400]\nM: Øystein Hårberg, LA7LKA\n\n\n[indi]\nM: Norbert Varga, HA2NON\n\n\n[Frontend]\nM: Stephane Fillod, F8CFE\n\n\n[src/locator.c]\nM: Dave Hines, M1CXW\nC: Stephane Fillod, F8CFE\nC: Nate Bargmann, N0NB\n\n\n[test utilities]\nM: Stephane Fillod, F8CFE\nC: Nate Bargmann, N0NB\nC: Nirgal Vourgère\n\n\n[platform: FreeBSD]\nM: Diane Bruce, VA3DB\n\n[platform: NetBSD]\nM: Berndt Josef Wulf, VK5ABN\n\n[platform: win32]\nM: Stephane Fillod, F8CFE\nC: VB & testing by Darren Hatcher, G0WCW\nC: VB.NET wrapper by Michael Benz\n\n\n[packaging: debian]\nM: Kamal Mostafa, KA6MAL\nM: Jaime Robles, EA4TV\nC: Joop Stakenborg, PG4I\n\n[packaging: RPM]\nM: Alexandru Csete, OZ9AEC\nM: Joop Stakenborg, PG4I\n\n\n[Web site: http://www.hamlib.org]\nM: Joop Stakenborg, PG4I\nM: Stephane Fillod, F8CFE\nM: Nate Bargmann, N0NB\n\n\nE-mail addresses:\n\nFrank Singleton, VK3FCS, <vk3fcs (at) ix.netcom.com>\nStephane Fillod, F8CFE, <fillods (at) users.sourceforge.net>\nPascal Brisset <pab (at) users.sourceforge.net>\nNate Bargmann, N0NB, <n0nb (at) arrl.net>\nChris Karpinsky, AA1VL, <aa1vl (at) arrl.net>\nJoop Stakenborg, PG4I, <pg4i (at) amsat.org>\nBob Parnass, AJ9S, <parnass (at) megsinet.net>\nFrancois Retief, <fgretief (at) sun.ac.za>\nJames Chance, N3TKD, <n3tkd (at) n3tkd.net>\nChuck Hemker, N2POR, <n2por (at) amsat.org>\nAlex V Flinsch, KC2IVL, <avflinsch (at) verizon.net>\nChuck Gilkes, WD0FCL/4, <chuck (at) webbasset.com>\nDale E. Edmons, KD7ENI, <dedmons (at) comcast.net>\nMichael Smith, KE4RJQ <james.m.smith (at) earthlink.net>\nBerndt Josef Wulf, VK5ABN <wulf (at) ping.net.au>\nMark J. Fine <mark.fine (at) fineware-swl.com>\nJim Jerzycke, KQ6EA <kq6ea (at) amsat.org>\nAlexandru Csete OZ9AEC <alexc (at) phys.au.dk>\nDiane Bruce, VA3DB <db (at) db.net>\nDave Hines, M1CXW, <hamlib (at) dph.fluff.org>\nDarren Hatcher, G0WCW, <g0wcw (at) hatcher.org.uk>\nBen Coleman, NJ8J, <nj8j (at) benshome.net>\nSerge Pashenkov <serge (at) gnode.org>\nLars E. Pettersson SM6RPZ <lars (at) homer.se>\nThomas Beierlein, DL1JBE, <y32kn (at) users.sourceforge.net>\nKent Hill, AD7AI, <fuzzballz (at) comcast.net>\nDave Freese, W1HKJ, <w1hkj (at) w1hkj.com>\nRob Frohne, KL7NA, <frohro (at) wwc.edu>\nSteve Conklin, AI4QR, <steve (at) conklinhouse.com>\nMartin Ewing, AA6E, <aa6e (at) arrl.net>\nTerry Embry, KJ4EED, <mrtembry (at) users.sourceforge.net>\nAlessandro Zummo, IZ1PRB <alessandro.zummo (at) towertech.it>\nNorvald H. Ryeng, LA6YKA <norvald (at) ryeng.name>\nLarry Gadallah, VE6VQ <lgadallah (at) gmail.com>\nKamal Mostafa, KA6MAL, <kamal (at) whence.com>\nJaime Robles, EA4TV, <jaime (at) debian.org>\nWolfgang Buesser, DK1BW, <wolfgang.buesser (at) web.de>\nMagne Mæhre, LA1BFA, <magne (at) samfundet.no>\nCharles Suprin, AA1VS, <hamaa1vs (at) gmail.com>\nRobert Steinhäußer, DL1NC, <dl1nc (at) users.sourceforge.net>\nJames Watson, HZ1JW, <jawatson (at) users.sourceforge.net>\nJuergen Rinas, DC3BW, <jrinas  (at) users.sourceforge.net>\nKamal Mostafa, KA6MAL, <kamal (at) whence.com>\nRoger, <roger-linux (at) users.sourceforge.net>\nTristan Mills, <t_mills (at) users.sourceforge.net>\nTerry Dawson, VK2KTJ, <terry (at) users.sourceforge.net>\nØystein Hårberg, LA7LKA, <oystein.haarberg (at) netrunner.nu>\nAlexander Sack <pisymbol (at) gmail.com>\nNirgal Vourgère <contact_hamlib (at) nirgal.com>\nAndrew Errington <a.errington (at) lancaster.ac.uk>\nKārlis Millers YL3ALK <yl3alk (at) lrg.lv>\nNorbert Varga HA2NON <nonoo (at) nonoo.hu>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/AntRunner_Start_Serial.bat",
    "content": ".\\bin\\rotctld.exe -vvvvv -m 2401 -r COM1\n::.\\bin\\rotctld.exe -vvvvv -m 601 -r COM470\npause\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/AntRunner_Start_WiFi.bat",
    "content": ".\\bin\\rotctld.exe -vvvvv -m 2402 --set-conf=rot_pathname=\"192.168.123.163:23\""
  },
  {
    "path": "software/hamlib-w64-4.5~git/COPYING.LIB.txt",
    "content": "                  GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n[This is the first released version of the Lesser GPL.  It also counts\n as the successor of the GNU Library Public License, version 2, hence\n the version number 2.1.]\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software--to make sure the software is free for all its users.\n\n  This license, the Lesser General Public License, applies to some\nspecially designated software packages--typically libraries--of the\nFree Software Foundation and other authors who decide to use it.  You\ncan use it too, but we suggest you first think carefully about whether\nthis license or the ordinary General Public License is the better\nstrategy to use in any particular case, based on the explanations below.\n\n  When we speak of free software, we are referring to freedom of use,\nnot price.  Our General Public Licenses are designed to make sure that\nyou have the freedom to distribute copies of free software (and charge\nfor this service if you wish); that you receive source code or can get\nit if you want it; that you can change the software and use pieces of\nit in new free programs; and that you are informed that you can do\nthese things.\n\n  To protect your rights, we need to make restrictions that forbid\ndistributors to deny you these rights or to ask you to surrender these\nrights.  These restrictions translate to certain responsibilities for\nyou if you distribute copies of the library or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link other code with the library, you must provide\ncomplete object files to the recipients, so that they can relink them\nwith the library after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  We protect your rights with a two-step method: (1) we copyright the\nlibrary, and (2) we offer you this license, which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  To protect each distributor, we want to make it very clear that\nthere is no warranty for the free library.  Also, if the library is\nmodified by someone else and passed on, the recipients should know\nthat what they have is not the original version, so that the original\nauthor's reputation will not be affected by problems that might be\nintroduced by others.\n\f\n  Finally, software patents pose a constant threat to the existence of\nany free program.  We wish to make sure that a company cannot\neffectively restrict the users of a free program by obtaining a\nrestrictive license from a patent holder.  Therefore, we insist that\nany patent license obtained for a version of the library must be\nconsistent with the full freedom of use specified in this license.\n\n  Most GNU software, including some libraries, is covered by the\nordinary GNU General Public License.  This license, the GNU Lesser\nGeneral Public License, applies to certain designated libraries, and\nis quite different from the ordinary General Public License.  We use\nthis license for certain libraries in order to permit linking those\nlibraries into non-free programs.\n\n  When a program is linked with a library, whether statically or using\na shared library, the combination of the two is legally speaking a\ncombined work, a derivative of the original library.  The ordinary\nGeneral Public License therefore permits such linking only if the\nentire combination fits its criteria of freedom.  The Lesser General\nPublic License permits more lax criteria for linking other code with\nthe library.\n\n  We call this license the \"Lesser\" General Public License because it\ndoes Less to protect the user's freedom than the ordinary General\nPublic License.  It also provides other free software developers Less\nof an advantage over competing non-free programs.  These disadvantages\nare the reason we use the ordinary General Public License for many\nlibraries.  However, the Lesser license provides advantages in certain\nspecial circumstances.\n\n  For example, on rare occasions, there may be a special need to\nencourage the widest possible use of a certain library, so that it becomes\na de-facto standard.  To achieve this, non-free programs must be\nallowed to use the library.  A more frequent case is that a free\nlibrary does the same job as widely used non-free libraries.  In this\ncase, there is little to gain by limiting the free library to free\nsoftware only, so we use the Lesser General Public License.\n\n  In other cases, permission to use a particular library in non-free\nprograms enables a greater number of people to use a large body of\nfree software.  For example, permission to use the GNU C Library in\nnon-free programs enables many more people to use the whole GNU\noperating system, as well as its variant, the GNU/Linux operating\nsystem.\n\n  Although the Lesser General Public License is Less protective of the\nusers' freedom, it does ensure that the user of a program that is\nlinked with the Library has the freedom and the wherewithal to run\nthat program using a modified version of the Library.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, whereas the latter must\nbe combined with the library in order to run.\n\f\n                  GNU LESSER GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library or other\nprogram which contains a notice placed by the copyright holder or\nother authorized party saying it may be distributed under the terms of\nthis Lesser General Public License (also called \"this License\").\nEach licensee is addressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control compilation\nand installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n\n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\f\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\f\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\f\n  6. As an exception to the Sections above, you may also combine or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Use a suitable shared library mechanism for linking with the\n    Library.  A suitable mechanism is one that (1) uses at run time a\n    copy of the library already present on the user's computer system,\n    rather than copying library functions into the executable, and (2)\n    will operate properly with a modified version of the library, if\n    the user installs one, as long as the modified version is\n    interface-compatible with the version that the work was made with.\n\n    c) Accompany the work with a written offer, valid for at\n    least three years, to give the same user the materials\n    specified in Subsection 6a, above, for a charge no more\n    than the cost of performing this distribution.\n\n    d) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    e) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe materials to be distributed need not include anything that is\nnormally distributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\f\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties with\nthis License.\n\f\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under any\nparticular circumstance, the balance of the section is intended to apply,\nand the section as a whole is intended to apply in other circumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License may add\nan explicit geographical distribution limitation excluding those countries,\nso that distribution is permitted only in or among countries not thus\nexcluded.  In such case, this License incorporates the limitation as if\nwritten in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Lesser General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\f\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\n                            NO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\f\n           How to Apply These Terms to Your New Libraries\n\n  If you develop a new library, and you want it to be of the greatest\npossible use to the public, we recommend making it free software that\neveryone can redistribute and change.  You can do so by permitting\nredistribution under these terms (or, alternatively, under the terms of the\nordinary General Public License).\n\n  To apply these terms, attach the following notices to the library.  It is\nsafest to attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least the\n\"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the library's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nAlso add information on how to contact you by electronic and paper mail.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the library, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the\n  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\n\n  <signature of Ty Coon>, 1 April 1990\n  Ty Coon, President of Vice\n\nThat's all there is to it!\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/COPYING.txt",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\n 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Lesser General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n                            NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License along\n    with this program; if not, write to the Free Software Foundation, Inc.,\n    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/ChangeLog.txt",
    "content": "For a complete log of changes to Hamlib, please visit:\n\nhttp://sourceforge.net/p/hamlib/code/commit_browser\n\nMajor changes in 4.0 affecting usage\nMost rig model numbers have changed\nRIG_LEVEL_VOX has been deprecated and replaced by RIG_LEVEL_VOXDELAY\nrigctl 'f' command now returns VFO argument too\nrigctl 'y' and 'Y' command now take/show antenna argument and option.\nrange_list items are undergoing changes towards a different model TBD\nRTS/DTR PTT sharing is off by default now -- use serial_share=1 option to\nenable\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/LICENSE.txt",
    "content": "Hamlib - Ham Radio Control Libraries\n\nCopyright (C) 2000,2001  Frank Singleton\nCopyright (C) 2000,2001  Stephane Fillod\nCopyright (C) 2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,\n              2010,2011,2012\n              The Hamlib Group\n\nSee the included README file for more information on Hamlib and the Hamlib\nProject or visit http://www.hamlib.org for documentation and links to the\nsource code of Hamlib.\n\nThe 'AUTHORS' file lists contributors known as the The Hamlib Group.\n\nThe frontend library source code files and associated backend library\nsource code files are licensed and released under the Lesser GNU Public\nLicense (LGPL):\n\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU Lesser General Public License for more details.\n\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,\n    MA 02110-1301 USA\n\nThe included file 'COPYING.LIB' is a copy of the GNU Lesser General\nPublic License.\n\n\nVarious other supplied program source files and example source files are\nlicensed and released under the GNU Public License (GPL):\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License along\n    with this program; if not, write to the Free Software Foundation, Inc.,\n    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\nThe included file 'COPYING' is a copy of the GNU General Public License.\n\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/README.betatester.txt",
    "content": "Hamlib - (C) Frank Singleton 2000 (vk3fcs@ix.netcom.com)\n         (C) Stephane Fillod 2000-2011\n         (C) The Hamlib Group 2000-2013\n\nWhy does Hamlib need beta-testers?\n==================================\n\nHamlib is developed by a team of radio enthusiasts around the world, for\nfun, much in the spirit of ham radio. (Note that it is not restricted for\nham usage only). There are a great deal of protocols and rigs around the\nworld developers may not own. However, protocols may be available, so\nbackends can be implemented, but cannot always be tested by developers.\nThat's where beta-testers are so precious. On top of that, I've been told\nthat there's no such sure thing like bug free code.\n\nFeedback and improvement requests are also valuable.\n\n\nOkay, you volunteer as beta-tester, how to proceed?\n===================================================\n\nFirst of all, you can start testing official releases. They are easier to\ntest because they come in precompiled and packaged (.rpm, .deb, etc.) but\nthey have the drawback of being older than the Git repository. Reports from\nthese versions are still very appreciated.  Please send them to the\nhamlib-developer@lists.sourceforge.net mailing list.\n\nHowever, the development of Hamlib is still very active, so it's better to\ntest from the latest Git version of the code.  And, depending on feedback\nyou make, developers can commit a fix, so you can try out the change soon\nafter, without waiting for the next official version.\n\nTo proceed, you will have first to obtain either a daily snapshot or a check\nout the latest sources from the Git repository, then rebuild the Hamlib\npackage and finally test it with your rig. Don't worry, it's much simpler\nthan it looks, despite the size of the package.\n\nPre-requisite:\n - some kind of internet access\n - POSIXish compiler toolchain (gcc, make, C library development headers,\n   etc., see README.developer for a complete list and building from a Git\n   checkout)\n\n\nSo here we go:\n\nDaily Git master branch snapshots:\n==================================\n\nDownload the latest Git master branch snapshot from:\n\nhttp://n0nb.users.sourceforge.net\n\nYou'll find a tarball with a name like\nhamlib-3.0~git-30e58df-20121009.tar.gz, i.e. a check out made 09 Oct 2012\nWith a Git SHA1 of 30e58df (The SHA1 is a signature of each commit.  Each is\nunique and as our project is small, the first seven characters for the full\n40 character SHA1 are likely unique.  The shorthand SHA1 is automatically\ngenerated and may become longer in the future.), ready for building using\nthe familiar \"three step\" (see below).  Each morning by about 1130z a new\nsnapshot is generated and uploaded and the prior day's version is removed.\n\nThe advantage of the Git snapshot is that you won't need as many tools\ninstalled to build Hamlib as the work of the GNU Build System has already\nbeen done.  Most of the other packages listed below will be needed.  If you\ntell the 'configure' script to build certain parts of Hamlib like\ndocumentation or scripting language bindings the relevant optional packages\nwill be needed.  See 'configure --help' for more information.\n\nHere is a list of development packages needed for a complete build of the\nlibrary (Debian package names are listed, other distributions may differ):\n\n* Gnu C (gcc) or any C99 compliant compiler  # gcc --version\n* Gnu make  (or any modern one, BSD okay)    # make --version\n\nN.B. The Debian and derivatives (Ubuntu and friends) 'build-essentials'\npackage will install a number of tools and minimize the number of packages\nthat need to be installed manually.\n\nOptional, but highly recommended for a complete build:\n* GNU C++ (g++)                     # g++ --version\n* swig (for bindings) 1.3.14+       # swig -version\n* perl devel                        # h2xs\n* tcl devel                         # tcltk-depends\n* python devel                      # python-config\n* zlib devel                        # Needed by configure's test for Python\n* libxml2 devel                     # xml2-config --version\n* libgd2 devel                      # gdlib-config --version\n* libusb-1.0 devel                  # ver 1.0 or newer (not 0.1!)\n* libreadline devel                 # ver 5.2 or newer\n\nN.B  The libusb package is required for building most of the 'kit' backend.\nThe newer version is needed, not 0.1.  Debian and derivatives\npackage libusb-1.0 which is what is needed.\n\nDocumentation:\n* Doxygen\n\n\nGit master branch daily snapshot build:\n=======================================\n\nReading the INSTALL file in top directory will explain in more detail how\nto do the following commands.\n\n        ./configure [--prefix=$HOME/local]\n        make\n        make check\n        make install\n\nThe prefix argument is optional.  Convention is that local packages be\nplaced in /usr/local away from distribution installed packages  This is the\ndefault location for the snapshots so it may be disregarded unless you wish\nto install Hamlib elsewhere.  The example above would install Hamlib to\nthe user's home directory under the 'local' subdirectory.\n\nOther useful options are '--with-perl-binding' or '--with-python-binding' or\n'--with-tcl-binding' if you are interested in Swig binding support for\nthose scripting languages  If you are unsure it is safe to ignore these\noptions.\n\n'make' will run the C and, optionally, the C++ compiler building all of the\nbinary object files and finally linking all of them together to form the\nHamlib \"frontend\" and \"backend\" libraries.\n\nThe 'make check' target will run a few predetermined tests using the 'dummy'\n(rig model 1) backend and some other Hamlib functions in the build tree.\nThis is a basic sanity check and cannot test all backends.\n\nThe 'make install' target will require super user (root/administrator)\nprivileges when installing to the system directories as a normal user.\nSome Linux distributions offer the 'sudo' command to grant temporary root\nprivileges or the 'su' command to login as \"root\".  Consult your\ndistribution's documentation.\n\nNOTE!  If Hamlib has not been previously installed as a locally built\npackage you will need to make sure that 'ldconfig' is configured correctly\nand run after 'make install'.  Most modern distributions have an\n/etc/ld.so.conf.d/ directory where local configuration can be made. Later\nversions of Debian and derivatives have a file named 'libc.conf' in this\ndirectory.  The contents of libc.conf are:\n\n# libc default configuration\n/usr/local/lib\n\nIf your system does not have such a file, one will need to be created and\nthen 'ldconfig' will need to be run as the root user so that applications\nusing the Hamlib libraries can find them.\n\nTo delete the binary files from the source directory after compiling:\n\n        make clean\n\nTo also remove the Makefiles and other build files generated by 'configure',\nalong with the binary files as with 'make clean' above:\n\n        make distclean\n\nThe 'configure' script will need to be run again as above.\n\nThe above commands will clean things up so Hamlib can be compiled with other\nconfigure script options.\n\nTo remove Hamlib from your system:\n\n        sudo make uninstall\n\nNote that due to a limitation in a Perl support script that if the Perl\nbinding is built and installed that not all of the files under\n/usr/local/lib/perl/PERL_VERSION will not be removed.\n\n\nGit checkout:\n=============\n\nPlease read the beginning of README.developer file, especially Section 1 which\ndetails the Git checkout, the required tools and versions (very important or\nmake won't even work!), and how to use the bootstrap script.\n\n\nStructure:\n==========\n\nFor the brave who want to peruse the contents, here are what all the\nsubdirectories are for (these are just a sample as more are added from time to\ntime):\n\nalinco,aor,icom,\njrc,kachina,kenwood,\npcr,tentec,uniden,\nwinradio,\nyaesu,etc:          rig backends\neasycomm,rotorez,\nsartek, etc:        rotator backends\ndummy:              virtual dummy rig and rotator, for testing use.\nlib:                library for functions missing on your system\nbindings            Perl, Python, Tcl, and Visual Basic bindings\nc++:                C++ bindings\ndoc:                documentation base and scripts to extract from src\ninclude/hamlib:     exported header files go here\ninclude:            non-distributed header files go there\nsrc:                Hamlib frontend source directory\ntests:              rigctl/rotctl and various C programs for testing\n\n\nTesting Hamlib:\n===============\n\nDon't attempt to test Hamlib from the source directory unless you're a\ndeveloper and you understand the side effects of *not* installing freshly\ngenerated objects (basically having to mess with LD_LIBRARY_PATH and\n.libs).  Do an 'sudo make install' to install the libraries in the system\narea.  (You did run 'sudo ldconfig' after 'sudo make install', right?)\n\nSo here we go. First of all, identify your rig model id.  Make sure\n/usr/local/bin (or the path you set --prefix to above) is in your $PATH, as\nyour shell has to be able to locate rigctl.\n\nRun 'rigctl -l' to get a list of rigs supported by Hamlib.\n\nIf you cannot find your radio in the list, please report to the\nhamlib-developer mailing list. The protocol manual and rig specifications\nwill help us a lot.\n\nYou found your rig's ID?  Good!  You're almost ready to use rigctl.\nHave a quick look at its manual page:\n\n    man rigctl\nor:\n    man -M /usr/local/man rigctl\n\nor simply:\n    rigctl --help\n\nLet's say you own an Icom IC-756:\n\n    rigctl -vvvvv -r /dev/ttyS0 -m 326\n\nThe -vvvvv is very important since this will increase verbosity, and give\nprecious traces to developers if something goes wrong. At this level, the\nprotocol data exchanged will also be dumped to the screen.  Some backends\nproduce a useful amount of data regarding function calls and critical\nvariables with the -vvvv option without all the protocol data.\n\nUnless some problem shows up, you should be presented with a menu\nlike \"Rig command: \". Enter \"?\" followed by return to have the list\nof available commands. 'Q' or 'q' quits rigctl immediately.\n\nMost wanted functions to be tested are:\n'_'     get misc information on the rig\n'f'     get frequency\n'F'     set frequency, in Hz\n'm'     get mode\n'M'     set mode (AM,FM,CW,USB,etc. and passband width in Hz)\n'v'     get vfo\n'V'     set vfo (VFOA, VFOB, etc.)\n\nf,F     get_freq/set_freq       try various (<1MHz, <30Mhz and >1GHz)\nv,V     get_vfo/set_vfo         VFOA, VFOB\nm,M     get_mode/set_mode       FM, USB, LSB, CW, WFM, etc.\n                                passband is in Hz (pass 0 for default)\nG       vfo_op                  UP, DOWN\n_       get_info                should give remote Id and firmware vers\n\nNB: some functions may not be implemented in the backend or simply not\navailable on this rig.\n\nWhen reporting to the hamlib-developer mailing list, please include traces\nand also comments to tell developers if the action performed correctly on\nthe rig.\n\nTip: Traces can be hard to cut and paste sometimes. In that case, there's a\nhandy tool for you:  script(1) (the (1) is not a part of the command, rather\nit is a Unix convention telling which section of the manual it is found, in\nthis case section 1, user commands.  e.g. 'man 1 script'). It will make a\ntypescript of everything printed on your terminal and save it to the file\nyou give it.\n\n    $ script my_rig_traces.txt\n    Script started, file is my_rig_traces.txt\n    $ rigctl -vvvvv -r /dev/ttyS0 -m 326\n    rig:rig_init called\n    rig: loading backend icom\n    icom: _init called\n    rig_register (309)\n    rig_register (326)\n    rig:rig_open called\n    Opened rig model 326, 'IC-756'\n\n    Rig command: q\n    rig:rig_close called\n    rig:rig_cleanup called\n    $ exit\n    exit\n    Script done, file is my_rig_traces.txt\n    $\n\nAnd then send my_rig_traces.txt to the hamlib-developer mailing list.\n\n\nSome models need S-meter calibration, because the rig only returns raw\nmeasurement.  It's easy, it takes only 10mn. Here's how to proceed:\n\n 1. Fire up the rigctl program released with the Hamlib package,\n    and pass along options as needed (serial speed, etc.).\n 2. Tune to some frequency reporting S0 to the radio S-Meter.\n 3. At rigctl prompt, issue \"get_level\" ('l' in short) of the level\n    RAWSTR.\n 4. Write down the S-level read on radio front panel, and the RAWSTR\n    value retrieved.\n 5. Repeat from step 2 with S9 and S9+60dB. Actually the more plots,\n    the better, otherwise Hamlib does interpolation.\n 6. Send the table to the hamlib-developer mailing list and it will be\n    added in the next release of Hamlib.\n\nNB: It is well known the S-Meter of any given radio is far from being\naccurate. For owners with a fully equipped lab, you may want to make the\nabove-mentioned measurements with a good signal generator and a set of\ncalibrated attenuators. Greg W8WWV has an insightful page about S-Meter\ncalibration:\n\nhttp://www.seed-solutions.com/gregordy/Amateur%20Radio/Experimentation/SMeterBlues.htm\n\n\nOkay folks, test as much as you can, in the weirdest situations if\npossible. There is a special prize for those who find 'Segmentation fault'\nand other nasty bugs.\n\nNeedless to say, patches are also very welcome (see README.developer).  :-)\n\n\nStephane - F8CFE and The Hamlib Group\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/README.txt",
    "content": "Hamlib - (C) Frank Singleton 2000 (vk3fcs@ix.netcom.com)\n         (C) Stephane Fillod 2000-2011\n         (C) The Hamlib Group 2000-2012\n\nThe purpose of this project is to provide stable, flexible, shared libraries\nthat enable quicker development of Amateur Radio Equipment Control\nApplications.\n\nMany Amateur Radio Transceivers come with serial interfaces that allows\nsoftware to control the radio. This project will endeavour to provide shared\nlibraries that greatly simplify the application programmer's interaction\nwith radio equipment and other controllable devices such as rotators,\nswitches, etc.\n\nSupported Radios\n----------------\n\nThe Hamlib Wiki page, Supported Radios, contains a snapshot of the supported\nradios at the time of the last Hamlib release.  Go to http://www.hamlib.org\nto reach the Wiki.\n\nHamlib Design\n-------------\n\nThe library provides functions for both radio and rotator control,\nand data retrieval from the radio or rotator.  A number of functions useful\nfor calculating distance and bearing and grid square conversion are included.\n\nlibhamlib.so -  library that provides generic API for all RIG types.\n    This is what Application programmers will \"see\".  Will have different\n    names on other platforms, e.g. libhamlib-2.dll on MS windows.  Also\n    contains all radio and rotator \"backends\" (formerly in their own\n    dlopen'ed libraries) provided by Hamlib.\n\nBackend Examples are:\n---------------------\n\n1. yaesu will provide connectivity to Yaesu FT 747GX Transceiver, FT 847\n   \"Earth Station\", etc. via a standard API.\n\n2. xxxx. will provide connectivity to the Wiz-bang moon-melter 101A (yikes..)\n\nHamlib will also enable developers to develop professional looking GUI's\ntowards a standard control library API, and they would not have to worry\nabout the underlying connection towards physical hardware.\n\nInitially serial (RS232) connectivity will be handled, but we expect that IP\n(and other) connectivity will follow afterwards.  Connection via a USB port\nis accomplished via the Linux kernel support.  USB to serial converters are\nwell supported.  Other such devices may be supported as long as they present\na serial (RS-232) interface to Hamlib.\n\nAvailability\n------------\n\nMost distributions have the latest Hamlib release in their testing or alpha\nversions of their distribution.  Check your package manager for the Hamlib\nversion included in your distribution.\n\nDeveloping with Hamlib API\n--------------------------\n\nAPI documentation is at:\n\n        https://github.com/Hamlib/Hamlib/wiki/Documentation\n\nTake a look at tests/README for more info on simple programming examples and\ntest programs.\n\nC++ programming is supported and language bindings are available for Perl,\nPython, and TCL.  A network daemon utility is also available for any\nprogramming language that supports network sockets (even netcat!).\n\n\nRecompiling\n-----------\n\nHamlib is entirely developed using GNU tools, under various Linux systems.\nThe library may be recompiled by the familiar \"three step\":\n\n        ./configure\n        make\n        sudo make install\n\nFor debugging use this configure\n        ./configure CFLAGS=-g -O0 -fPIC --no-create --no-recursio\n\nSee the INSTALL file for more information.\n\nContributing\n------------\n\nConsult the README.betatester and README.developer files in this directory\nif you feel like testing or helping with Hamlib development.\n\nContributions of rig specifications and protocol documentation are highly\nencouraged.  Do keep in mind that in some cases the manufacturer may not\nprovide complete control information or it is only available under a\nNon-Disclosure Agreement (NDA).  Any documentation *must* be publicly\navailable so we can legally write and distribute Free Software supporting a\ngiven device.\n\nThe Hamlib team is very interested to hear from you, how Hamlib builds and\nworks on your system, especially on non-Linux system or non-PC systems. We\ntry to make Hamlib as portable as possible.\n\nPlease report in case of problems at hamlib-developer@lists.sourceforge.net\nGit email formatted patches or in unified diff format are welcome!\n\nAlso, take a look at http://sourceforge.net/projects/hamlib/ Here you will\nfind a mail list, link to the Wiki, and the latest releases.  Feedback,\nquestions, etc. about Hamlib are very welcome at the mail list:\n\n        <hamlib-developer@lists.sourceforge.net>\n\nHamlib Version Numbers\n----------------------\n\nLike other software projects, Hamlib uses a version numbering scheme to help\nprogram authors and users understand which releases are compatible and which\nare not.  Hamlib releases now follow the format of:\n\nMajor.minor.incremental\n\nWhere\n\nMajor:  Currently at 4, but can be advanced when changes to the API require\nclient programs to be rewritten to take advantage of new features of\nHamlib.  This number has advanced a couple of times throughout the life of\nHamlib.  Advancement of the major number is only for frontend API changes\nthat require modification of client source.  ABI compatibility is presently\nmaintained to prior releases so that a program linked to an earlier\n1.2.Y.[Z] release will work with a later 3.Y[.Z] release without\nrecompiling. It is our intention to maintain such ABI compatibility as long\nas practical.\n\nMinor:  This number advances when either new backend(s) or new rig\nmodel(s) to existing backend(s) are added.  Advancing this number informs\nclient program authors (and users of those programs) that new model/backend\nsupport has been added.  Will also include bug fixes since the last\nIncremental release.\n\nIncremental:    May be undefined (e.g. Hamlib 3.0) and would advance to 1\n(e.g. Hamlib 3.0.1) for any bug fixes or feature additions to existing\nmodel(s) or backend(s), then to 2, etc.  New rig models or backends are not\nincluded in Incremental.  When Release is advanced, Incremental will reset\nto undefined and will not be included as part of the version number.\n\nRelease schedule\n----------------\n\nHamlib has in the past maintained a \"ready when it's ready\" philosophy.\nHowever, given that much of the Linux user base is now influenced by the\nUbuntu distribution and its timed six month release schedule, Hamlib\nreleases will be scheduled in advance of Ubuntu releases.  Planned release\ndates for Hamlib are now 1 February and 1 August of each calendar year.\nBetween those dates various Incremental releases will occur as development\nwarrants.\n\n\nHave Fun / Frank S / Stephane F / The Hamlib Group\n\n  73's de vk3fcs/km5ws / f8cfe\n\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/README.w64-bin.txt",
    "content": "What is it?\n===========\n\nThis ZIP archive or Windows installer contains a build of Hamlib-4.5~git\ncross-compiled for MS Windows 64 bit using MinGW under Debian GNU/Linux 10\n(nice, heh!).\n\nThis software is copyrighted. The library license is LGPL, and the *.EXE files\nlicenses are GPL.  Hamlib comes WITHOUT ANY WARRANTY. See the LICENSE.txt,\nCOPYING.txt, and COPYING.LIB.txt files.\n\nSupporting documentation in the form of Unix manual pages have also been\nincluded after being converted to HTML.\n\n\nInstallation and Configuration\n==============================\n\nExtract the ZIP archive into a convenient location, C:\\Program Files is a\nreasonable choice.\n\nMake sure *all* the .DLL files are in your PATH (leave them in the bin\ndirectory and set the PATH).  To set the PATH environment variable in Windows\n2000, Windows XP, and Windows 7 (need info on Vista and Windows 8/10) do the\nfollowing:\n\n * W2k/XP: Right-click on \"My Computer\"\n   Win7: Right-click on \"Computer\"\n\n * W2k/XP: Click the \"Advanced\" tab of the \"System Properties\" dialog\n   Win7: Click the \"Advanced system settings\" link in the System dialog\n\n * Click the \"Environment Variables\" button of the pop-up dialog\n\n * Select \"Path\" in the \"System variables\" box of the \"Environment Variables\"\n   dialog\n\n   NB: If you are not the administrator, system policy may not allow editing\n   the path variable.  The complete path to an executable file will need to be\n   given to run one of the Hamlib programs.\n\n * Click the Edit button\n\n * Now add the Hamlib path in the \"Variable Value:\" edit box.  Be sure to put\n   a semi-colon ';' after the last path before adding the Hamlib path (NB. The\n   entire path is highlighted and will be erased upon typing a character so\n   click in the box to unselect the text first.  The PATH is important!!)\n   Append the Hamlib path, e.g. C:\\Program Files\\hamlib-w64-4.0~git\\bin\n\n * Click OK for all three dialog boxes to save your changes.\n\n\nTesting with the Hamlib Utilities\n=================================\n\nTo continue, be sure you have read the README.betatester file, especially the\n\"Testing Hamlib\" section.  The primary means of testing is by way of the\nrigctl utility for radios and rotctl utility for rotators.  Each is a command\nline program that is interactive or can act on a single command and exit.\n\nDocumentation for each utility can be found as an HTML file in the doc\ndirectory.\n\nIn short, the command syntax is of the form:\n\n  rigctl -m 1020 -r COM1 -vvvvv\n\n  -m -> Radio model 1020, or Yaesu FT-817 (use 'rigctl -l' for a list)\n  -r -> Radio device, in this case COM1\n  -v -> Verbosity level.  For testing four or five v characters are required.\n        Five 'v's set a debug level of TRACE which generates a lot of screen\n        output showing communication to the radio and values of important\n        variables.  These traces are vital information for Hamlib rig backend\n        development.\n\nTo run rigctl or rotctl open a cmd window (Start|Run|enter 'cmd' in the\ndialog).  If text scrolls off the screen, you can scroll back with the mouse.\nTo copy output text into a mailer or editor (I recommend Notepad++, a free\neditor also licensed under the GPL), highlight the text as a rectangle in the\ncmd window, press <Enter> (or right-click the window icon in the upper left\ncorner and select Edit, then Copy), and paste it into your editor with Ctl-V\n(or Edit|Paste from the typical GUI menu).\n\nAll feedback is welcome to the mail address below.\n\n\nUninstall\n=========\n\nTo uninstall, simply delete the Hamlib directory.  You may wish to edit the\nPATH as above to remove the Hamlib bin path, if desired.\n\n\nInformation for w64 Programmers\n=================================\n\nThe DLL has a cdecl interface.\n\nThere is a libhamlib-4.def definition file for MS Visual C++/Visual Studio in\nlib/msvc.  Refer to the sample commands below to generate a local\nlibhamlib-4.lib file for use with the VC++/VS linker.\n\nSimply #include <hamlib/rig.h> (add directory to include path), include\nlibhamlib-4.lib in your project and you are done.  Note: VC++/VS cannot\ncompile all the Hamlib code, but the API defined by rig.h has been made MSVC\nfriendly :-)\n\nAs the source code for the library DLLs is licensed under the LGPL, your\nprogram is not considered a \"derivative work\" when using the published Hamlib\nAPI and normal linking to the front-end library, and may be of a license of\nyour choosing.\n\nFor linking the library with MS Visual C++ 2003, from the directory you\ninstalled Hamlib run the following commands to generate the libhamlib-4.lib\nfile needed for linking with your MSVC project:\n\ncd lib\\msvc\nc:\\Program Files\\Microsoft Visual C++ Toolkit 2003\\bin\\link.exe /lib /machine:amd64 /def:libhamlib-4.def\n\nTo do the same for Visual Studio 2017:\n\ncd lib\\msvc\nc:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Tools\\MSVC\\14.16.27023\\bin\\Hostx64\\x86\\bin\\link.exe /lib /machine:i386 /def:libhamlib-4.def\n\nand for VS 2019:\n\ncd lib\\msvc\nc:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.25.28610\\bin\\Hostx64\\x86\\bin\\link.exe /lib /machine:i386 /def:libhamlib-4.def\n\nNOTE: feedback is requested on the previous two command examples as these do\nnot appear to be correct to generate a 64 bit libhamlib-4.lib file!\n\nThe published Hamlib API may be found at:\n\nhttp://hamlib.sourceforge.net/manuals/4.1/index.html\n\n\nThank You!\n==========\n\nPatches, feedback, and contributions are welcome.\n\nPlease report problems or success to hamlib-developer@lists.sourceforge.net\n\nCheers,\nStephane Fillod - F8CFE\nNate Bargmann - N0NB\nhttp://www.hamlib.org\n\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/THANKS.txt",
    "content": "\nThis file lists people who contributed indirectly to Hamlib, by generously\nmaking information available. Be they thanked for their openness.\n\n\nWiNRADiO backend\n----------------\n\n* Harish Pillay 9v1hp and Pascal Brisset and their excellent LiNRADiO project.\n  URL: http://linradio.sourceforge.net/\n\nIcom CI-V backend\n-----------------\n\n* Ekki Plicht DF4OR <ekki@plicht.de> and his excellent web site on\n\tthe CI-V interface.\n\tURL: http://www.plicht.de/ekki/civ/\n\n* Karl Kramer DG8FZ <Karl_Kramer@bigfoot.com> for his V24/CI-V cable\n\tand his CSMA/CD explanation of the bus.\n\tURL: http://KarlKramer.de/ ... x71ci_v.htm\n\n* Simon Collings, RS-232 Interfacing for Receiver Control\n    URL: http://www.scnt01426.pwp.blueyonder.co.uk/Articles/RS-232/RS-232.htm\n\n* Kai Altenfelder <ka@suse.de> for supporting us and providing documentation\n\nIcom PCR backend\n----------------\n\n* Ghetto's team, PCR-1000 ICOM receiver\n\tURL: http://www.philtered.net/icomlib.phtml\n\nOther Assistance\n----------------\n\n* Special thanks to Ed Hare, W1RFI, and the American Radio Relay League for technical support.\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/doc/ampctl.1.html",
    "content": "<!-- Creator     : groff version 1.22.4 -->\n<!-- CreationDate: Wed May 18 09:31:51 2022 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<meta name=\"Content-Style\" content=\"text/css\">\n<style type=\"text/css\">\n       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       h1      { text-align: center }\n</style>\n<title>AMPCTL</title>\n\n</head>\n<body>\n\n<h1 align=\"center\">AMPCTL</h1>\n\n<a href=\"#NAME\">NAME</a><br>\n<a href=\"#SYNOPSIS\">SYNOPSIS</a><br>\n<a href=\"#DESCRIPTION\">DESCRIPTION</a><br>\n<a href=\"#OPTIONS\">OPTIONS</a><br>\n<a href=\"#COMMANDS\">COMMANDS</a><br>\n<a href=\"#READLINE\">READLINE</a><br>\n<a href=\"#DIAGNOSTICS\">DIAGNOSTICS</a><br>\n<a href=\"#EXIT STATUS\">EXIT STATUS</a><br>\n<a href=\"#EXAMPLES\">EXAMPLES</a><br>\n<a href=\"#BUGS\">BUGS</a><br>\n<a href=\"#COPYING\">COPYING</a><br>\n<a href=\"#SEE ALSO\">SEE ALSO</a><br>\n<a href=\"#COLOPHON\">COLOPHON</a><br>\n\n<hr>\n\n\n<h2>NAME\n<a name=\"NAME\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">ampctl -\ncontrol radio amplifiers</p>\n\n<h2>SYNOPSIS\n<a name=\"SYNOPSIS\"></a>\n</h2>\n\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"9%\">\n\n\n<p style=\"margin-top: 1em\"><b>ampctl</b></p></td>\n<td width=\"2%\"></td>\n<td width=\"78%\">\n\n\n<p style=\"margin-top: 1em\">[<b>-hiIlLuV</b>]\n[<b>-m&nbsp;</b><i>id</i>] [<b>-r&nbsp;</b><i>device</i>]\n[<b>-s&nbsp;</b><i>baud</i>] [<b>-t&nbsp;</b><i>char</i>]\n[<b>-C&nbsp;</b><i>parm=val</i>] [<b>-v</b>[<b>-Z</b>]]\n[<b>command</b>|<b>-</b>]</p> </td></tr>\n</table>\n\n<h2>DESCRIPTION\n<a name=\"DESCRIPTION\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Control radio\namplifiers. <b>ampctl</b> accepts <b>commands</b> from the\ncommand line as well as in interactive mode if none are\nprovided on the command line.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Keep in mind\nthat Hamlib is BETA level software. While a lot of backend\nlibraries lack complete amplifier support, the basic\nfunctions are usually well supported.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please report\nbugs and provide feedback at the e-mail address given in the\n<b>BUGS</b> section below. Patches and code enhancements\nsent to the same address are welcome.</p>\n\n<h2>OPTIONS\n<a name=\"OPTIONS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This program\nfollows the usual GNU command line syntax. Short options\nthat take an argument may have the value follow immediately\nor be separated by a space. Long options starting with two\ndashes (&rsquo;-&rsquo;) require an &rsquo;=&rsquo; between\nthe option and any argument.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported options: <b><br>\n-m</b>, <b>--model</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Select amplifier model\nnumber.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See model list\n(use &ldquo;ampctl -l&rdquo;).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\n<b>ampctl</b> (or third party software using the C API) will\nuse amplifier model 2 for <b>NET ampctl</b> (communicating\nwith <b>ampctld</b>).</p>\n\n<p style=\"margin-left:11%;\"><b>-r</b>,\n<b>--amp-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the port connected to the amplifier.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Often a serial\nport, but could be a USB to serial adapter. Typically\n<i>/dev/ttyS0</i>, <i>/dev/ttyS1</i>, <i>/dev/ttyUSB0</i>,\netc. on Linux, <i>COM1</i>, <i>COM2</i>, etc. on MS Windows.\nThe BSD flavors and Mac OS/X have their own designations.\nSee your system&rsquo;s documentation.</p>\n\n<p style=\"margin-left:11%;\"><b>-s</b>,\n<b>--serial-speed</b>=<i>baud</i></p>\n\n<p style=\"margin-left:22%;\">Set serial speed to <i>baud</i>\nrate.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Uses maximum\nserial speed from amplifier backend capabilities (set by\n<b>-m</b> above) as the default.</p>\n\n<p style=\"margin-left:11%;\"><b>-t</b>,\n<b>--send-cmd-term</b>=<i>char</i></p>\n\n<p style=\"margin-left:22%;\">Change the termination\n<i>char</i> for text protocol when using the <b>send_cmd</b>\ncommand.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The default\nvalue is ASCII CR (&rsquo;0x0D&rsquo;). ASCII non-printing\ncharacters can be given as the ASCII number in hexadecimal\nformat prepended with &ldquo;0x&rdquo;. You may pass an\nempty string for no termination char. The string\n&ldquo;-1&rdquo; tells <b>ampctl</b> to switch to binary\nprotocol.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">For example, to\nspecify a command terminator for Kenwood style text commands\npass &ldquo;-t &rsquo;;&rsquo;&rdquo; to ampctl. See\n<b>EXAMPLE</b> below.</p>\n\n<p style=\"margin-left:11%;\"><b>-L</b>,\n<b>--show-conf</b></p>\n\n<p style=\"margin-left:22%;\">List all config parameters for\nthe amplifier defined with <b>-m</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>-C</b>,\n<b>--set-conf</b>=<i>parm=val</i>[<i>,parm=val</i>]</p>\n\n<p style=\"margin-left:22%;\">Set amplifier configuration\nparameter(s), e.g. <i>stop_bits=2</i>.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use the\n<b>-L</b> option above for a list of configuration\nparameters for a given model number.</p>\n\n<p style=\"margin-left:11%;\"><b>-u</b>,\n<b>--dump-caps</b></p>\n\n<p style=\"margin-left:22%;\">Dump capabilities for the\namplifier defined with <b>-m</b> above and exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-l</b>, <b>--list</b></p>\n\n<p style=\"margin-left:22%;\">List all amplifier model\nnumbers defined in <b>Hamlib</b> and exit.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The list is\nsorted by model number.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: In\nLinux the list can be scrolled back using\n<b>Shift-PageUp</b>/<b>Shift-PageDown</b>, or using the\nscrollbars of a virtual terminal in X or the cmd window in\nWindows. The output can be piped to <b>more</b>(1) or\n<b>less</b>(1), e.g. &ldquo;ampctl -l | more&rdquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>-i</b>,\n<b>--read-history</b></p>\n\n<p style=\"margin-left:22%;\">Read previously saved command\nand argument history from a file (default\n<i>$HOME/.ampctl_history</i>) for the current session.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Available when\n<b>ampctl</b> is built with Readline support (see READLINE\nbelow).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: To\nread a history file stored in another directory, set the\n<b>AMPCTL_HIST_DIR</b> environment variable, e.g.\n&ldquo;AMPCTL_HIST_DIR=~/tmp ampctl -i&rdquo;. When\nAMPCTL_HIST_DIR is not set, the value of <b>HOME</b> is\nused.</p>\n\n<p style=\"margin-left:11%;\"><b>-I</b>,\n<b>--save-history</b></p>\n\n<p style=\"margin-left:22%;\">Write current session (and\nprevious session(s), if <b>-i</b> option is given) command\nand argument history to a file (default\n<i>$HOME/.ampctl_history</i>) at the end of the current\nsession.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Complete\ncommands with arguments are saved as a single line to be\nrecalled and used or edited. Available when <b>ampctl</b> is\nbuilt with Readline support (see <b>READLINE</b> below).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: To\nwrite a history file in another directory, set the\n<b>AMPCTL_HIST_DIR</b> environment variable, e.g.\n&ldquo;AMPCTL_HIST_DIR=~/tmp ampctl -IRq. When\nAMPCTL_HIST_DIR is not set, the value of <b>HOME</b> is\nused.</p>\n\n<p style=\"margin-left:11%;\"><b>-v</b>, <b>--verbose</b></p>\n\n<p style=\"margin-left:22%;\">Set verbose mode, cumulative\n(see <b>DIAGNOSTICS</b> below).</p>\n\n<p style=\"margin-left:11%;\"><b>-Z</b>,\n<b>--debug-time-stamps</b></p>\n\n<p style=\"margin-left:22%;\">Enable time stamps for the\ndebug messages.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use only in\ncombination with the <b>-v</b> option as it generates no\noutput on its own.</p>\n\n<p style=\"margin-left:11%;\"><b>-h</b>, <b>--help</b></p>\n\n<p style=\"margin-left:22%;\">Show a summary of these options\nand exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-V</b>, <b>--version</b></p>\n\n<p style=\"margin-left:22%;\">Show version of <b>ampctl</b>\nand exit.</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>-</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>Stop option processing and read commands from standard\ninput.</p> </td></tr>\n</table>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See <b>Standard\nInput</b> below.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nSome options may not be implemented by a given backend and\nwill return an error. This is most likely to occur with the\n<b>--set-conf</b> and <b>--show-conf</b> options.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please note\nthat the backend for the amplifier to be controlled, or the\namplifier itself may not support some commands. In that\ncase, the operation will fail with a <b>Hamlib</b> error\ncode.</p>\n\n<h2>COMMANDS\n<a name=\"COMMANDS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Commands can be\nentered either as a single char, or as a long command name.\nThe commands are not prefixed with a dash as the options\nare. They may be typed in when in interactive mode or\nprovided as argument(s) in command line interface mode. In\ninteractive mode commands and their arguments may be entered\non a single line:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>F\n14250000</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Since most of\nthe <b>Hamlib</b> operations have a <b>set</b> and a\n<b>get</b> method, an upper case letter will often be used\nfor a <b>set</b> method whereas the corresponding lower case\nletter refers to the <b>get</b> method. Each operation also\nhas a long name; in interactive mode, prepend a backslash,\n&rsquo;\\&rsquo;, to enter a long command name.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Example: Use\n&ldquo;\\dump_caps&rdquo; to see what capabilities this\namplifier and backend support.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe backend for the amplifier to be controlled, or the\namplifier itself may not support some commands. In that\ncase, the operation will fail with a <b>Hamlib</b> error\nmessage.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A simple\nexample using commands saved to a file (typed text shown in\nbold):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>cat\n&lt;&lt;.EOF. &gt;cmds.txt</b> <br>\n&gt; <b># File of commands</b> <br>\n&gt; <b>F 14250000</b> <br>\n&gt; <b>f</b> <br>\n&gt; <b>l PWRINPUT</b> <br>\n&gt; <b>l PWRFORWARD</b> <br>\n&gt; <b>l SWR</b> <br>\n&gt; <b>\\dump_caps</b> <br>\n&gt; <b>.EOF.</b></p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>ampctl -m1\n- &lt;cmds.txt</b></p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Amplifier\ncommand: # File of commands</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Amplifier\ncommand: F 14250000</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Amplifier\ncommand: f <br>\nFrequency(Hz): 14250000</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Amplifier\ncommand: l PWRINPUT <br>\nLevel Value: 0</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Amplifier\ncommand: l PWRFORWARD <br>\nLevel Value: 1499</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Amplifier\ncommand: l SWR <br>\nLevel Value: 1.000000</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Amplifier\ncommand: \\dump_caps <br>\nCaps dump for model: 1 <br>\nModel name: Dummy <br>\nMfg name: Hamlib <br>\nBackend version: 0.1 <br>\nBackend copyright: LGPL <br>\nBackend status: Alpha <br>\nAmp type: Other <br>\nPort type: None <br>\nWrite delay: 0mS, timeout 0mS, 0 retries <br>\nPost Write delay: 0mS <br>\nHas priv data: N <br>\nGet level: SWR NH PF PWRINPUT PWRFORWARD PWRREFLECTED\nPWRPEAK FAULT <br>\nHas Init: Y <br>\nHas Cleanup: Y <br>\nHas Open: Y <br>\nHas Close: Y <br>\nCan set Conf: N <br>\nCan get Conf: N <br>\nCan Reset: Y <br>\nCan get Info: Y</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Overall backend\nwarnings: 0</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Amplifier\ncommand:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>ampctl\nCommands</b> <br>\nA summary of commands is included below (In the case of\n<b>set</b> commands the quoted italicized string is replaced\nby the value in the description. In the case of <b>get</b>\ncommands the quoted italicized string is the key name of the\nvalue returned.): <b><br>\nQ</b>|<b>q</b>, exit ampctl</p>\n\n<p style=\"margin-left:22%;\">Exit ampctl in interactive\nmode.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">When ampctl is\ncontrolling the amplifier directly, will close the amplifier\nbackend and port. When ampctl is connected to ampctld\n(amplifier model 2), the TCP/IP connection to ampctld is\nclosed and ampctld remains running, available for another\nTCP/IP network connection.</p>\n\n<p style=\"margin-left:11%;\"><b>F</b>, <b>set_freq</b>\n'<i>Frequency</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Frequency</i>', in\nHz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Frequency may\nbe a floating point or integer value.</p>\n\n<p style=\"margin-left:11%;\"><b>f</b>, <b>get_freq</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Frequency</i>', in\nHz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns an\ninteger value.</p>\n\n<p style=\"margin-left:11%;\"><b>l</b>, <b>get_level</b>\n'<i>Level</i>'</p>\n\n<p style=\"margin-left:22%;\">Get '<i>Level Value</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns Level\nValue as a float or integer for the Level token given.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Level token will return a space separated list\nof amplifier backend supported get level tokens. Use this to\ndetermine the supported levels of a given amplifier\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>w</b>, <b>send_cmd</b>\n'<i>Cmd</i>'</p>\n\n<p style=\"margin-left:22%;\">Send a raw command string to\nthe amplifier.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">This is useful\nfor testing and troubleshooting amplifier commands and\nresponses when developing a backend.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">For binary\nprotocols enter values as \\0xAA\\0xBB. Expect a\n'<i>Reply</i>' from the amplifier which will likely be a\nbinary block or an ASCII string depending on the\namplifier&rsquo;s protocol (see your amplifier&rsquo;s\ncomputer control documentation).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The command\nterminator, set by the <b>send-cmd-term</b> option above,\nwill terminate each command string sent to the amplifier.\nThis character should not be a part of the input string.</p>\n\n<p style=\"margin-left:11%;\"><b>dump_state</b></p>\n\n<p style=\"margin-left:22%;\">Return certain state\ninformation about the amplifier backend.</p>\n\n<p style=\"margin-left:11%;\"><b>1</b>, <b>dump_caps</b></p>\n\n<p style=\"margin-left:22%;\">Not a real amplifier remote\ncommand, it just dumps capabilities, i.e. what the backend\nknows about this model, and what it can do.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">TODO: Ensure\nthis is in a consistent format so it can be read into a\nhash, dictionary, etc. Bug reports requested.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThis command will produce many lines of output so be very\ncareful if using a fixed length array! For example, running\nthis command against the Dummy backend results in a number\nof lines of text output.</p>\n\n<p style=\"margin-left:11%;\"><b>_</b>, <b>get_info</b></p>\n\n<p style=\"margin-left:22%;\">Return information from the\namplifier backend.</p>\n\n<p style=\"margin-left:11%;\"><b>R</b>, <b>reset</b>\n'<i>Reset</i>'</p>\n\n<p style=\"margin-left:22%;\">Perform amplifier\n'<i>Reset</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Reset is an\ninteger value: &rsquo;0&rsquo; = None, &rsquo;1&rsquo; =\nMemory reset, &rsquo;2&rsquo; = Fault reset, &rsquo;3&rsquo;\n= Amplifier reset.</p>\n\n<p style=\"margin-left:11%;\"><b>set_powerstat</b> '<i>Power\nStatus</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Power Status</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Power Status is\nan integer value: &rsquo;0&rsquo; = Power Off,\n&rsquo;1&rsquo; = Power On, &rsquo;2&rsquo; = Power Standby\n(enter standby), &rsquo;4&rsquo; = Power Operate (leave\nstandby).</p>\n\n<p style=\"margin-left:11%;\"><b>get_powerstat</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Power Status</i>' as in\n<b>set_powerstat</b> above.</p>\n\n<h2>READLINE\n<a name=\"READLINE\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">If\n<b>Readline</b> library development files are found at\nconfigure time, <b>ampctl</b> will be conditonally built\nwith Readline support for command and argument entry.\nReadline command key bindings are at their defaults as\ndescribed in the\n<a href=\"https://tiswww.cwru.edu/php/chet/readline/rluserman.html\">Readline\nmanual</a>. <b>ampctl</b> sets the name &ldquo;ampctl&rdquo;\nwhich can be used in Conditional Init Constructs in the\nReadline Init File (<i>$HOME/.inputrc</i> by default) for\ncustom keybindings unique to <b>ampctl</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Command history\nis available with Readline support as described in the\n<a href=\"https://tiswww.case.edu/php/chet/readline/history.html#SEC1\">Readline\nHistory manual</a>. Command and argument strings are stored\nas single lines even when arguments are prompted for input\nindividually. Commands and arguments are not validated and\nare stored as typed with values separated by a single\nspace.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Normally\nsession history is not saved, however, use of either of the\n<b>-i</b>/<b>--read-history</b> or\n<b>-I</b>/<b>--save-history</b> options when starting\n<b>ampctl</b> will cause any previously saved history to be\nread in and/or the current and any previous session history\n(assuming the <b>-i</b> and <b>-I</b> options are given\ntogether) will be written out when <b>ampctl</b> is closed.\nEach option is mutually exclusive, i.e. either may be given\nseparately or in combination. This is useful to save a set\nof commands and then read them later but not write the\nmodified history for a consistent set of test commands in\ninteractive mode, for example.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">History is\nstored in <i>$HOME/.ampctl_history</i> by default although\nthe destination directory may be changed by setting the\n<b>AMPCTL_HIST_DIR</b> environment variable. When\nAMPCTL_HIST_DIR is unset, the value of the <b>HOME</b>\nenvironment variable is used instead. Only the destination\ndirectory may be changed at this time.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">If Readline\nsupport is not found at configure time the original internal\ncommand handler is used. Readline is not used for\n<b>ampctl</b> commands entered on the command line\nregardless if Readline support is built in or not.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nReadline support is not included in the MS Windows 32 or 64\nbit binary builds supplied by the Hamlib Project. Running\n<b>ampctl</b> on the MS Windows platform in the\n&rsquo;cmd&rsquo; shell does give session command line\nhistory, however, it is not saved to disk between\nsessions.</p>\n\n<h2>DIAGNOSTICS\n<a name=\"DIAGNOSTICS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>-v</b>,\n<b>--verbose</b> option allows different levels of\ndiagnostics to be output to <b>stderr</b> and correspond to\n-v for <b>BUG</b>, -vv for <b>ERR</b>, -vvv for <b>WARN</b>,\n-vvvv for <b>VERBOSE</b>, or -vvvvv for <b>TRACE</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A given verbose\nlevel is useful for providing needed debugging information\nto the email address below. For example, TRACE output shows\nall of the values sent to and received from the amplifier\nwhich is very useful for amplifier backend library\ndevelopment and may be requested by the developers.</p>\n\n<h2>EXIT STATUS\n<a name=\"EXIT STATUS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>ampctl</b>\nexits with:</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>0</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if all operations completed normally;</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>1</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if there was an invalid command line option or\nargument;</p> </td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>2</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if an error was returned by <b>Hamlib</b>.</p></td></tr>\n</table>\n\n<h2>EXAMPLES\n<a name=\"EXAMPLES\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>ampctl</b> for am Elecraft KPA-1500 using a USB to serial\nadapter on Linux in interactive mode:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>ampctl -m\n201 -r /dev/ttyUSB1</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>ampctl</b> for an Elecraft KPA-1500 using COM1 on MS\nWindows while generating TRACE output to <i>stderr</i>:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">&gt; <b>ampctl\n-m 201 -r COM1 -vvvvv</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Connect to a\nrunning <b>ampctld</b> with amplifier model 2 (&ldquo;NET\nampctl&rdquo;) on the local host and specifying the TCP\nport, setting frequency and mode:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>ampctl -m\n2 -r localhost:4531 F 7253500</b></p>\n\n<h2>BUGS\n<a name=\"BUGS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This almost\nempty section...</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Report bugs\nto:</p>\n\n\n<p style=\"margin-left:22%;\"><a href=\"mailto:hamlib-developer@lists.sourceforge.net\">Hamlib\nDeveloper mailing list </a></p>\n\n<h2>COPYING\n<a name=\"COPYING\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This file is\npart of Hamlib, a project to develop a library that\nsimplifies radio, rotator, and amplifier control functions\nfor developers of software primarily of interest to radio\namateurs and those interested in radio communications.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Copyright\n&copy; 2000-2011 Stephane Fillod <br>\nCopyright &copy; 2000-2018 the Hamlib Group (various\ncontributors) <br>\nCopyright &copy; 2010-2020 Nate Bargmann</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This is free\nsoftware; see the file COPYING for copying conditions. There\nis NO warranty; not even for MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.</p>\n\n<h2>SEE ALSO\n<a name=\"SEE ALSO\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>less</b>(1),\n<b>more</b>(1), <b>ampctld</b>(1), <b>hamlib</b>(7)</p>\n\n<h2>COLOPHON\n<a name=\"COLOPHON\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Links to the\nHamlib Wiki, Git repository, release archives, and daily\nsnapshot archives are available via\n<a href=\"http://www.hamlib.org\">hamlib.org</a>.</p>\n<hr>\n</body>\n</html>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/doc/ampctld.1.html",
    "content": "<!-- Creator     : groff version 1.22.4 -->\n<!-- CreationDate: Wed May 18 09:31:52 2022 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<meta name=\"Content-Style\" content=\"text/css\">\n<style type=\"text/css\">\n       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       h1      { text-align: center }\n</style>\n<title>AMPCTLD</title>\n\n</head>\n<body>\n\n<h1 align=\"center\">AMPCTLD</h1>\n\n<a href=\"#NAME\">NAME</a><br>\n<a href=\"#SYNOPSIS\">SYNOPSIS</a><br>\n<a href=\"#DESCRIPTION\">DESCRIPTION</a><br>\n<a href=\"#OPTIONS\">OPTIONS</a><br>\n<a href=\"#COMMANDS\">COMMANDS</a><br>\n<a href=\"#PROTOCOL\">PROTOCOL</a><br>\n<a href=\"#DIAGNOSTICS\">DIAGNOSTICS</a><br>\n<a href=\"#EXAMPLES\">EXAMPLES</a><br>\n<a href=\"#SECURITY\">SECURITY</a><br>\n<a href=\"#BUGS\">BUGS</a><br>\n<a href=\"#COPYING\">COPYING</a><br>\n<a href=\"#SEE ALSO\">SEE ALSO</a><br>\n<a href=\"#COLOPHON\">COLOPHON</a><br>\n\n<hr>\n\n\n<h2>NAME\n<a name=\"NAME\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">ampctld - TCP\namplifier control daemon</p>\n\n<h2>SYNOPSIS\n<a name=\"SYNOPSIS\"></a>\n</h2>\n\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"11%\">\n\n\n<p style=\"margin-top: 1em\"><b>ampctld</b></p></td>\n<td width=\"1%\"></td>\n<td width=\"77%\">\n\n\n<p style=\"margin-top: 1em\">[<b>-hlLuV</b>]\n[<b>-m&nbsp;</b><i>id</i>] [<b>-r&nbsp;</b><i>device</i>]\n[<b>-s&nbsp;</b><i>baud</i>] [<b>-T&nbsp;</b><i>IPADDR</i>]\n[<b>-t&nbsp;</b><i>number</i>]\n[<b>-C&nbsp;</b><i>parm=val</i>] [<b>-v</b>[<b>-Z</b>]]</p></td></tr>\n</table>\n\n<h2>DESCRIPTION\n<a name=\"DESCRIPTION\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The\n<b>ampctld</b> program is an amplifier control daemon that\nhandles client requests via TCP sockets. This allows\nmultiple user programs to share one amplifier (this needs\nmore development). Multiple amplifiers can be controlled on\ndifferent TCP ports by use of multiple <b>ampctld</b>\nprocesses. Note that multiple processes/ports are also\nnecessary if some clients use extended responses and/or vfo\nmode. So up to 4 processes/ports may be needed for each\ncombination of extended response/vfo mode. The syntax of the\ncommands are the same as <b>ampctl</b>(1). It is hoped that\n<b>ampctld</b> will be especially useful for client authors\nusing languages such as Perl, Python, PHP, and others.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>ampctld</b>\ncommunicates to a client through a TCP socket using text\ncommands shared with <b>ampctl</b>. The protocol is simple,\ncommands are sent to <b>ampctld</b> on one line and\n<b>ampctld</b> responds to <b>get</b> commands with the\nrequested values, one per line, when successful, otherwise,\nit responds with one line &ldquo;RPRT x&rdquo;, where\n&rsquo;x&rsquo; is a negative number indicating the error\ncode. Commands that do not return values respond with the\nline &ldquo;RPRT x&rdquo;, where &rsquo;x&rsquo; is\n&rsquo;0&rsquo; when successful, otherwise is a regative\nnumber indicating the error code. Each line is terminated\nwith a newline &rsquo;\\n&rsquo; character. This protocol is\nprimarily for use by the <b>NET ampctl</b> (amplifier model\n2) backend.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A separate\n<b>Extended Response Protocol</b> extends the above behavior\nby echoing the received command string as a header, any\nreturned values as a key: value pair, and the &ldquo;RPRT\nx&rdquo; string as the end of response marker which includes\nthe <b>Hamlib</b> success or failure value. See the\n<b>PROTOCOL</b> section for details. Consider using this\nprotocol for clients that will interact with <b>ampctld</b>\ndirectly through a TCP socket.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Keep in mind\nthat Hamlib is BETA level software. While a lot of backend\nlibraries lack complete amplifier support, the basic\nfunctions are usually well supported.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please report\nbugs and provide feedback at the e-mail address given in the\n<b>BUGS</b> section below. Patches and code enhancements\nsent to the same address are welcome.</p>\n\n<h2>OPTIONS\n<a name=\"OPTIONS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This program\nfollows the usual GNU command line syntax. Short options\nthat take an argument may have the value follow immediately\nor be separated by a space. Long options starting with two\ndashes (&rsquo;-&rsquo;) require an &rsquo;=&rsquo; between\nthe option and any argument.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported options: <b><br>\n-m</b>, <b>--model</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Select amplifier model\nnumber.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See model list\n(use &ldquo;ampctl -l&rdquo;).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\n<b>ampctl</b> (or third party software using the C API) will\nuse amplifier model 2 for <b>NET ampctl</b> (communicating\nwith <b>ampctld</b>).</p>\n\n<p style=\"margin-left:11%;\"><b>-r</b>,\n<b>--amp-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the port connected to the amplifier.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Often a serial\nport, but could be a USB to serial adapter. Typically\n<i>/dev/ttyS0</i>, <i>/dev/ttyS1</i>, <i>/dev/ttyUSB0</i>,\netc. on Linux, <i>COM1</i>, <i>COM2</i>, etc. on MS Windows.\nThe BSD flavors and Mac OS/X have their own designations.\nSee your system&rsquo;s documentation.</p>\n\n<p style=\"margin-left:11%;\"><b>-s</b>,\n<b>--serial-speed</b>=<i>baud</i></p>\n\n<p style=\"margin-left:22%;\">Set serial speed to <i>baud</i>\nrate.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Uses maximum\nserial speed from amplifier backend capabilities (set by\n<b>-m</b> above) as the default.</p>\n\n<p style=\"margin-left:11%;\"><b>-t</b>,\n<b>--port</b>=<i>number</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>number</i> as the TCP\nlistening port.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The default is\n4531.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: As\n<b>rigctld</b>&rsquo;s default port is 4532 and\n<b>rotctld</b>&rsquo;s default port is 4533, it is\nrecommended to use DESCENDING odd numbered ports for\nmultiple <b>ampctld</b> instances, e.g. 4529, 4527, 4525,\netc.</p>\n\n<p style=\"margin-left:11%;\"><b>-T</b>,\n<b>--listen-addr</b>=<i>IPADDR</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>IPADDR</i> as the\nlistening IP address.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The default is\nANY.</p>\n\n<p style=\"margin-left:11%;\"><b>-L</b>,\n<b>--show-conf</b></p>\n\n<p style=\"margin-left:22%;\">List all config parameters for\nthe amplifier defined with <b>-m</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>-C</b>,\n<b>--set-conf</b>=<i>parm=val</i>[<i>,parm=val</i>]</p>\n\n<p style=\"margin-left:22%;\">Set amplifier configuration\nparameter(s), e.g. <i>stop_bits=2</i>.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use the\n<b>-L</b> option above for a list of configuration\nparameters for a given model number.</p>\n\n<p style=\"margin-left:11%;\"><b>-u</b>,\n<b>--dump-caps</b></p>\n\n<p style=\"margin-left:22%;\">Dump capabilities for the\namplifier defined with <b>-m</b> above and exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-l</b>, <b>--list</b></p>\n\n<p style=\"margin-left:22%;\">List all amplifier model\nnumbers defined in <b>Hamlib</b> and exit.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The list is\nsorted by model number.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: In\nLinux the list can be scrolled back using\n<b>Shift-PageUp</b>/<b>Shift-PageDown</b>, or using the\nscrollbars of a virtual terminal in X or the cmd window in\nWindows. The output can be piped to <b>more</b>(1) or\n<b>less</b>(1), e.g. &ldquo;ampctl -l | more&rdquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>-v</b>, <b>--verbose</b></p>\n\n<p style=\"margin-left:22%;\">Set verbose mode, cumulative\n(see <b>DIAGNOSTICS</b> below).</p>\n\n<p style=\"margin-left:11%;\"><b>-Z</b>,\n<b>--debug-time-stamps</b></p>\n\n<p style=\"margin-left:22%;\">Enable time stamps for the\ndebug messages.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use only in\ncombination with the <b>-v</b> option as it generates no\noutput on its own.</p>\n\n<p style=\"margin-left:11%;\"><b>-h</b>, <b>--help</b></p>\n\n<p style=\"margin-left:22%;\">Show a summary of these options\nand exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-V</b>, <b>--version</b></p>\n\n<p style=\"margin-left:22%;\">Show version of <b>ampctl</b>\nand exit.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nSome options may not be implemented by a given backend and\nwill return an error. This is most likely to occur with the\n<b>--set-conf</b> and <b>--show-conf</b> options.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please note\nthat the backend for the amplifier to be controlled, or the\namplifier itself may not support some commands. In that\ncase, the operation will fail with a <b>Hamlib</b> error\ncode.</p>\n\n<h2>COMMANDS\n<a name=\"COMMANDS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Commands can be\nsent over the TCP socket either as a single char, or as a\nlong command name plus the value(s) space separated on one\n&rsquo;\\n&rsquo; terminated line. See <b>PROTOCOL</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Since most of\nthe <b>Hamlib</b> operations have a <b>set</b> and a\n<b>get</b> method, an upper case letter will be used for\n<b>set</b> methods whereas the corresponding lower case\nletter refers to the <b>get</b> method. Each operation also\nhas a long name; prepend a backslash, &rsquo;\\&rsquo;, to\nsend a long command name.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Example (Perl):\n&ldquo;print $socket &quot;\\\\dump_caps\\n&quot;;&rdquo; to\nsee what the amplifier&rsquo;s backend can do (<b>Note</b>:\nIn Perl and many other languages a &rsquo;\\&rsquo; will need\nto be escaped with a preceding &rsquo;\\&rsquo; so that even\nthough two backslash characters appear in the code, only one\nwill be passed to <b>ampctld</b>. This is a possible bug,\nbeware!).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nThe backend for the amplifier to be controlled, or the\namplifier itself may not support some commands. In that\ncase, the operation will fail with a <b>Hamlib</b> error\nmessage.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported commands (In the case of <b>set</b>\ncommands the quoted italicized string is replaced by the\nvalue in the description. In the case of <b>get</b> commands\nthe quoted italicized string is the key name of the value\nreturned.): <b><br>\nF</b>, <b>set_freq</b> '<i>Frequency</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Frequency</i>', in\nHz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Frequency may\nbe a floating point or integer value.</p>\n\n<p style=\"margin-left:11%;\"><b>f</b>, <b>get_freq</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Frequency</i>', in\nHz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns an\ninteger value.</p>\n\n<p style=\"margin-left:11%;\"><b>l</b>, <b>get_level</b>\n'<i>Level</i>'</p>\n\n<p style=\"margin-left:22%;\">Get '<i>Level Value</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns Level\nValue as a float or integer for the Level token given.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Level token will return a space separated list\nof amplifier backend supported get level tokens. Use this to\ndetermine the supported levels of a given amplifier\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>dump_state</b></p>\n\n<p style=\"margin-left:22%;\">Return certain state\ninformation about the amplifier backend.</p>\n\n<p style=\"margin-left:11%;\"><b>1</b>, <b>dump_caps</b></p>\n\n<p style=\"margin-left:22%;\">Not a real amplifier remote\ncommand, it just dumps capabilities, i.e. what the backend\nknows about this model, and what it can do.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">TODO: Ensure\nthis is in a consistent format so it can be read into a\nhash, dictionary, etc. Bug reports requested.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThis command will produce many lines of output so be very\ncareful if using a fixed length array! For example, running\nthis command against the Dummy backend results in a number\nof lines of text output.</p>\n\n<p style=\"margin-left:11%;\"><b>_</b>, <b>get_info</b></p>\n\n<p style=\"margin-left:22%;\">Return information from the\namplifier backend.</p>\n\n<p style=\"margin-left:11%;\"><b>R</b>, <b>reset</b>\n'<i>Reset</i>'</p>\n\n<p style=\"margin-left:22%;\">Perform amplifier\n'<i>Reset</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Reset is an\ninteger value: &rsquo;0&rsquo; = None, &rsquo;1&rsquo; =\nMemory reset, &rsquo;2&rsquo; = Fault reset, &rsquo;3&rsquo;\n= Amplifier reset.</p>\n\n<p style=\"margin-left:11%;\"><b>set_powerstat</b> '<i>Power\nStatus</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Power Status</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Power Status is\nan integer value: &rsquo;0&rsquo; = Power Off,\n&rsquo;1&rsquo; = Power On, &rsquo;2&rsquo; = Power Standby\n(enter standby), &rsquo;4&rsquo; = Power Operate (leave\nstandby).</p>\n\n<p style=\"margin-left:11%;\"><b>get_powerstat</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Power Status</i>' as in\n<b>set_powerstat</b> above.</p>\n\n<h2>PROTOCOL\n<a name=\"PROTOCOL\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">There are two\nprotocols in use by <b>ampctld</b>, the <b>Default\nProtocol</b> and the <b>Extended Response Protocol</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>Default\nProtocol</b> is intended primarily for the communication\nbetween <b>Hamlib</b> library functions and <b>ampctld</b>\n(&ldquo;NET ampctl&rdquo;, available using amplifier model\n&rsquo;2&rsquo;).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>Extended\nResponse Protocol</b> is intended to be used with scripts or\nother programs interacting directly with <b>ampctld</b> as\nconsistent feedback is provided.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Default\nProtocol</b> <br>\nThe <b>Default Protocol</b> is intentionally simple.\nCommands are entered on a single line with any needed\nvalues. In practice, reliable results are obtained by\nterminating each command string with a newline character,\n&rsquo;\\n&rsquo;.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Example set\nfrequency and mode commands (Perl code (typed text shown in\nbold)):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>print\n$socket &quot;F 14250000\\n&quot;; <br>\nprint $socket &quot;\\\\set_powerstat 1\\n&quot;;</b> # escape\nleading &rsquo;\\&rsquo;</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A one line\nresponse will be sent as a reply to <b>set</b> commands,\n&ldquo;RPRT <i>x</i>\\n&rdquo; where <i>x</i> is the Hamlib\nerror code with &rsquo;0&rsquo; indicating success of the\ncommand.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Responses from\n<b>ampctld get</b> commands are text values and match the\nsame tokens used in the <b>set</b> commands. Each value is\nreturned on its own line. On error the string &ldquo;RPRT\n<i>x</i>\\n&rdquo; is returned where <i>x</i> is the Hamlib\nerror code.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Example get\nfrequency (Perl code):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>print\n$socket &quot;f\\n&quot;;</b> <br>\n&quot;14250000\\n&quot;</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Most <b>get</b>\nfunctions return one to three values. A notable exception is\nthe <b>dump_caps</b> command which returns many lines of\n<b>key</b>:<i>value</i> pairs.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This protocol\nis primarily used by the &ldquo;NET ampctl&rdquo; (ampctl\nmodel 2) backend which allows applications already written\nfor Hamlib&rsquo;s C API to take advantage of <b>ampctld</b>\nwithout the need of rewriting application code. An\napplication&rsquo;s user can select amplifier model 2\n(&ldquo;NET ampctl&rdquo;) and then set <b>amp_pathname</b>\nto &ldquo;localhost:4531&rdquo; or other network\n<i>host</i>:<i>port</i> (set by the <b>-T</b>/<b>-t</b>\noptions, respectively, above).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Extended\nResponse Protocol</b> <br>\nThe Extended Response protocol adds several rules to the\nstrings returned by <b>ampctld</b> and adds a rule for the\ncommand syntax.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">1. The command\nreceived by <b>ampctld</b> is echoed with its long command\nname followed by the value(s) (if any) received from the\nclient terminated by the specified response separator as the\nfirst record of the response.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">2. The last\nrecord of each block is the string &ldquo;RPRT\n<i>x</i>\\n&rdquo; where <i>x</i> is the numeric return value\nof the Hamlib backend function that was called by the\ncommand.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">3. Any records\nconsisting of data values returned by the amplifier backend\nare prepended by a string immediately followed by a colon\nthen a space and then the value terminated by the response\nseparator. e.g. &ldquo;Frequency: 14250000\\n&rdquo; when the\ncommand was prepended by &rsquo;+&rsquo;.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">4. All commands\nreceived will be acknowledged by <b>ampctld</b> <br>\nwith records from rules 1 and 2. Records from rule 3 are\nonly returned when data values must be returned to the\nclient.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">4. All commands\nreceived will be acknowledged by <b>ampctld</b> with records\nfrom rules 1 and 2. Records from rule 3 are only returned\nwhen data values must be returned to the client.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">An example\nresponse to a <b>set_frequency</b> command sent from the\nshell prompt (note the prepended &rsquo;+&rsquo;):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>echo\n&quot;+F 14250000&quot; | nc -w 1 localhost 4531</b> <br>\nset_freq: 14250000 <br>\nRPRT 0</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">In this case\nthe long command name and values are returned on the first\nline and the second line contains the end of block marker\nand the numeric amplifier backend return value indicating\nsuccess.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">An example\nresponse to a <b>get_freq</b> query:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>echo\n&quot;+\\get_freq&quot; | nc -w 1 localhost 4531</b> <br>\nget_freq: <br>\nFrequency(Hz): 14250000 <br>\nRPRT 0</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe &rsquo;\\&rsquo; is still required for the long command\nname even with the ERP character.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">In this case,\nas no value is passed to <b>ampctld</b>, the first line\nconsists only of the long command name. The final line shows\nthat the command was processed successfully by the amplifier\nbackend.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Invoking the\nExtended Response Protocol requires prepending a command\nwith a punctuation character. As shown in the examples\nabove, prepending a &rsquo;+&rsquo; character to the command\nresults in the responses being separated by a newline\ncharacter (&rsquo;\\n&rsquo;). Any other punctuation\ncharacter recognized by the C <b>ispunct</b>() function\nexcept &rsquo;\\&rsquo;, &rsquo;?&rsquo;, or &rsquo;_&rsquo;\nwill cause that character to become the response separator\nand the entire response will be on one line.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Separator\ncharacter summary:</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"4%\">\n\n\n<p>&rsquo;<b>+</b>&rsquo;</p></td>\n<td width=\"7%\"></td>\n<td width=\"78%\">\n\n\n<p>Each record of the response is appended with a newline\n(&rsquo;\\n&rsquo;).</p> </td></tr>\n</table>\n\n<p style=\"margin-left:11%;\">&rsquo;<b>;</b>&rsquo;,\n&rsquo;<b>|</b>&rsquo;, or, &rsquo;<b>,</b>&rsquo;</p>\n\n<p style=\"margin-left:22%;\">Each record of the response is\nappended by the given character resulting in entire response\non one line.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">These are\ncommon record separators for text representations of\nspreadsheet data, etc.</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"4%\">\n\n\n<p>&rsquo;<b>?</b>&rsquo;</p></td>\n<td width=\"7%\"></td>\n<td width=\"78%\">\n\n\n<p>Reserved for help in <b>ampctl</b>.</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"4%\">\n\n\n<p>&rsquo;<b>_</b>&rsquo;</p></td>\n<td width=\"7%\"></td>\n<td width=\"78%\">\n\n\n<p>Reserved for <b>get_info</b> short command</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"4%\">\n\n\n<p>&rsquo;<b>#</b>&rsquo;</p></td>\n<td width=\"7%\"></td>\n<td width=\"78%\">\n\n\n<p>Reserved for comments when reading a command file\nscript.</p> </td></tr>\n</table>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nOther punctuation characters have not been tested! Use at\nyour own risk.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">For example,\ninvoking a <b>get_freq</b> query with a leading\n&rsquo;;&rsquo; returns:</p>\n\n\n<p style=\"margin-left:17%; margin-top: 1em\">get_freq:;Frequency(Hz):\n14250000;RPRT 0</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Or, using the\npipe character &rsquo;|&rsquo; returns:</p>\n\n\n<p style=\"margin-left:17%; margin-top: 1em\">get_freq:|Frequency(Hz):\n14250000|RPRT 0</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">And a\n<b>set_freq</b> command prepended with a &rsquo;|&rsquo;\nreturns:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">set_freq:\n14250000|RPRT 0</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Such a format\nwill allow reading a response as a single event using a\npreferred response separator. Other punctuation characters\nhave not been tested!</p>\n\n<h2>DIAGNOSTICS\n<a name=\"DIAGNOSTICS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>-v</b>,\n<b>--verbose</b> option allows different levels of\ndiagnostics to be output to <b>stderr</b> and correspond to\n-v for <b>BUG</b>, -vv for <b>ERR</b>, -vvv for <b>WARN</b>,\n-vvvv for <b>VERBOSE</b>, or -vvvvv for <b>TRACE</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A given verbose\nlevel is useful for providing needed debugging information\nto the email address below. For example, TRACE output shows\nall of the values sent to and received from the amplifier\nwhich is very useful for amplifier backend library\ndevelopment and may be requested by the developers.</p>\n\n<h2>EXAMPLES\n<a name=\"EXAMPLES\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>ampctld</b> for an Elecraft KPA-1500 using a\nUSB-to-serial adapter and backgrounding:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>ampctld -m\n201 -r /dev/ttyUSB1 &amp;</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>ampctld</b> for an Elecraft KPA-1500 using COM2 on MS\nWindows:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>ampctld -m\n201 -r COM2</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Connect to the\nalready running <b>ampctld</b> and set the frequency to\n14.266 MHz with a 1 second read timeout using the default\nprotocol from the shell prompt:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>echo\n&quot;\\set_freq 14266000&quot; | nc -w 1 localhost\n4531</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Connect to a\nrunning <b>ampctld</b> with <b>ampctl</b> on the local\nhost:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>ampctl\n-m2</b></p>\n\n<h2>SECURITY\n<a name=\"SECURITY\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">No\nauthentication whatsoever; DO NOT leave this TCP port open\nwide to the Internet. Please ask if stronger security is\nneeded or consider using a Secure Shell (<b>ssh</b>(1))\ntunnel.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">As\n<b>ampctld</b> does not need any greater permissions than\n<b>ampctl</b>, it is advisable to not start <b>ampctld</b>\nas &ldquo;root&rdquo; or another system user account in\norder to limit any vulnerability.</p>\n\n<h2>BUGS\n<a name=\"BUGS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The daemon is\nnot detaching and backgrounding itself.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">No method to\nexit the daemon so the <b>kill</b>(1) command must be used\nto terminate it.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Multiple\nclients using the daemon may experience contention with the\nconnected amplifier.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Report bugs\nto:</p>\n\n\n<p style=\"margin-left:22%;\"><a href=\"mailto:hamlib-developer@lists.sourceforge.net\">Hamlib\nDeveloper mailing list </a></p>\n\n<h2>COPYING\n<a name=\"COPYING\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This file is\npart of Hamlib, a project to develop a library that\nsimplifies radio, rotator, and amplifier control functions\nfor developers of software primarily of interest to radio\namateurs and those interested in radio communications.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Copyright\n&copy; 2000-2010 Stephane Fillod <br>\nCopyright &copy; 2000-2018 the Hamlib Group (various\ncontributors) <br>\nCopyright &copy; 2011-2020 Nate Bargmann</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This is free\nsoftware; see the file COPYING for copying conditions. There\nis NO warranty; not even for MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.</p>\n\n<h2>SEE ALSO\n<a name=\"SEE ALSO\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>kill</b>(1),\n<b>ampctl</b>(1), <b>ssh</b>(1), <b>hamlib</b>(7)</p>\n\n<h2>COLOPHON\n<a name=\"COLOPHON\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Links to the\nHamlib Wiki, Git repository, release archives, and daily\nsnapshot archives are available via\n<a href=\"http://www.hamlib.org\">hamlib.org</a>.</p>\n<hr>\n</body>\n</html>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/doc/hamlib-primer.7.html",
    "content": "<!-- Creator     : groff version 1.22.4 -->\n<!-- CreationDate: Wed May 18 09:31:53 2022 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<meta name=\"Content-Style\" content=\"text/css\">\n<style type=\"text/css\">\n       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       h1      { text-align: center }\n</style>\n<title>HAMLIB-PRIMER</title>\n\n</head>\n<body>\n\n<h1 align=\"center\">HAMLIB-PRIMER</h1>\n\n<a href=\"#NAME\">NAME</a><br>\n<a href=\"#DESCRIPTION\">DESCRIPTION</a><br>\n<a href=\"#COPYING\">COPYING</a><br>\n<a href=\"#SEE ALSO\">SEE ALSO</a><br>\n<a href=\"#COLOPHON\">COLOPHON</a><br>\n\n<hr>\n\n\n<h2>NAME\n<a name=\"NAME\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">hamlib-primer -\ncompiling and using the radio and rotator control\nlibrary</p>\n\n<h2>DESCRIPTION\n<a name=\"DESCRIPTION\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">There are\nseveral ways to obtain a working installation of Hamlib. The\nfollowing sections discuss installing from a package\nmanager, building from source, and installing Hamlib project\nsupplied binaries on Microsoft Windows&reg;</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Installing\nbinary packages on Linux and BSD</b> <br>\nThe easiest way to install a released version of Hamlib on a\nLinux based distribution or a BSD variant is through the\nprovided <i>package manager</i>. While package managers vary\naccording to the distribution (it&rsquo;s easy to lump BSD\nvariants in this group too) their end goal is to provide\nready to use software packages. Since such a wide variety of\npackage managers exist, it is best to recommend that the\ndocumentation for your chosen distribution be your\nguide.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>A variety of\nHamlib sources</b> <br>\nDistribution packages are most often official Hamlib\nreleases and in some cases could be quite old and lacking\nsupport for newer radios or rotators. In some cases support\nis improved in existing radio or rotator back ends and bugs\nare fixed in newer releases. Often times to get the improved\nsupport/bug fixes, building from source will be required.\nRelax, it&rsquo;s not hard. :-)</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Source code is\navailable as official releases, testing snapshots, daily\ndevelopment snapshots, and the bleeding edge of development\ndirectly from the\n<a href=\"https://github.com/Hamlib/Hamlib\">Git\nrepository</a>. As a rule, even the bleeding edge tarballs\nshould configure and compile without error even though\ncertain implementation work may be in progress and may be\nincomplete or have errors.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Getting\nreleased source</b> <br>\nOfficial Hamlib source releases, commonly called\n<i>tarballs</i> can be found on the\n<a href=\"http://sourceforge.net/projects/hamlib/files/hamlib/\">SourceForge.net\nHamlib files</a> Web page. The most recent release is listed\nfirst.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Getting\nsource snapshots</b> <br>\nTesting release candidates (RCs) are posted during the\nperiod (often a few weeks) before a planned release.\nBeginning with the 4.0 release, RCs are hosted by the\n<a href=\"http://sourceforge.net/projects/hamlib/files/hamlib/\">SourceForge.net\nHamlib files</a> Web page. RCs are identifed by having a\n<i>~rcX</i> suffix where the <i>X</i> is replace by a\nnumeral for successive release candidates.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Daily snapshots\nof the development repository are available via the World\nWide Web from\n<a href=\"http://n0nb.users.sourceforge.net/\">Hamlib Git\ndaily snapshots</a>. These are not official releases but are\nprovided for testing new features and bug fixes.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The daily\ndevelopment snapshot is made and posted each day by around\n1030 UTC. Daily snapshots <i>should</i> compile but\nsometimes a bug creeps in that prevents compilation. If that\nshould happen, please report it to the\n<a href=\"mailto:hamlib-developer@@lists.sourceforge.net\">hamlib-developer\nmailing list</a>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Git\nrepository</b> <br>\nThe source repository can be <i>cloned</i> which copies the\nrepository to your computer including its entire history,\nbranches, and release tag information. In other words, once\nthe <b>git</b>(1) <b>clone</b> command is finished a\ncomplete copy of the Hamlib development will be on your\ncomputer. You can do quite a lot with this as nothing is\nhidden from view since the entire history of Hamlib is right\nthere all the way from the very first commit to the present.\nNone of the meta-data is hidden away on some central\nserver.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">To clone the\nrepository use the following command:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>git clone\nhttps://git.code.sf.net/p/hamlib/code hamlib</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">or:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>git clone\nhttps://github.com/Hamlib/Hamlib.git</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Odds are that\nyou will want to run the above command in a sub directory of\nyour home directory. The <i>hamlib</i> directory will be\ncreated by Git and the <i>master</i> branch will be checked\nout for you as the <i>working copy</i>. The master branch is\none of several branches used in Hamlib development. It is\nthe main branch of new features and bug fixes. The working\ncopy will be the latest revision of every file at the time\nof the clone. Later updates from the developers will require\nusing another Git command to update your local\nrepository.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Building\nfrom source</b> <br>\nBuilding from source will be required for various reasons.\nPerhaps only an older release is provided by your\ndistribution, or you would like to test recent changes to\nHamlib&mdash;either a specific back end or API\nchanges&mdash;and offer a report to the developers, or you\nwould like to take part in development and offer your\ncontribution to the project, or you would just like to learn\nhow to build a relatively comprehensive package from source.\nAny is a good reason to build from the source code\narchive.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Before going\nfurther, this manual assumes familiarity with working from\nthe command prompt in a Linux/BSD/Unix like system&rsquo;s\n<i>Bourne shell</i> environment (compatible Bourne shells\ninclude <b>bash</b>(1), <b>ksh</b>(1), <b>zsh</b>(1), and\nseveral more) either in a <i>virtual console</i> (a text\nonly screen with no graphics) or in a <i>terminal</i> in a\ndesktop environment (<b>xterm</b>(1), <b>rxvt</b>(1),\n<b>konsole</b>(1) (included with the KDE desktop),\n<b>gnome-terminal</b>(1), <b>xfce4-terminal</b>(1),\n<b>terminal</b>(1) (included in macOS), etc.). If this is\nnew to you, take some time and read up on using the shell. A\ngood tutorial can be found at\n<a href=\"http://linuxcommand.org/\">LinuxCommand.org</a>\nwhich also offers an in-depth book that can be purchased or\ndownloaded for no cost (the Hamlib project is not associated\nwith nor has any interest in the sale of this book, it just\nlooks like a very good effort on the part of its\nauthor).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Let&rsquo;s get\nstarted.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Compiling\nsource tarballs</b> <br>\nBefore proceeding, it is essential to read the information\nin the files, <i>README</i>, <i>INSTALL</i>, and\n<i>README.betatester</i> supplied in the Hamlib\n<i>top-level</i> directory which will be named something\nlike <i>hamlib-3.3~git</i> where the latter part is the\nrelease version. In this case the <i>3.3~git</i> indicates\nthis is a development snapshot of the Git master branch.\nThese files provide detailed information for compiling\nHamlib and will vary some from release to release.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Compiling from\na source tarball whether it is an official release or a\ntesting or daily development snapshot follows the same set\nof commands, known as the <i>three step</i> which are each\nrun from the top-level directory:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>./configure\n<br>\nmake <br>\nsudo make install</b></p>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>configure</b>\n<br>\nThe <i>./</i><b>configure</b> command examines your system\nand checks it for any packages that are required or good to\nhave options for compiling Hamlib. The leading <i>./</i>\ntells the shell to only run the <b>configure</b> command\nfound in the current directory. It is always possible that a\n<b>configure</b> command could be lurking elsewhere and we\ndon&rsquo;t want to run that!</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Run:</p>\n\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>./configure</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">from the\ntop-level directory.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nSome distributions are configured so commands can only be\nrun from directories listed in the <b>PATH</b> environment\nvariable. The <i>./</i> is necessary or the <b>configure</b>\ncommand will not be run as the <i>current directory</i>\n(defined as <i>.</i>) is not in the <b>PATH</b>. This is\nconsidered a default security feature so that only programs\nprovided by the distribution are run. <b>PATH</b> can be\nmodified for your own session, but that is a topic for the\nLinuxCommand.org reference above.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Of course,\nthings are usually complicated a bit by options and Hamlib\nis no exception. The good news is that the defaults, i.e.,\nno options, work well in most situations. Options are needed\nto enable the compilation of certain portions of Hamlib such\nas the language bindings. Optional features usually require\nthat more development tools are installed. The\n<i>INSTALL</i> and <i>README.betatester</i> files in the\nHamlib top-level directory will have details on the options\navailable for that release.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A useful option\nis <b>--prefix</b> which tells <b>configure</b> where in the\nfile system hierarchy Hamlib should be installed. If it is\nnot given, Hamlib will be installed in the <i>/usr/local</i>\nfile system hierarchy. Perhaps you want to install to your\nhome directory instead:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>./configure\n--prefix=$HOME/local</b></p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nFor practice you may wish to start out using the\n<b>--prefix</b>=<i>$HOME/local</i> option to install the\nHamlib files into your home directory and avoid overwriting\nany version of Hamlib installed into the system directories.\nThe code examples in the remainder of this manual will\nassume Hamlib has been installed to <i>$HOME/local</i>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">As a result of\nthis option, all of the files will be installed in the\n<i>local</i> directory of your home directory. <i>local</i>\nwill be created if it does not exist during installation as\nwill several other directories in it. Installing in your\nhome directory means that <i>root</i>, or superuser\n(administrator) privileges are not required when running\n<b>make install</b>. On the other hand, some extra work will\nneed to be done so other programs can use the library. The\nutilities that are compiled as a part of the Hamlib build\nsystem will work as they are <i>linked</i> to the library\ninstalled under <i>local</i>. Running them will require\ndeclaring the complete path:</p>\n\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>local/bin/rigctl</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">or modifying\nyour shell&rsquo;s <i>PATH</i> environment variable (see the\nshell tutorial site above).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Another useful\noption is <b>--help</b> which will give a few screens full\nof options for <b>configure</b>. If in a desktop environment\nthe scroll bar can be used to scroll back up through the\noutput. In either a terminal or a virtual console Linux\nsupports the Shift-PageUp key combination to scroll back up.\nConversely, Shift-PageDown can be used to scroll down toward\nthe end of the output and the shell prompt\n(Shift-UpArrow/Shift-DownArrow may also work to scroll one\nline at a time (terminal dependent)).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">After a fair\namount of time, depending on your computer, and a lot of\nscreen output, <b>configure</b> will finish its job. So long\nas the few lines previous to the shell prompt don&rsquo;t\nsay &ldquo;error&rdquo; or some such failure message Hamlib\nis ready to be compiled. If there is an error and all of the\nrequired packages listed in <i>README.betatester</i> have\nbeen installed, please ask for help on the\n<a href=\"mailto:hamlib-developer@lists.sourceforge.net\">hamlib-developer\nmailing list</a>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>make</b>\n<br>\nThe <b>make</b>(1) command is responsible for running the\n<i>compiler</i> which reads the source files and from the\ninstructions it finds in them writes <i>object</i> files\nwhich are the binary instructions the CPU of a computer can\nexecute. <b>make</b> then calls the <i>linker</i> which puts\nthe object files together in the correct order to create the\nHamlib library files and its executable programs.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Run:</p>\n\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>make</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">from the\ntop-level directory.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Any error that\ncauses <b>make</b> to stop early is cause for a question to\nthe\n<a href=\"mailto:hamlib-developer@lists.sourceforge.net\">hamlib-developer\nmailing list</a>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">In general\n<b>make</b> will take longer than <b>configure</b> to\ncomplete its run. As it is a system command, and therefore\nfound in the shell&rsquo;s <b>PATH</b> environment variable,\nprefixing <b>make</b> with <i>./</i> will cause a\n&ldquo;command not found&rdquo; error from the shell.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>make\ninstall</b> <br>\nAssuming that you have not set the installation prefix to\nyour home directory, root (administrator) privileges will be\nrequired to install Hamlib to the system directories. Two\npopular methods exist for gaining root privileges,\n<b>su</b>(1) and <b>sudo</b>(8). <b>sudo</b> is probably the\nmost popular these days, particularly when using the\n<a href=\"http://www.ubuntu.com\">Ubuntu</a> family of\ndistributions.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Run:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>sudo make\ninstall</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">or:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>su -l</b>\n<br>\nPassword: <br>\n# <b>make install</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">as root from\nthe top-level directory.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe shell session is shown to show the change in prompt from\na normal user account to the root account.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>-l</b>\noption to <b>su</b> forces a <i>login</i> shell so that\nenvironment variables such as <i>PATH</i> are set\ncorrectly.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Running <b>make\ninstall</b> will call the installer to put all of the newly\ncompiled files and other files (such as this document) in\npredetermined places set by the <b>--prefix</b> option to\n<b>configure</b> in the directory hierarchy (yes, this is by\ndesign and <b>make</b> is not just flinging files any old\nplace!).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A lot of screen\noutput will be generated. Any errors will probably be rather\nearly in the process and will likely be related to your\n<i>username</i> not having write permissions in the system\ndirectory structure.</p>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>ldconfig</b>\n<br>\nOnce the installation is complete one more step is required\nif Hamlib has never been installed from a local build\nbefore. The <b>ldconfig</b> command tells the system library\nloader where to find the newly installed Hamlib libraries.\nIt too will need to be run with root privileges:</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Run:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>sudo\nldconfig</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">as root from\nany directory or while logged in as root from above.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nSubsequent installations of Hamlib will not need to have\n<b>ldconfig</b> run after each installation if a newer\nversion of Hamlib was not installed, i.e., when recompiling\nthe same version during development.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">On some\ndistributions a bit of configuration will be needed before\n<b>ldconfig</b> will add locally compiled software to its\ndatabase. Please consult your distribution&rsquo;s\ndocumentation.</p>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Bootstrapping\nfrom a 'git clone'</b> <br>\nChoosing to build from from a <b>git clone</b> requires a\nfew more development tools (notice a theme here?) as\ndetailed in <i>README.developer</i>. The most critical will\nbe the GNU Autotools (<b>autoconf</b>, <b>automake</b>,\n<b>libtool</b>, and more) from which the build system\nconsisting of <b>configure</b>, the various\n<i>Makefile.in</i>s throughout the directory structure, and\nthe final <i>Makefile</i>s are generated.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">In the\ntop-level directory is the <b>bootstrap</b> script from\nwhich the build system is <i>bootsrapped&mdash;the</i>\nprocess of generating the Hamlib build system from\n<i>configure.ac</i> and the various <i>Makefile.am</i>s. At\nits completion the <b>configure</b> script will be present\nto configure the build system.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Next\n<b>configure</b> is run with any needed build options\n(<b>configure --help</b> is useful) to enable certain\nfeatures or provide paths for locating needed build\ndependencies, etc. Environment variables intended for the\npreprocessor and/or compiler may also be set on the\n<b>configure</b> command line.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">After the\nconfiguration is complete, the build may proceed with the\n<b>make</b> step as for the source tarballs above. Or\n<b>configure --help</b> may be run, and <b>configure</b> run\nagain with specific options in which case the\n<i>Makefile</i>s will be regenerated and the build can\nproceed with the new configuration.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Other make\ntargets</b> <br>\nBesides <b>make install</b>, other <i>targets</i> exist when\nrunning <b>make</b>. Running <b>make clean</b> from the\ntop-level directory removes all of the generated object and\nexecutable files generated by running <b>make</b> freeing up\nconsiderable disk space.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nDuring development of individual source files, it is not\nnecessary to run <b>make clean</b> each time before\n<b>make</b>. Simply run <b>make</b> and only the modified\nfile(s) and any objects that depend on them will be\nrecompiled. This speeds up development time\nconsiderably.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">To remove even\nthe generated <i>Makefile</i>s, run <b>make distclean</b>\nfrom the top-level directory. After this target is run,\n<b>configure</b> will need to be run again to regenerate the\n<i>Makefile</i>s. This command may not be as useful as the\n<i>Makefile</i>s do not take up much space, however it can\nbe useful for rebuilding the <i>Makefile</i>s when modifying\na <i>Makefile.am</i> or <i>confgure.ac</i> during build\nsystem development.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Parallel\nbuild trees</b> <br>\nOne feature of the GNU build system used by Hamlib is that\nthe object files can be kept in a directory structure\nseparate from the source files. While this has no effect on\nthe <b>make</b> targets described above, it does help the\ndeveloper find files in the source tree! One such way of\nusing parallel builds is described in\n<i>README.developer</i>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Parallel builds\ncan be very useful as one build directory can be configured\nfor a release and another build directory can be configured\nfor debugging with different options passed to\n<b>configure</b> from each directory. The generated\n<i>Makefile</i>s are unique to each build directory and will\nnot interfere with each other.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Adding\ndebugging symbols</b> <br>\nWhen additional debugging symbols are needed with, for\nexample, the GNU Debugger, <b>gdb</b>, the needed compiler\nand linker options are passed as environment variables.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Run:</p>\n\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>../hamlib/configure\nCFLAGS=&quot;-ggdb3 -O0&quot; CXXFLAGS=&quot;-ggdb3\n-O0&quot;</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">from a sibling\nbuild directory intended for a debugging build.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The\n<b>-ggdb3</b> option tells the C compiler, in this case the\nGNU C Compiler, <b>gcc</b>, to add special symbols useful\nfor GDB, the GNU debugger. The <b>-O0</b> option tells\n<b>gcc</b> to turn off all optimizations which will make it\neasier to follow some variables that might otherwise be\noptimized away. <b>CFLAGS</b> and <b>CXXFLAGS</b> may be set\nindependently for each compiler.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThere are a number compiler options available for\ncontrolling debugging symbols and setting optimization\nlevels. Please consult the compiler&rsquo;s manual for all\nthe details.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Compiling\nfor Microsoft Windows</b> <br>\nCurrently compiling is done on a Debian 10 (Buster) virtual\nmachine using <a href=\"http://www.mingw.org\">MinGW</a>.\n<i>README.build-win32</i> in the <i>scripts</i> directory\nhas details on how this is accomplished.</p>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Pre-compiled\nbinaries for Microsoft Windows</b> <br>\nPre-compiled binaries for Microsoft Windows 32 and 64 bit\narchitectures (Windows NT and newer) are available for both\nofficial releases and daily development snapshots.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Official\nreleases are available through the\n<a href=\"http://sourceforge.net/projects/hamlib/files/hamlib/\">SourceForge.net\nfile download service</a>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Daily\ndevelopment snapshots are available from the\n<a href=\"http://n0nb.users.sourceforge.net/\">daily snapshots\npage</a>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Beginning with\nthe Hamlib 1.2.15.3 release a self-extracting installer is\navailable. Among its features are selecting which portions\nof Hamlib are installed. The <i>PATH</i> environment\nvariable will need to be set manually per the included\n<i>README.w32-bin</i> or <i>README.w64-bin</i> file.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Daily\ndevelopment snapshots feature both a .ZIP archive and the\nself extracting installer.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Bug reports and\nquestions about these archives should be sent to the\n<a href=\"mailto:hamlib-developer@lists.sourceforge.net\">hamlib-developer\nmailing list</a>.</p>\n\n<h2>COPYING\n<a name=\"COPYING\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This file is\npart of Hamlib, a project to develop a library that\nsimplifies radio and rotator control functions for\ndevelopers of software primarily of interest to radio\namateurs and those interested in radio communications.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Copyright\n&copy; 2001-2020 Hamlib Group (various contributors)</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This is free\nsoftware; see the file COPYING for copying conditions. There\nis NO warranty; not even for MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.</p>\n\n<h2>SEE ALSO\n<a name=\"SEE ALSO\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>git</b>(1),\n<b>hamlib</b>(7), <b>ldconfig</b>(8), <b>make</b>(1),\n<b>su</b>(1), <b>sudo</b>(8)</p>\n\n<h2>COLOPHON\n<a name=\"COLOPHON\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Links to the\nHamlib Wiki, Git repository, release archives, and daily\nsnapshot archives are available via\n<a href=\"http://www.hamlib.org\">hamlib.org</a>.</p>\n<hr>\n</body>\n</html>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/doc/hamlib-utilities.7.html",
    "content": "<!-- Creator     : groff version 1.22.4 -->\n<!-- CreationDate: Wed May 18 09:31:53 2022 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<meta name=\"Content-Style\" content=\"text/css\">\n<style type=\"text/css\">\n       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       h1      { text-align: center }\n</style>\n<title>HAMLIB-UTILITIES</title>\n\n</head>\n<body>\n\n<h1 align=\"center\">HAMLIB-UTILITIES</h1>\n\n<a href=\"#NAME\">NAME</a><br>\n<a href=\"#DESCRIPTION\">DESCRIPTION</a><br>\n<a href=\"#rigctl\">rigctl</a><br>\n<a href=\"#rotctl\">rotctl</a><br>\n<a href=\"#ampctl\">ampctl</a><br>\n<a href=\"#rigctld\">rigctld</a><br>\n<a href=\"#rotctld\">rotctld</a><br>\n<a href=\"#ampctl\">ampctl</a><br>\n<a href=\"#rigmem\">rigmem</a><br>\n<a href=\"#rigsmtr\">rigsmtr</a><br>\n<a href=\"#rigswr\">rigswr</a><br>\n<a href=\"#COPYING\">COPYING</a><br>\n<a href=\"#SEE ALSO\">SEE ALSO</a><br>\n<a href=\"#COLOPHON\">COLOPHON</a><br>\n\n<hr>\n\n\n<h2>NAME\n<a name=\"NAME\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">hamlib-utilties\n- radio and rotator control utilities of Hamlib</p>\n\n<h2>DESCRIPTION\n<a name=\"DESCRIPTION\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Included with\nthe Hamlib distribution are several utility programs.\nBesides providing a way for developers to test new code and\nbug fixes, the programs also offer a reference\nimplementation for interfacing to the Hamlib library\nfunctions both through the <b>C</b> <small>API</small>\n(Application Programming Interface) and offering a network\naccessible <small>API.</small></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This page\nsummarizes the three test programs, <b>ampctl</b>(1) for\ntesting amplifier back ends, <b>rigctl</b>(1) for testing\nradio back ends, and <b>rotctl</b>(1) for testing rotator\nback ends and the three network daemons, <b>ampctld</b>(1),\n<b>rigctld</b>(1), and <b>rotcltd</b>(1) for amplifier,\nradio, and rotator access via network sockets. Also included\nare three demonstration utilities, <b>rigmem</b>(1),\n<b>rigsmtr</b>(1), and <b>rigswr</b>(1) which provide\nfunctional examples of how Hamlib may be used to accomplish\nvarious tasks.</p>\n\n<h2>rigctl\n<a name=\"rigctl\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigctl</b>(1)\nis the most frequently used Hamlib utility. As the other\n<i>ctl</i> utilities share many of the same characteristics,\nmuch of the introductory information presented in this\nsection is applicable to the other utility programs.</p>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Introduction\nto rigctl</b> <br>\nMost likely the first of the Hamlib utility programs that is\nused is <b>rigctl</b>(1). rigctl is a character based\ninteractive program and a command line program able to set\nor query a radio&rsquo;s value with a single command. rigctl\nis invoked from a shell command prompt with various options\nand additional commands.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">In its most\nsimple use as a <i>command line</i> program, rigctl is used\nto set frequency and mode by typing commands after any\nrigctl options:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>rigctl F\n14205000 <br>\nrigctl M USB 2400</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">and then query\nthose values:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>rigctl f\n<br>\nrigctl m</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Entering\n<i>interactive mode</i> is a simple matter of not placing\nany commands after any rigctl options:</p>\n\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>rigctl</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Entering\ninteractive mode allows successive commands to be entered\nwithout exiting rigctl. Recent additions to rigctl allow\ncommand editing and history recall through use of the\n<a href=\"https://tiswww.case.edu/php/chet/readline/rltop.html\">Readline</a>\nlibrary.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Interactive\nmode is indicated by the spartan prompt:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Rig\ncommand:</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Commands are\ngiven at the prompt and follow the general rule that upper\ncase letters set a value and lower case letters query a\nvalue:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Rig command:\n<b>M</b> <br>\nMode: <b>USB</b> <br>\nPassband: <b>2500</b></p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Rig command:\n<b>m</b> <br>\nMode: USB <br>\nPassband: 2500</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Rig\ncommand:</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">An additional\nprompt is printed when more information is required by the\ncommand. For M above, rigctl prompted for the Mode and\nPassband values. For m above, rigctl returned the Mode and\nPassband values without further prompts. The command prompt\nis returned after each command invocation.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The above\nexamples invoked rigctl without specifying a radio model.\nThis is a feature where the Hamlib internal radio model 1\n<i>dummy</i> is used. The dummy radio provides a way to test\nHamlib functions without the need for actual radio hardware.\nHowever, to develop the Hamlib backend capability for a\ngiven radio, having the actual radio connected to the\ncomputer is necessary for debugging.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">For example, to\nquickly set frequency on an Elecraft K3:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>rigctl -m\n2029 -r /dev/rig F 3900000</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">and to query\nthe frequency and then mode:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>rigctl -m\n2029 -r /dev/rig f</b> <br>\n3900000</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>rigctl -m\n2029 -r /dev/rig m</b> <br>\nLSB <br>\n2000</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nthe returned values do not have the prompt strings\nassociated with interactive mode as shown above.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>-m</b>\noption takes a numeric value that corresponds to a given\nradio back end model. The <b>-r</b> option takes the path to\nthe port device on <small>POSIX</small> and the device name\non Microsoft Windows.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: A\ncomplete list of supported radio models may be seen by use\nof the <b>-l</b> option:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>rigctl\n-l</b> <br>\nRig # Mfg Model Version Status <br>\n1 Hamlib Dummy 0.5 Beta <br>\n2 Hamlib NET rigctl 0.3 Beta <br>\n1001 Yaesu FT-847 0.5 Beta <br>\n1003 Yaesu FT-1000D 0.0.6 Alpha <br>\n. <br>\n. <br>\n. <br>\n27002 Rohde&amp;Schwarz EB200 0.1 Untested <br>\n28001 Philips/Simoco PRM8060 0.1 Alpha <br>\n29001 ADAT www.adat.ch ADT-200A 1.36 Beta</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The list is\nlong so use Shift-PageUp/Shift-PageDown on Linux, ScrollLock\nthen PageUp/PageDown on Free BSD, or use the scrollbar to\nthe virtual terminal window (<b>cmd</b> window on Microsoft\nWindows) or the output can be piped to <b>more</b>(1) or\n<b>less</b>(1), e.g., &ldquo;rigctl -l | more&rdquo; to\nscroll back up the list. The list is sorted numerically by\nmodel number since Hamlib 1.2.15.1. Model numbers of a\nmanufacturer/protocol family are grouped together.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigctl\nreference</b> <br>\nThe complete reference for rigctl can be found in the\n<b>rigctl</b>(1) manual page.</p>\n\n<h2>rotctl\n<a name=\"rotctl\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Identical in\nfunction to <b>rigctl</b>(1), <b>rotctl</b>(1) provides a\nmeans for testing Hamlib functions useful for rotator\ncontrol and QTH (Maidenhead gridsquare system, see\n<a href=\"https://en.wikipedia.org/wiki/Maidenhead_Locator_System\">Maidenhead\nLocator System</a>) locator computations. As rotators have a\nmuch narrower scope than radios, there are fewer command\nline options and commands for rotctl.</p>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Introduction\nto rotctl <br>\nrotctl</b>(1) is a character based interactive program and a\ncommand line program able to set or query a rotator&rsquo;s\nvalue with a single command. rotctl is invoked from a shell\ncommand prompt with various options and additional\ncommands.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">In its most\nsimple use as a <i>command line</i> program, rotctl is used\nto set azimuth position and (optionally) elevation by typing\ncommands after any rotctl options:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>rotctl P\n145.0 23.0 <br>\nrotctl M 8 25</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">and then query\nthose values:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>rotctl\np</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Entering\n<i>interactive mode</i> is a simple matter of not placing\nany commands after any rotctl options:</p>\n\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>rotctl</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Entering\ninteractive mode allows successive commands to be entered\nwithout exiting rotctl. Interactive mode allows for command\nediting and history recall through the use of the\n<a href=\"https://tiswww.case.edu/php/chet/readline/rltop.html\">Readline</a>\nlibrary.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Interactive\nmode is indicated by the spartan prompt:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Rotator\ncommand:</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Commands are\ngiven at the prompt:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Rotator\ncommand: <b>M</b> <br>\nDirection: <b>16</b> <br>\nSpeed: <b>60</b></p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Rotator\ncommand: <b>p</b> <br>\nAzimuth: 11.352000 <br>\nElevation: 0.000000</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Rotator\ncommand: <b>p</b> <br>\nAzimuth: 27.594000 <br>\nElevation: 0.000000</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Rotator\ncommand:</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">An additional\nprompt is printed when more information is required by the\ncommand. For M above, rotctl prompted for the Direction and\nSpeed values. For p above, rotctl returned the Azimuth and\nElevation values without further prompts. The command prompt\nis returned after each command invocation.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The above\nexamples invoked rotctl without specifying a rotator model.\nThis is a feature where the Hamlib internal rotator model 1\n<i>dummy</i> is used instead. The dummy rotator provides a\nway to test Hamlib functions without the need for actual\nrotator hardware. However, to develop back end capability\nfor a given rotator, having the actual controller connected\nto the computer is necessary for debugging.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">For example, to\nquickly set position for RotorEZ:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>rotctl -m\n401 -r /dev/rotor P 100.0 0.0</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">and to query\nthe position:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>rotctl -m\n401 -r /dev/rotor p</b> <br>\n100.000000 <br>\n0.000000</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The returned\nvalues do not have the prompt strings associated with\ninteractive mode as shown above.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>-m</b>\noption takes a numeric value that corresponds to a given\nrotator back end model. The <b>-r</b> option takes the path\nto the port device on <small>POSIX</small> or the device\nname on Microsoft Windows.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: A\ncomplete list of supported rotator models may be seen by use\nof the <b>-l</b> option:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>rotctl\n-l</b> <br>\nRot # Mfg Model Version Status <br>\n1 Hamlib Dummy 0.5 Beta <br>\n2 Hamlib NET rotctl 0.3 Beta <br>\n201 Hamlib EasycommI 0.3 Beta <br>\n202 Hamlib EasycommII 0.3 Beta <br>\n. <br>\n. <br>\n. <br>\n1201 AMSAT IF-100 0.1 Untested <br>\n1301 LA7LKA ts7400 0.1 Beta <br>\n1401 Celestron NexStar 0.1 Untested</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The list is\nlong so use Shift-PageUp/Shift-PageDown on Linux, ScrollLock\nthen PageUp/PageDown on Free BSD, or use the scrollbar to\nthe virtual terminal window (<b>cmd</b> window on Microsoft\nWindows) or the output can be piped to <b>more</b>(1) or\n<b>less</b>(1), e.g. &ldquo;rotctl -l | more&rdquo; to\nscroll back up the list. The list is sorted numerically by\nmodel number since Hamlib 1.2.15.1. Model numbers of a\nmanufacturer/protocol family are grouped together.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rotctl\nreference</b> <br>\nThe complete reference for rotctl can be found in the\n<b>rotctl</b>(1) manual page.</p>\n\n<h2>ampctl\n<a name=\"ampctl\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The\n<b>ampctl</b>(1) utility is a recent addition to the Hamlib\nutilities as a part of the 4.0 development cycle. It is\nintended to test the Hamlib implementation of amplifier\ncontrol and is similar in function to the utilities\npreviously described. See the <b>ampctl</b>(1) manual page\nfor the complete reference.</p>\n\n<h2>rigctld\n<a name=\"rigctld\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The\n<b>rigctld</b>(1) program is a network server that accepts\nthe familiar commands of <b>rigctl</b>(1) and provides the\nresponse data over a <small>TCP/IP</small> network socket to\nan application. In this manner an application can access a\nrigctld instance from nearly anywhere (caveat, no security\nis currently provided by rigctld). Applications using\nrigctld do not link directly to Hamlib nor use its C\nAPI.</p>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Introduction\nto rigctld <br>\nrigctld</b>(1) communicates to a client through a\n<small>TCP</small> network socket using text commands shared\nwith <b>rigctl</b>(1). The protocol is simple; commands are\nsent to rigctld on one line and rigctld responds to\n<b>get</b> commands with the requested values, one per line,\nwhen successful, otherwise, it responds with one line\n<b>RPRT</b> <i>x</i>, where <i>x</i> is a negative number\nindicating the Hamlib error code. Commands that do not\nreturn values respond with the line <b>RPRT</b> <i>x</i>,\nwhere <i>x</i> is zero when successful, otherwise a negative\nnumber indicating the Hamlib error code. Each line is\nterminated with a newline, <i>\\n</i>, character. This\nprotocol is primarily for use by the <b>NET rigctl</b>\n(radio model 2) backend.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A separate\nExtended Response protocol extends the above behavior by\nechoing the received command string as a header, any\nreturned values as a key: value pair, and the <b>RPRT</b>\n<i>x</i> string as the end of response marker which includes\nthe Hamlib success or failure value. Consider using this\nprotocol for clients that will interact with rigctld\ndirectly through a TCP network socket.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Multiple radios\ncan be controlled on different TCP ports by use of multiple\nrigctld processes each listening on a unique TCP port. It is\nhoped that rigctld will be especially useful for client\nauthors using languages such as\n<a href=\"http://www.perl.org/\">Perl</a>,\n<a href=\"http://www.python.org/\">Python</a>,\n<a href=\"http://php.net/\">PHP</a>,\n<a href=\"http://www.ruby-lang.org/en/\">Ruby</a>,\n<a href=\"http://www.tcl.tk/\">TCL</a>, and others.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigctld\nreference</b> <br>\nThe complete reference for rigctld can be found in the\n<b>rigctld</b>(1) manual page.</p>\n\n<h2>rotctld\n<a name=\"rotctld\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The\n<b>rotctld</b>(1) program is a network server that accepts\nthe familiar commands of <b>rotctl</b>(1) and provides the\nresponse data over a TCP/IP network socket to an\napplication. In this manner an application can access a\nrotctld instance from nearly anywhere (caveat, no security\nis currently provided by rotctld). Applications using\nrotctld do not link directly to Hamlib nor use its C\nAPI.</p>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Introduction\nto rotctld <br>\nrotctld</b>(1) communicates to a client through a\n<small>TCP</small> network socket using text commands shared\nwith <b>rotctl</b>(1). The protocol is simple, commands are\nsent to rotctld on one line and rotctld responds to\n<b>get</b> commands with the requested values, one per line,\nwhen successful, otherwise, it responds with one line\n<b>RPRT</b> <i>x</i>, where <i>x</i> is a negative number\nindicating the Hamlib error code. Commands that do not\nreturn values respond with the line <b>RPRT</b> <i>x</i>,\nwhere <i>x</i> is zero when successful, otherwise a negative\nnumber indicating the Hamlib error code. Each line is\nterminated with a newline, <i>\\n</i> character. This\nprotocol is primarily for use by the <b>NET rotctl</b>\n(rotator model 2) backend.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A separate\nExtended Response protocol extends the above behavior by\nechoing the received command string as a header, any\nreturned values as a key: value pair, and the <b>RPRT</b>\n<i>x</i> string as the end of response marker which includes\nthe Hamlib success or failure value. Consider using this\nprotocol for clients that will interact with rotctld\ndirectly through a TCP network socket.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Multiple\nrotators can be controlled on different TCP ports by use of\nmultiple rotctld processes each listening on a unique TCP\nport. It is hoped that rotctld will be especially useful for\nclient authors using languages such as\n<a href=\"http://www.perl.org/\">Perl</a>,\n<a href=\"http://www.python.org/\">Python</a>,\n<a href=\"http://php.net/\">PHP</a>,\n<a href=\"http://www.ruby-lang.org/en/\">Ruby</a>,\n<a href=\"http://www.tcl.tk/\">TCL</a>, and others.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rotctld\nreference</b> <br>\nThe complete reference for rotctld can be found in the\n<b>rotctld</b>(1) manual page.</p>\n\n<h2>ampctl\n<a name=\"ampctl\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The\n<b>ampctld</b>(1) utility is a recent addition to the Hamlib\nutilities as a part of the 4.0 development cycle. It\nprovides network socket access for the Hamlib implementation\nof amplifier control and is similar in function to the\nnetwork utilities previously described. See the\n<b>ampctld</b>(1) manual page for the complete\nreference.</p>\n\n<h2>rigmem\n<a name=\"rigmem\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigmem</b>\nmay be used to backup and restore memory of radio\ntransceivers and receivers.</p>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Introduction\nto rigmem</b> <br>\nBackup and restore memory of radio transceivers and\nreceivers. <b>rigmem</b> accepts <i>command</i>s from the\ncommand line only.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigmem\nreference</b> <br>\nThe complete reference for rigmem can be found in the\n<b>rigmem</b>(1) manual page.</p>\n\n<h2>rigsmtr\n<a name=\"rigsmtr\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigsmtr</b>\nuses <b>Hamlib</b> to control a radio to measure S-Meter\nvalue versus antenna azimuth.</p>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Introduction\nto rigsmtr</b> <br>\nrigsmtr rotates the antenna from minimum azimuth to maximum\nazimuth. Every second, or <i>time_step</i> if specified in\nseconds, it retrieves the signal strength. Azimuth in\ndegrees and the corresponding S-Meter level in dB relative\nto S9 are then printed on <b>stdout</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">To work\ncorrectly, rigsmtr needs a radio that could measure S-Meter\nand a Hamlib backend that is able to retrieve it, connected\nto a Hamlib supported rotator.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigsmtr\nreference</b> <br>\nThe complete reference for rigsmtr can be found in the\n<b>rigsmtr</b>(1) manual page.</p>\n\n<h2>rigswr\n<a name=\"rigswr\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigswr</b>\nmay be used to measure VSWR vs frequency.</p>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Introduction\nto rigswr</b> <br>\nrigswr uses Hamlib to control a radio to measure VSWR\n(Voltage Standing Wave Ratio) over a frequency range.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">It scans\nfrequencies from <i>start_freq</i> to <i>stop_freq</i> with\nan optional increment of <i>freq_step</i> (default step is\n100 kHz). All values must be entered as an integer in Hertz\n(cycles per second).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nrigswr assumes that <i>start_freq is less than or equal to\nstop_freq</i>. If it is greater, rigswr will exit without\ndoing anything.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">For each\nfrequency, rigswr transmits at 25% of total POWER during 0.5\nsecond in CW mode and reads VSWR.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Frequency and\nthe corresponding VSWR are then printed on stdout.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">To work\ncorrectly, rigswr needs a radio that can measure VSWR and a\nHamlib backend that supports reading VSWR from the\nradio.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigswr\nreference</b> <br>\nThe complete reference for rigswr can be found in the\n<b>rigswr</b>(1) manual page.</p>\n\n<h2>COPYING\n<a name=\"COPYING\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This file is\npart of Hamlib, a project to develop a library that\nsimplifies radio and rotator control functions for\ndevelopers of software primarily of interest to radio\namateurs and those interested in radio communications.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Copyright\n&copy; 2001-2020 Hamlib Group (various contributors)</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This is free\nsoftware; see the file COPYING for copying conditions. There\nis NO warranty; not even for MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.</p>\n\n<h2>SEE ALSO\n<a name=\"SEE ALSO\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>less</b>(1),\n<b>more</b>(1), <b>ampctl</b>(1), <b>ampctld</b>(1),\n<b>rigctl</b>(1), <b>rigctld</b>(1), <b>rotctl</b>(1),\n<b>rotctld</b>(1), <b>rigmem</b>(1), <b>rigsmtr</b>(1),\n<b>rigswr</b>(1), <b>hamlib</b>(7),\n<b>hamlib-primer</b>(7)</p>\n\n<h2>COLOPHON\n<a name=\"COLOPHON\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Links to the\nHamlib Wiki, Git repository, release archives, and daily\nsnapshot archives are available via\n<a href=\"http://www.hamlib.org\">hamlib.org</a>.</p>\n<hr>\n</body>\n</html>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/doc/hamlib.7.html",
    "content": "<!-- Creator     : groff version 1.22.4 -->\n<!-- CreationDate: Wed May 18 09:31:53 2022 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<meta name=\"Content-Style\" content=\"text/css\">\n<style type=\"text/css\">\n       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       h1      { text-align: center }\n</style>\n<title>HAMLIB</title>\n\n</head>\n<body>\n\n<h1 align=\"center\">HAMLIB</h1>\n\n<a href=\"#NAME\">NAME</a><br>\n<a href=\"#DESCRIPTION\">DESCRIPTION</a><br>\n<a href=\"#COPYING\">COPYING</a><br>\n<a href=\"#SEE ALSO\">SEE ALSO</a><br>\n<a href=\"#COLOPHON\">COLOPHON</a><br>\n\n<hr>\n\n\n<h2>NAME\n<a name=\"NAME\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">hamlib - radio\nand rotator control library</p>\n\n<h2>DESCRIPTION\n<a name=\"DESCRIPTION\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>Ham\nRadio Control Libraries</b>, <b>Hamlib</b> for short, is a\ndevelopment effort to provide a consistent interface for\nprogrammers wanting to incorporate radio and rotator control\nin their programs.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Hamlib is not a\ncomplete user application, rather, it is a software layer\nintended to make controlling various radios and other\namateur radio station (shack) hardware much easier. Hamlib\nwill allow authors of software such as logging programs,\ndigital communications programs, or those wanting to develop\nthe ultimate radio control software to concentrate on the\nuser interface and the basic function of the program rather\nthan radio control. Hamlib consists of several parts, the\nprogramming library, utility programs, and library\ninterfaces to other programming languages.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Most recent\namateur radio transceivers allow external control of their\nfunctions through a serial interface. Unfortunately, control\ncommands are not always consistent across a\nmanufacturer&rsquo;s product line and each\nmanufacturer&rsquo;s product line differs greatly from its\ncompetitors.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Hamlib attempts\nto solve this problem by presenting a <i>virtual radio</i>\nto the programmer by providing an interface to actions such\nas setting a given Variable Frequency Oscillator&rsquo;s\n(VFO) frequency, setting the operating mode, querying the\nradio of its current status and settings, and giving the\napplication a list of a given radio&rsquo;s capabilities.\nUnfortunately, what can be accomplished by Hamlib is limited\nby the radios themselves and some offer very limited\ncapability.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Other devices,\nsuch as antenna rotators, can be placed into the Hamlib\ncontrol scheme. Other recent developments include network\ninterface servers and a USB interface capability. Language\nbindings are provided for <b>C</b>, <b>C++</b>, <b>Perl</b>,\n<b>Python</b>, <b>Lua</b> and <b>TCL</b> (more to come).</p>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Overview</b>\n<br>\nHamlib is a <i>front end</i> library providing a <b>C</b>\nlanguage Application Programming Interface (API) to\nprogrammers wishing to integrate radio or rotator control in\ntheir applications. Hamlib presents a <i>virtual radio</i>\nor <i>virtual rotator</i> that is a consistent interface to\nan application despite wide differences in radio and rotator\ninterfaces and capabilities.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The front end\nlibrary uses a number of <i>back end</i> libraries to\ntranslate from the front end to the various individual radio\nand rotator models. A back end library handles conversion of\nthe front end variables to the format needed by the radio or\nrotator device it controls. The back end libraries are\ngenerally grouped by manufacturer and in some cases by a\ncommon control protocol.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Hamlib also\nprovides an interface library for each of several common\n<i>scripting</i> languages such as\n<a href=\"http://www.perl.org\"><b>Perl</b></a>,\n<a href=\"http://www.python.org\"><b>Python</b></a>,\n<a href=\"https://www.lua.org\"><b>Lua</b></a>, and\n<a href=\"http://www.tcl.tk\"><b>TCL</b></a>. These language\n<i>bindings</i> are generated through the use of\n<a href=\"http://www.swig.org\"><b>SWIG</b></a>, a\nparser/generator for multiple language interfaces to a\n<b>C</b> library. A natively generated <b>C++</b> language\ninterface is also provided.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Besides the C\nand supplemental APIs, Hamlib also provides a pair of\nnetwork daemons that provide a text command based API for\ncontrolling an attached radio or rotator through a\n<b>TCP</b>/<b>IP</b> network connection. The daemons then\nhandle the interface to the Hamlib C API.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">More than one\ntype of device, radio or rotator, may be controlled at a\ntime, however, there is generally a limit of one device per\nserial port or other port.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Hamlib\nproject information</b> <br>\nThe Hamlib Project was founded by Frank Singleton,\nVK3FCS/KM5WS in July 2000. Shortly after Stephane Fillod,\nF8CFE, joined Frank on the Hamlib project and the API and\nimplementation development led to a reasonable level of\nmaturity in a few years. A major milestone was reached when\nHamlib 1.2.0 was released in March 2004. The API and\nApplication Binary Interface (ABI) interfaces have remained\nstable since that time up to the release of 3.3 in mid 2018.\nVersion 4.0 marks a major change to the ABI and certain\nchanges to the API.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Development\ncontinues through the major version number 4.<i>x</i> series\nand beyond. The 4.0 release marks a major change in the ABI\nwith several changes for additional modes and such that will\nrequire client programs that use the C ABI to be\nrecompiled/relinked, etc. Other goals include improving the\noverall documentation (this man page with more in progress),\nand other updates as warranted.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The Project is\nhosted by\n<a href=\"https://sourceforge.net\">SourceForge.net</a> at the\n<a href=\"https://sourceforge.net/projects/hamlib/\">Hamlib\nproject page</a>. As <a href=\"https://github.com\">GitHub</a>\nhas become a very popular project hosting site, Hamlib also\nhas a dedicated\n<a href=\"https://github.com/Hamlib/Hamlib\">GitHub project\npage</a>. GitHub also hosts the\n<a href=\"http://www.hamlib.org\">hamlib.org</a> Web site and\nthe <a href=\"https://github.com/Hamlib/Hamlib/wiki\">Hamlib\nWiki</a>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Development\ndiscussion and most user support take place on the\n<a href=\"https://sourceforge.net/p/hamlib/mailman/\">hamlib-developer\nmailing list</a>. While there are\n<a href=\"https://sourceforge.net/p/hamlib/discussion/\">SourceForge.net\ndiscussion forums</a>, they are rarely used and not as\nclosely read by the developers as the mailing list.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">For <i>source\ncode management</i>, the project uses\n<a href=\"http://git-scm.com/\"><b>Git</b></a>, a fast,\ndistributed content tracker. Among its features is that\nevery developer has the complete Hamlib development history\navailable locally. For more information on using Git, see\n<b>hamlib-git</b>(7).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nwhile a canonical Git repository is hosted at SourceForge,\nits availability is not essential to continued development\nalthough development work flows would change temporarily.\nSeveral developers find the GitHub Web interface easier to\nuse and lately development has centered around GitHub rather\nthan SourceForge.</p>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Applications\nusing Hamlib</b> <br>\nA number of application developers have taken advantage of\nHamlib&rsquo;s capabilities to implement radio and/or\nrotator control. While not exhaustive, a list is maintained\nat the Hamlib Wiki,\n<a href=\"https://github.com/Hamlib/Hamlib/wiki/Applications-and-Screen-Shots\">Applications/Screenshots</a>.\nDevelopers are encouraged to request their applications be\nadded to the gallery by way of the hamlib-developer mailing\nlist.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Using Hamlib\nwith your program</b> <br>\nAs with other Free Software projects, Hamlib relies heavily\non copyleft licensing to encourage development contributions\nand provide an open atmosphere for development.\nHamlib&rsquo;s source code is released under two licenses,\nthe <b>Lesser General Public License</b> (LGPL) version 2.1\nfor the library portion, and the <b>General Public\nLicense</b> (GPL) version 2 for the utility programs.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The LGPL allows\nthe library to be used (linked) by programs regardless of\ntheir individual license. However, any contributions to the\nlibrary source remain under a copyleft license which means\nthat the library source code may not be used in violation of\nthe terms of the LGPL (see the file <b>COPYING.LIB</b> in\nthe main source directory). Concepts learned by studying\nthese sources for the purpose of understanding the Hamlib\nAPI is not covered nor prohibited by the LGPL, however,\ndirectly copying LGPL sources into any work that is\nincompatible with the terms of the LGPL is a violation of\nthe terms of the license.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The utility\nprogram source files are released under the GPL. Any direct\nuse of these sources must be in a form that complies with\nthe terms of the GPL (see the file <b>COPYING</b> in the\nmain source directory). Concepts learned by studying these\nsources for the purpose of understanding the Hamlib API is\nnot covered nor prohibited by the GPL, however, directly\ncopying GPL sources into any work that is incompatible with\nthe terms of the GPL is a violation of the terms of the\nlicense.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Radios with\na clone capability</b> <br>\nHamlib&rsquo;s focus is on controlling radios that employ a\nport and command protocol for setting frequency, mode, VFO,\nPTT, etc. Most VHF/UHF transceivers do not employ such\ncontrol capability but do provide for cloning the memory\ncontents from radio to another of the same model. A related\nproject,\n<a href=\"http://chirp.danplanet.com\"><b>Chirp</b></a>, aims\nto support radios with such a clone capability. Please\ncontact the Chirp project for support of such radios.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Pronouncing\nHamlib</b> <br>\nEnglish speakers seem to have two alternate pronunciations\nfor our project:</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p>&bull;</p></td>\n<td width=\"5%\"></td>\n<td width=\"83%\">\n\n\n<p>Hamlib (Ham - lib, long &rsquo;i&rsquo;, as in library.)\nIPA style: /'ham l&Atilde;&brvbar;b/</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p>&bull;</p></td>\n<td width=\"5%\"></td>\n<td width=\"83%\">\n\n\n<p>Hamlib (Ham - lib, short &rsquo;i&rsquo;, as in\nliberty.) IPA style: /'ham l&Eacute;&ordf;b/</p></td></tr>\n</table>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Then again, we\nhave people who say Linux &ldquo;L-eye-nux&rdquo; and those\nwho say &ldquo;L-in-nux&rdquo;...</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">If you&rsquo;re\nFrench, the above does not apply! :-)</p>\n\n<h2>COPYING\n<a name=\"COPYING\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This file is\npart of Hamlib, a project to develop a library that\nsimplifies radio, rotator, and amplifier control functions\nfor developers of software primarily of interest to radio\namateurs and those interested in radio communications.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Copyright\n&copy; 2001-2020 Hamlib Group (various contributors)</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This is free\nsoftware; see the file COPYING for copying conditions. There\nis NO warranty; not even for MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.</p>\n\n<h2>SEE ALSO\n<a name=\"SEE ALSO\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>hamlib-primer</b>(7)</p>\n\n<h2>COLOPHON\n<a name=\"COLOPHON\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Links to the\nHamlib Wiki, Git repository, release archives, and daily\nsnapshot archives are available via\n<a href=\"http://www.hamlib.org\">hamlib.org</a>.</p>\n<hr>\n</body>\n</html>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/doc/rigctl.1.html",
    "content": "<!-- Creator     : groff version 1.22.4 -->\n<!-- CreationDate: Wed May 18 09:31:52 2022 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<meta name=\"Content-Style\" content=\"text/css\">\n<style type=\"text/css\">\n       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       h1      { text-align: center }\n</style>\n<title>RIGCTL</title>\n\n</head>\n<body>\n\n<h1 align=\"center\">RIGCTL</h1>\n\n<a href=\"#NAME\">NAME</a><br>\n<a href=\"#SYNOPSIS\">SYNOPSIS</a><br>\n<a href=\"#DESCRIPTION\">DESCRIPTION</a><br>\n<a href=\"#OPTIONS\">OPTIONS</a><br>\n<a href=\"#COMMANDS\">COMMANDS</a><br>\n<a href=\"#READLINE\">READLINE</a><br>\n<a href=\"#DIAGNOSTICS\">DIAGNOSTICS</a><br>\n<a href=\"#EXIT STATUS\">EXIT STATUS</a><br>\n<a href=\"#EXAMPLES\">EXAMPLES</a><br>\n<a href=\"#BUGS\">BUGS</a><br>\n<a href=\"#COPYING\">COPYING</a><br>\n<a href=\"#SEE ALSO\">SEE ALSO</a><br>\n<a href=\"#COLOPHON\">COLOPHON</a><br>\n\n<hr>\n\n\n<h2>NAME\n<a name=\"NAME\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">rigctl -\ncontrol radio transceivers and receivers</p>\n\n<h2>SYNOPSIS\n<a name=\"SYNOPSIS\"></a>\n</h2>\n\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"9%\">\n\n\n<p style=\"margin-top: 1em\"><b>rigctl</b></p></td>\n<td width=\"2%\"></td>\n<td width=\"78%\">\n\n\n<p style=\"margin-top: 1em\">[<b>-hiIlLnouV</b>]\n[<b>-m&nbsp;</b><i>id</i>] [<b>-r&nbsp;</b><i>device</i>]\n[<b>-p&nbsp;</b><i>device</i>]\n[<b>-d&nbsp;</b><i>device</i>] [<b>-P&nbsp;</b><i>type</i>]\n[<b>-D&nbsp;</b><i>type</i>] [<b>-s&nbsp;</b><i>baud</i>]\n[<b>-c&nbsp;</b><i>id</i>] [<b>-t&nbsp;</b><i>char</i>]\n[<b>-C&nbsp;</b><i>parm=val</i>] -Y [<b>-v</b>[<b>-Z</b>]]\n[<b>command</b>|<b>-</b>]</p> </td></tr>\n</table>\n\n<h2>DESCRIPTION\n<a name=\"DESCRIPTION\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Control radio\ntransceivers and receivers. <b>rigctl</b> accepts\n<b>commands</b> from the command line as well as in\ninteractive mode if none are provided on the command\nline.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Keep in mind\nthat Hamlib is BETA level software. While a lot of backend\nlibraries lack complete rig support, the basic functions are\nusually well supported.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please report\nbugs and provide feedback at the e-mail address given in the\n<b>BUGS</b> section below. Patches and code enhancements\nsent to the same address are welcome.</p>\n\n<h2>OPTIONS\n<a name=\"OPTIONS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This program\nfollows the usual GNU command line syntax. Short options\nthat take an argument may have the value follow immediately\nor be separated by a space. Long options starting with two\ndashes (&rsquo;-&rsquo;) require an &rsquo;=&rsquo; between\nthe option and any argument.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported options: <b><br>\n-m</b>, <b>--model</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Select radio model number.\nDefaults to dummy rig.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See model list\n(use &ldquo;rigctl -l&rdquo;).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\n<b>rigctl</b> (or third party software using the C API) will\nuse radio model 2 for <b>NET rigctl</b> (communicating with\n<b>rigctld</b>).</p>\n\n<p style=\"margin-left:11%;\"><b>-r</b>,\n<b>--rig-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the port connected to the radio.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Often a serial\nport, but could be a USB to serial adapter. Typically\n<i>/dev/ttyS0</i>, <i>/dev/ttyS1</i>, <i>/dev/ttyUSB0</i>,\netc. on Linux, <i>COM1</i>, <i>COM2</i>, etc. on MS Windows.\nThe BSD flavors and Mac OS/X have their own designations.\nSee your system&rsquo;s documentation.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Can be a\nnetwork address:port, e.g. 127.0.0.1:12345</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The special\nstring &ldquo;uh-rig&rdquo; may be given to enable micro-ham\ndevice support.</p>\n\n<p style=\"margin-left:11%;\"><b>-p</b>,\n<b>--ptt-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the Push-To-Talk device using a device file as\ndescribed above.</p>\n\n<p style=\"margin-left:11%;\"><b>-d</b>,\n<b>--dcd-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the Data Carrier Detect device using a device file\nas described above.</p>\n\n<p style=\"margin-left:11%;\"><b>-P</b>,\n<b>--ptt-type</b>=<i>type</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>type</i> of Push-To-Talk\ndevice.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Supported types\nare &rsquo;RIG&rsquo; (CAT command), &rsquo;DTR&rsquo;,\n&rsquo;RTS&rsquo;, &rsquo;PARALLEL&rsquo;,\n&rsquo;CM108&rsquo;, &rsquo;GPIO&rsquo;,\n&rsquo;GPION&rsquo;, &rsquo;NONE&rsquo;, overriding PTT type\ndefined in the rig&rsquo;s backend.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Some side\neffects of this command are that when type is set to DTR,\nread PTT state comes from the <b>Hamlib</b> frontend, not\nread from the radio. When set to NONE, PTT state cannot be\nread or set even if rig backend supports reading/setting PTT\nstatus from the rig.</p>\n\n<p style=\"margin-left:11%;\"><b>-D</b>,\n<b>--dcd-type</b>=<i>type</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>type</i> of Data Carrier\nDetect device.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Supported types\nare &rsquo;RIG&rsquo; (CAT command), &rsquo;DSR&rsquo;,\n&rsquo;CTS&rsquo;, &rsquo;CD&rsquo;, &rsquo;PARALLEL&rsquo;,\n&rsquo;CM108&rsquo;, &rsquo;GPIO&rsquo;,\n&rsquo;GPION&rsquo;, &rsquo;NONE&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>-s</b>,\n<b>--serial-speed</b>=<i>baud</i></p>\n\n<p style=\"margin-left:22%;\">Set serial speed to <i>baud</i>\nrate.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Uses maximum\nserial speed from radio backend capabilities (set by\n<b>-m</b> above) as the default.</p>\n\n<p style=\"margin-left:11%;\"><b>-c</b>,\n<b>--civaddr</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>id</i> as the CI-V\naddress to communicate with the rig.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Only useful for\nIcom and some Ten-Tec rigs.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe <i>id</i> is in decimal notation, unless prefixed by\n<i>0x</i>, in which case it is hexadecimal.</p>\n\n<p style=\"margin-left:11%;\"><b>-t</b>,\n<b>--send-cmd-term</b>=<i>char</i></p>\n\n<p style=\"margin-left:22%;\">Change the termination\n<i>char</i> for text protocol when using the <b>send_cmd</b>\ncommand.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The default\nvalue is ASCII CR (&rsquo;0x0D&rsquo;). ASCII non-printing\ncharacters can be given as the ASCII number in hexadecimal\nformat prepended with &ldquo;0x&rdquo;. You may pass an\nempty string for no termination char. The string\n&ldquo;-1&rdquo; tells <b>rigctl</b> to switch to binary\nprotocol. See the <b>send_cmd</b> command for further\nexplanation.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">For example, to\nspecify a command terminator for Kenwood style text commands\npass &ldquo;-t &rsquo;;&rsquo;&rdquo; to rigctl. See\n<b>EXAMPLE</b> below.</p>\n\n<p style=\"margin-left:11%;\"><b>-L</b>,\n<b>--show-conf</b></p>\n\n<p style=\"margin-left:22%;\">List all config parameters for\nthe radio defined with <b>-m</b> above. Note the dummy\ndevice has no serial parameters.</p>\n\n<p style=\"margin-left:11%;\"><b>-C</b>,\n<b>--set-conf</b>=<i>parm=val</i>[<i>,parm=val</i>]</p>\n\n<p style=\"margin-left:22%;\">Set radio configuration\nparameter(s), e.g. <i>stop_bits=2</i>.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use the\n<b>-L</b> option above for a list of configuration\nparameters for a given model number.</p>\n\n<p style=\"margin-left:11%;\"><b>-u</b>,\n<b>--dump-caps</b></p>\n\n<p style=\"margin-left:22%;\">Dump capabilities for the radio\ndefined with <b>-m</b> above and exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-l</b>, <b>--list</b></p>\n\n<p style=\"margin-left:22%;\">List all model numbers defined\nin <b>Hamlib</b> and exit.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The list is\nsorted by model number.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: In\nLinux the list can be scrolled back using\n<b>Shift-PageUp</b>/<b>Shift-PageDown</b>, or using the\nscrollbars of a virtual terminal in X or the cmd window in\nWindows. The output can be piped to <b>more</b>(1) or\n<b>less</b>(1), e.g. &ldquo;rigctl -l | more&rdquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>-o</b>, <b>--vfo</b></p>\n\n<p style=\"margin-left:22%;\">Enable vfo mode.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">An extra VFO\nargument will be required in front of each appropriate\ncommand (except <b>set_vfo</b>). Otherwise,\n&rsquo;currVFO&rsquo; is used when this option is not set\nand an extra VFO argument is not used.</p>\n\n<p style=\"margin-left:11%;\"><b>-n</b>,\n<b>--no-restore-ai</b></p>\n\n<p style=\"margin-left:22%;\">On exit <b>rigctl</b> restores\nthe state of auto information (AI) on the controlled\nrig.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">If this is not\ndesired, for example if you are using <b>rigctl</b> to turn\nAI mode on or off, pass this option.</p>\n\n<p style=\"margin-left:11%;\"><b>-i</b>,\n<b>--read-history</b></p>\n\n<p style=\"margin-left:22%;\">Read previously saved command\nand argument history from a file (default\n<i>$HOME/.rigctl_history</i>) for the current session.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Available when\n<b>rigctl</b> is built with Readline support (see READLINE\nbelow).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: To\nread a history file stored in another directory, set the\n<b>RIGCTL_HIST_DIR</b> environment variable, e.g.\n&ldquo;RIGCTL_HIST_DIR=~/tmp rigctl -i&rdquo;. When\nRIGCTL_HIST_DIR is not set, the value of <b>HOME</b> is\nused.</p>\n\n<p style=\"margin-left:11%;\"><b>-I</b>,\n<b>--save-history</b></p>\n\n<p style=\"margin-left:22%;\">Write current session (and\nprevious session(s), if <b>-i</b> option is given) command\nand argument history to a file (default\n<i>$HOME/.rigctl_history</i>) at the end of the current\nsession.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Complete\ncommands with arguments are saved as a single line to be\nrecalled and used or edited. Available when <b>rigctl</b> is\nbuilt with Readline support (see <b>READLINE</b> below).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: To\nwrite a history file in another directory, set the\n<b>RIGCTL_HIST_DIR</b> environment variable, e.g.\n&ldquo;RIGCTL_HIST_DIR=~/tmp rigctl -IRq. When\nRIGCTL_HIST_DIR is not set, the value of <b>HOME</b> is\nused.</p>\n\n<p style=\"margin-left:11%;\"><b>-v</b>, <b>--verbose</b></p>\n\n<p style=\"margin-left:22%;\">Set verbose mode, cumulative\n(see <b>DIAGNOSTICS</b> below).</p>\n\n\n<p style=\"margin-left:11%;\"><b>-Y</b>,<b>--ignore-err</b></p>\n\n<p style=\"margin-left:22%;\">Ignores rig open errors</p>\n\n<p style=\"margin-left:11%;\"><b>-Z</b>,\n<b>--debug-time-stamps</b></p>\n\n<p style=\"margin-left:22%;\">Enable time stamps for the\ndebug messages.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use only in\ncombination with the <b>-v</b> option as it generates no\noutput on its own.</p>\n\n<p style=\"margin-left:11%;\"><b>-h</b>, <b>--help</b></p>\n\n<p style=\"margin-left:22%;\">Show a summary of these options\nand exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-V</b>, <b>--version</b></p>\n\n<p style=\"margin-left:22%;\">Show version of <b>rigctl</b>\nand exit.</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>-</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>Stop option processing and read commands from standard\ninput.</p> </td></tr>\n</table>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See <b>Standard\nInput</b> below.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nSome options may not be implemented by a given backend and\nwill return an error. This is most likely to occur with the\n<b>--set-conf</b> and <b>--show-conf</b> options.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please note\nthat the backend for the radio to be controlled, or the\nradio itself may not support some commands. In that case,\nthe operation will fail with a <b>Hamlib</b> error code.</p>\n\n<h2>COMMANDS\n<a name=\"COMMANDS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Commands can be\nentered either as a single char, or as a long command name.\nThe commands are not prefixed with a dash as the options\nare. They may be typed in when in interactive mode or\nprovided as argument(s) in command line interface mode. In\ninteractive mode commands and their arguments may be entered\non a single line:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>M LSB\n2400</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Since most of\nthe <b>Hamlib</b> operations have a <b>set</b> and a\n<b>get</b> method, an upper case letter will often be used\nfor a <b>set</b> method whereas the corresponding lower case\nletter refers to the <b>get</b> method. Each operation also\nhas a long name; in interactive mode, prepend a backslash,\n&rsquo;\\&rsquo;, to enter a long command name.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Example: Use\n&ldquo;\\dump_caps&rdquo; to see what capabilities this radio\nand backend support.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe backend for the radio to be controlled, or the radio\nitself may not support some commands. In that case, the\noperation will fail with a <b>Hamlib</b> error message.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Standard\nInput</b> <br>\nAs an alternative to the <b>READLINE</b> interactive command\nentry or a single command for each run, <b>rigctl</b>\nfeatures a special option where a single dash\n(&rsquo;-&rsquo;) may be used to read commands from standard\ninput (<b>stdin</b>). Commands must be separated by\nwhitespace similar to the commands given on the command\nline. Comments may be added using the &rsquo;#&rsquo;\ncharacter, all text up until the end of the current line\nincluding the &rsquo;#&rsquo; character is ignored.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A simple\nexample (typed text is in bold):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>cat\n&lt;&lt;.EOF. &gt;cmds.txt</b> <br>\n&gt; <b># File of commands</b></p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"17%\"></td>\n<td width=\"-9%\"></td>\n<td width=\"7%\"></td>\n<td width=\"8%\">\n\n\n<p>&gt; <b>v f m</b></p></td>\n<td width=\"23%\"></td>\n<td width=\"8%\"></td>\n<td width=\"46%\">\n</td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"17%\"></td>\n<td width=\"-9%\"></td>\n<td width=\"7%\"></td>\n<td width=\"8%\">\n\n\n<p><b># query rig</b></p></td>\n<td width=\"23%\"></td>\n<td width=\"8%\"></td>\n<td width=\"46%\">\n</td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"17%\"></td>\n<td width=\"-9%\"></td>\n<td width=\"7%\"></td>\n<td width=\"8%\">\n\n\n<p>&gt; <b>V VFOB F 14200000 M CW 500</b></p></td>\n<td width=\"23%\"></td>\n<td width=\"8%\"></td>\n<td width=\"46%\">\n\n\n<p><b># set rig</b></p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"17%\"></td>\n<td width=\"-9%\"></td>\n<td width=\"7%\"></td>\n<td width=\"8%\">\n\n\n<p>&gt; <b>v f m</b></p></td>\n<td width=\"23%\"></td>\n<td width=\"8%\"></td>\n<td width=\"46%\">\n</td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"17%\"></td>\n<td width=\"-9%\"></td>\n<td width=\"7%\"></td>\n<td width=\"8%\">\n\n\n<p><b># query rig</b></p></td>\n<td width=\"23%\"></td>\n<td width=\"8%\"></td>\n<td width=\"46%\">\n</td></tr>\n</table>\n\n<p style=\"margin-left:17%;\">&gt; <b>.EOF.</b></p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rigctl -m1\n- &lt;cmds.txt</b></p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">v VFOA</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">f 145000000</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">m FM <br>\n15000</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">V VFOB <br>\nF 14200000 <br>\nM CW 500 <br>\nv VFOB</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">f 14200000</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">m CW <br>\n500</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigctl\nCommands</b> <br>\nA summary of commands is included below (In the case of\n<b>set</b> commands the quoted italicized string is replaced\nby the value in the description. In the case of <b>get</b>\ncommands the quoted italicized string is the key name of the\nvalue returned.): <b><br>\nQ</b>|<b>q</b>, exit rigctl</p>\n\n<p style=\"margin-left:22%;\">Exit rigctl in interactive\nmode.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">When rigctl is\ncontrolling the rig directly, will close the rig backend and\nport. When rigctl is connected to rigctld (radio model 2),\nthe TCP/IP connection to rigctld is closed and rigctld\nremains running, available for another TCP/IP network\nconnection.</p>\n\n<p style=\"margin-left:11%;\"><b>F</b>, <b>set_freq</b>\n'<i>Frequency</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Frequency</i>', in\nHz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Frequency may\nbe a floating point or integer value.</p>\n\n<p style=\"margin-left:11%;\"><b>f</b>, <b>get_freq</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Frequency</i>', in\nHz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns an\ninteger value and the VFO hamlib thinks is active. Note that\nsome rigs (e.g. all Icoms) cannot track current VFO so\nhamlib can get out of sync with the rig if the user presses\nrig buttons like the VFO.</p>\n\n<p style=\"margin-left:11%;\"><b>M</b>, <b>set_mode</b>\n'<i>Mode</i>' '<i>Passband</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Mode</i>' and\n'<i>Passband</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Mode is a\ntoken: &rsquo;USB&rsquo;, &rsquo;LSB&rsquo;,\n&rsquo;CW&rsquo;, &rsquo;CWR&rsquo;, &rsquo;RTTY&rsquo;,\n&rsquo;RTTYR&rsquo;, &rsquo;AM&rsquo;, &rsquo;FM&rsquo;,\n&rsquo;WFM&rsquo;, &rsquo;AMS&rsquo;, &rsquo;PKTLSB&rsquo;,\n&rsquo;PKTUSB&rsquo;, &rsquo;PKTFM&rsquo;,\n&rsquo;ECSSUSB&rsquo;, &rsquo;ECSSLSB&rsquo;,\n&rsquo;FA&rsquo;, &rsquo;SAM&rsquo;, &rsquo;SAL&rsquo;,\n&rsquo;SAH&rsquo;, &rsquo;DSB&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Passband is in\nHz as an integer, -1 for no change, or &rsquo;0&rsquo; for\nthe radio backend default.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Mode token will return a space separated list\nof radio backend supported Modes. Use this to determine the\nsupported Modes of a given radio backend.</p>\n\n<p style=\"margin-left:11%;\"><b>m</b>, <b>get_mode</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Mode</i>' and\n'<i>Passband</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns Mode as\na token and Passband in Hz as in <b>set_mode</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>V</b>, <b>set_vfo</b>\n'<i>VFO</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>VFO</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">VFO is a token:\n&rsquo;VFOA&rsquo;, &rsquo;VFOB&rsquo;, &rsquo;VFOC&rsquo;,\n&rsquo;currVFO&rsquo;, &rsquo;VFO&rsquo;, &rsquo;MEM&rsquo;,\n&rsquo;Main&rsquo;, &rsquo;Sub&rsquo;, &rsquo;TX&rsquo;,\n&rsquo;RX&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">In VFO mode\n(see <b>--vfo</b> option above) only a single VFO parameter\nis required:</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\">$ <b>rigctl -m\n229 -r /dev/rig -o</b></p>\n\n<p style=\"margin-left:28%; margin-top: 1em\">Rig command: V\n<br>\nVFO: VFOB</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\">Rig\ncommand:</p>\n\n<p style=\"margin-left:11%;\"><b>v</b>, <b>get_vfo</b></p>\n\n<p style=\"margin-left:22%;\">Get current '<i>VFO</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns VFO as\na token as in <b>set_vfo</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>J</b>, <b>set_rit</b>\n'<i>RIT</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>RIT</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">RIT is in Hz\nand can be + or -. A value of &rsquo;0&rsquo; resets RIT\n(Receiver Incremental Tuning) to match the VFO\nfrequency.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nRIT needs to be explicitly activated or deactivated with the\n<b>set_func</b> command. This allows setting the RIT offset\nindependently of its activation and allows RIT to remain\nactive while setting the offset to &rsquo;0&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>j</b>, <b>get_rit</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>RIT</i>' in Hz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returned value\nis an integer.</p>\n\n<p style=\"margin-left:11%;\"><b>Z</b>, <b>set_xit</b>\n'<i>XIT</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>XIT</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">XIT is in Hz\nand can be + or -. A value of &rsquo;0&rsquo; resets XIT\n(Transmitter Incremental Tuning) to match the VFO\nfrequency.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nXIT needs to be explicitly activated or deactivated with the\n<b>set_func</b> command. This allows setting the XIT offset\nindependently of its activation and allows XIT to remain\nactive while setting the offset to &rsquo;0&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>z</b>, <b>get_xit</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>XIT</i>' in Hz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returned value\nis an integer.</p>\n\n<p style=\"margin-left:11%;\"><b>T</b>, <b>set_ptt</b>\n'<i>PTT</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>PTT</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">PTT is a value:\n&rsquo;0&rsquo; (RX), &rsquo;1&rsquo; (TX), &rsquo;2&rsquo;\n(TX mic), or &rsquo;3&rsquo; (TX data).</p>\n\n<p style=\"margin-left:11%;\"><b>t</b>, <b>get_ptt</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>PTT</i>' status.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns PTT as\na value in <b>set_ptt</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>S</b>, <b>set_split_vfo</b>\n'<i>Split</i>' '<i>TX VFO</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Split</i>' mode.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Split is either\n&rsquo;0&rsquo; = Normal or &rsquo;1&rsquo; = Split.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Set '<i>TX\nVFO</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">TX VFO is a\ntoken: &rsquo;VFOA&rsquo;, &rsquo;VFOB&rsquo;,\n&rsquo;VFOC&rsquo;, &rsquo;currVFO&rsquo;,\n&rsquo;VFO&rsquo;, &rsquo;MEM&rsquo;, &rsquo;Main&rsquo;,\n&rsquo;Sub&rsquo;, &rsquo;TX&rsquo;, &rsquo;RX&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>s</b>,\n<b>get_split_vfo</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Split</i>' mode.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Split is either\n&rsquo;0&rsquo; = Normal or &rsquo;1&rsquo; = Split.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Get '<i>TX\nVFO</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">TX VFO is a\ntoken as in <b>set_split_vfo</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>I</b>, <b>set_split_freq</b>\n'<i>Tx Frequency</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>TX Frequency</i>', in\nHz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Frequency may\nbe a floating point or integer value.</p>\n\n<p style=\"margin-left:11%;\"><b>i</b>,\n<b>get_split_freq</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>TX Frequency</i>', in\nHz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns an\ninteger value.</p>\n\n<p style=\"margin-left:11%;\"><b>X</b>, <b>set_split_mode</b>\n'<i>TX Mode</i>' '<i>TX Passband</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>TX Mode</i>' and '<i>TX\nPassband</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">TX Mode is a\ntoken: &rsquo;USB&rsquo;, &rsquo;LSB&rsquo;,\n&rsquo;CW&rsquo;, &rsquo;CWR&rsquo;, &rsquo;RTTY&rsquo;,\n&rsquo;RTTYR&rsquo;, &rsquo;AM&rsquo;, &rsquo;FM&rsquo;,\n&rsquo;WFM&rsquo;, &rsquo;AMS&rsquo;, &rsquo;PKTLSB&rsquo;,\n&rsquo;PKTUSB&rsquo;, &rsquo;PKTFM&rsquo;,\n&rsquo;ECSSUSB&rsquo;, &rsquo;ECSSLSB&rsquo;,\n&rsquo;FA&rsquo;, &rsquo;SAM&rsquo;, &rsquo;SAL&rsquo;,\n&rsquo;SAH&rsquo;, &rsquo;DSB&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">TX Passband is\nin Hz as an integer, or &rsquo;0&rsquo; for the radio\nbackend default.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a TX Mode token will return a space separated\nlist of radio backend supported TX Modes. Use this to\ndetermine the supported TX Modes of a given radio\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>x</b>,\n<b>get_split_mode</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>TX Mode</i>' and '<i>TX\nPassband</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns TX Mode\nas a token and TX Passband in Hz as in <b>set_split_mode</b>\nabove.</p>\n\n<p style=\"margin-left:11%;\"><b>Y</b>, <b>set_ant</b>\n'<i>Antenna</i>' '<i>Option</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Antenna</i>' and\n'<i>Option</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Number is\n1-based antenna# (&rsquo;1&rsquo;, &rsquo;2&rsquo;,\n&rsquo;3&rsquo;, ...).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Option depends\non rig..for Icom it probably sets the Tx &amp; Rx antennas\nas in the IC-7851. See your manual for rig specific option\nvalues. Most rigs don&rsquo;t care about the option.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">For the\nIC-7851, FTDX3000 (and perhaps others) it means this:</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\">1 = TX/RX =\nANT1 FTDX3000=ANT1/ANT3 <br>\n2 = TX/RX = ANT2 FTDX3000=ANT2/ANT3 <br>\n3 = TX/RX = ANT3 FTDX3000=ANT3 <br>\n4 = TX/RX = ANT1/ANT4 <br>\n5 = TX/RX = ANT2/ANT4 <br>\n6 = TX/RX = ANT3/ANT4</p>\n\n<p style=\"margin-left:11%;\"><b>y</b>, <b>get_ant</b>\n'<i>Antenna</i>'</p>\n\n<p style=\"margin-left:22%;\">Get '<i>Antenna</i>'</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">A value of 0\nfor Antenna will return the current TX antenna</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">&gt; 0 is\n1-based antenna# (&rsquo;1&rsquo;, &rsquo;2&rsquo;,\n&rsquo;3&rsquo;, ...).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Option returned\ndepends on rig..for Icom is likely the RX only flag.</p>\n\n<p style=\"margin-left:11%;\"><b>b</b>, <b>send_morse</b>\n'<i>Morse</i>'</p>\n\n<p style=\"margin-left:22%;\">Send '<i>Morse</i>' symbols.\nFor Yaesu rigs use memory#.</p>\n\n<p style=\"margin-left:11%;\"><b>0x8b</b>, <b>get_dcd</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>DCD</i>' (squelch)\nstatus: &rsquo;0&rsquo; (Closed) or &rsquo;1&rsquo;\n(Open).</p>\n\n<p style=\"margin-left:11%;\"><b>R</b>, <b>set_rptr_shift</b>\n'<i>Rptr Shift</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Rptr Shift</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Rptr Shift is\none of: &rsquo;+&rsquo;, &rsquo;-&rsquo;, or something else\nfor &rsquo;None&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>r</b>,\n<b>get_rptr_shift</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Rptr Shift</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns\n&rsquo;+&rsquo;, &rsquo;-&rsquo;, or &rsquo;None&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>O</b>, <b>set_rptr_offs</b>\n'<i>Rptr Offset</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Rptr Offset</i>', in\nHz.</p>\n\n<p style=\"margin-left:11%;\"><b>o</b>,\n<b>get_rptr_offs</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Rptr Offset</i>', in\nHz.</p>\n\n<p style=\"margin-left:11%;\"><b>C</b>, <b>set_ctcss_tone</b>\n'<i>CTCSS Tone</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>CTCSS Tone</i>', in\ntenths of Hz.</p>\n\n<p style=\"margin-left:11%;\"><b>c</b>,\n<b>get_ctcss_tone</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>CTCSS Tone</i>', in\ntenths of Hz.</p>\n\n<p style=\"margin-left:11%;\"><b>D</b>, <b>set_dcs_code</b>\n'<i>DCS Code</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>DCS Code</i>'.</p>\n\n<p style=\"margin-left:11%;\"><b>d</b>,\n<b>get_dcs_code</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>DCS Code</i>'.</p>\n\n<p style=\"margin-left:11%;\"><b>0x90</b>,\n<b>set_ctcss_sql</b> '<i>CTCSS Sql</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>CTCSS Sql</i>' tone, in\ntenths of Hz.</p>\n\n<p style=\"margin-left:11%;\"><b>0x91</b>,\n<b>get_ctcss_sql</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>CTCSS Sql</i>' tone, in\ntenths of Hz.</p>\n\n<p style=\"margin-left:11%;\"><b>0x92</b>, <b>set_dcs_sql</b>\n'<i>DCS Sql</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>DCS Sql</i>' code.</p>\n\n<p style=\"margin-left:11%;\"><b>0x93</b>,\n<b>get_dcs_sql</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>DCS Sql</i>' <br>\ncode.</p>\n\n<p style=\"margin-left:11%;\"><b>N</b>, <b>set_ts</b>\n'<i>Tuning Step</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Tuning Step</i>', in\nHz.</p>\n\n<p style=\"margin-left:11%;\"><b>n</b>, <b>get_ts</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Tuning Step</i>', in\nHz.</p>\n\n<p style=\"margin-left:11%;\"><b>U</b>, <b>set_func</b>\n'<i>Func</i>' '<i>Func Status</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Func</i>' and '<i>Func\nStatus</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Func is a\ntoken: &rsquo;FAGC&rsquo;, &rsquo;NB&rsquo;,\n&rsquo;COMP&rsquo;, &rsquo;VOX&rsquo;, &rsquo;TONE&rsquo;,\n&rsquo;TSQL&rsquo;, &rsquo;SBKIN&rsquo;,\n&rsquo;FBKIN&rsquo;, &rsquo;ANF&rsquo;, &rsquo;NR&rsquo;,\n&rsquo;AIP&rsquo;, &rsquo;APF&rsquo;, &rsquo;MON&rsquo;,\n&rsquo;MN&rsquo;, &rsquo;RF&rsquo;, &rsquo;ARO&rsquo;,\n&rsquo;LOCK&rsquo;, &rsquo;MUTE&rsquo;, &rsquo;VSC&rsquo;,\n&rsquo;REV&rsquo;, &rsquo;SQL&rsquo;, &rsquo;ABM&rsquo;,\n&rsquo;BC&rsquo;, &rsquo;MBC&rsquo;, &rsquo;RIT&rsquo;,\n&rsquo;AFC&rsquo;, &rsquo;SATMODE&rsquo;,\n&rsquo;SCOPE&rsquo;, &rsquo;RESUME&rsquo;,\n&rsquo;TBURST&rsquo;, &rsquo;TUNER&rsquo;,\n&rsquo;XIT&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Func Status is\na non null value for &ldquo;activate&rdquo; or\n&ldquo;de-activate&rdquo; otherwise, much as TRUE/FALSE\ndefinitions in the C language (true is non-zero and false is\nzero, &rsquo;0&rsquo;).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Func token will return a space separated list\nof radio backend supported set function tokens. Use this to\ndetermine the supported functions of a given radio\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>u</b>, <b>get_func</b>\n'<i>Func</i>'</p>\n\n<p style=\"margin-left:22%;\">Get '<i>Func Status</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns Func\nStatus as a non null value for the Func token given as in\n<b>set_func</b> above.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Func token will return a space separated list\nof radio backend supported get function tokens. Use this to\ndetermine the supported functions of a given radio\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>L</b>, <b>set_level</b>\n'<i>Level</i>' '<i>Level Value</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Level</i>' and\n'<i>Level Value</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Level is a\ntoken: &rsquo;PREAMP&rsquo;, &rsquo;ATT&rsquo;,\n&rsquo;VOX&rsquo;, &rsquo;AF&rsquo;, &rsquo;RF&rsquo;,\n&rsquo;SQL&rsquo;, &rsquo;IF&rsquo;, &rsquo;APF&rsquo;,\n&rsquo;NR&rsquo;, &rsquo;PBT_IN&rsquo;,\n&rsquo;PBT_OUT&rsquo;, &rsquo;CWPITCH&rsquo;,\n&rsquo;RFPOWER&rsquo;, &rsquo;RFPOWER_METER&rsquo;,\n&rsquo;RFPOWER_METER_WATTS&rsquo;, &rsquo;MICGAIN&rsquo;,\n&rsquo;KEYSPD&rsquo;, &rsquo;NOTCHF&rsquo;,\n&rsquo;COMP&rsquo;, &rsquo;AGC&rsquo;, &rsquo;BKINDL&rsquo;,\n&rsquo;BAL&rsquo;, &rsquo;METER&rsquo;,\n&rsquo;VOXGAIN&rsquo;, &rsquo;ANTIVOX&rsquo;,\n&rsquo;SLOPE_LOW&rsquo;, &rsquo;SLOPE_HIGH&rsquo;,\n&rsquo;RAWSTR&rsquo;, &rsquo;SWR&rsquo;, &rsquo;ALC&rsquo;,\n&rsquo;STRENGTH&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The Level Value\ncan be a float or an integer value. For the AGC token the\nvalue is one of &rsquo;0&rsquo; = OFF, &rsquo;1&rsquo; =\nSUPERFAST, &rsquo;2&rsquo; = FAST, &rsquo;3&rsquo; = SLOW,\n&rsquo;4&rsquo; = USER, &rsquo;5&rsquo; = MEDIUM,\n&rsquo;6&rsquo; = AUTO.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Level token will return a space separated list\nof radio backend supported set level tokens. Use this to\ndetermine the supported levels of a given radio backend.</p>\n\n<p style=\"margin-left:11%;\"><b>l</b>, <b>get_level</b>\n'<i>Level</i>'</p>\n\n<p style=\"margin-left:22%;\">Get '<i>Level Value</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns Level\nValue as a float or integer for the Level token given as in\n<b>set_level</b> above.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Level token will return a space separated list\nof radio backend supported get level tokens. Use this to\ndetermine the supported levels of a given radio backend.</p>\n\n<p style=\"margin-left:11%;\"><b>P</b>, <b>set_parm</b>\n'<i>Parm</i>' '<i>Parm Value</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Parm</i>' and '<i>Parm\nValue</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Parm is a\ntoken: &rsquo;ANN&rsquo;, &rsquo;APO&rsquo;,\n&rsquo;BACKLIGHT&rsquo;, &rsquo;BEEP&rsquo;,\n&rsquo;TIME&rsquo;, &rsquo;BAT&rsquo;,\n&rsquo;KEYLIGHT&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Parm token will return a space separated list\nof radio backend supported set parameter tokens. Use this to\ndetermine the supported parameters of a given radio\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>p</b>, <b>get_parm</b>\n'<i>Parm</i>'</p>\n\n<p style=\"margin-left:22%;\">Get '<i>Parm Value</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns Parm\nValue as a float or integer for the Parm token given as in\n<b>set_parm</b> above.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Parm token will return a space separated list\nof radio backend supported get parameter tokens. Use this to\ndetermine the supported parameters of a given radio\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>B</b>, <b>set_bank</b>\n'<i>Bank</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Bank</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Sets the\ncurrent memory bank number.</p>\n\n<p style=\"margin-left:11%;\"><b>E</b>, <b>set_mem</b>\n'<i>Memory#</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Memory#</i>' channel\nnumber.</p>\n\n<p style=\"margin-left:11%;\"><b>e</b>, <b>get_mem</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Memory#</i>' channel\nnumber.</p>\n\n<p style=\"margin-left:11%;\"><b>G</b>, <b>vfo_op</b>\n'<i>Mem/VFO Op</i>'</p>\n\n<p style=\"margin-left:22%;\">Perform a '<i>Mem/VFO\nOp</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Mem/VFO\nOperation is a token: &rsquo;CPY&rsquo;, &rsquo;XCHG&rsquo;,\n&rsquo;FROM_VFO&rsquo;, &rsquo;TO_VFO&rsquo;,\n&rsquo;MCL&rsquo;, &rsquo;UP&rsquo;, &rsquo;DOWN&rsquo;,\n&rsquo;BAND_UP&rsquo;, &rsquo;BAND_DOWN&rsquo;,\n&rsquo;LEFT&rsquo;, &rsquo;RIGHT&rsquo;, &rsquo;TUNE&rsquo;,\n&rsquo;TOGGLE&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Mem/VFO Op token will return a space separated\nlist of radio backend supported Set Mem/VFO Op tokens. Use\nthis to determine the supported Mem/VFO Ops of a given radio\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>g</b>, <b>scan</b> '<i>Scan\nFct</i>' '<i>Scan Channel</i>'</p>\n\n<p style=\"margin-left:22%;\">Perform a '<i>Scan Fct</i>' on\na '<i>Scan Channel</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Scan Function\nis a token: &rsquo;STOP&rsquo;, &rsquo;MEM&rsquo;,\n&rsquo;SLCT&rsquo;, &rsquo;PRIO&rsquo;, &rsquo;PROG&rsquo;,\n&rsquo;DELTA&rsquo;, &rsquo;VFO&rsquo;,\n&rsquo;PLT&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Scan Channel is\nan integer (maybe?).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Scan Fct token will return a space separated\nlist of radio backend supported Scan Function tokens. Use\nthis to determine the supported Scan Functions of a given\nradio backend.</p>\n\n<p style=\"margin-left:11%;\"><b>H</b>, <b>set_channel</b>\n'<i>Channel</i>'</p>\n\n<p style=\"margin-left:22%;\">Set memory '<i>Channel</i>'\ndata.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Sets memory\nchannel information</p>\n\n<p style=\"margin-left:11%;\"><b>h</b>, <b>get_channel</b>\n'<i>readonly</i>'</p>\n\n<p style=\"margin-left:22%;\">Get channel memory.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">If readonly!=0\nthen only channel data is returned and rig remains on the\ncurrent channel. If readonly=0 then rig will be set to the\nchannel requested. data.</p>\n\n<p style=\"margin-left:11%;\"><b>A</b>, <b>set_trn</b>\n'<i>Transceive</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Transceive</i>'\nmode.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Transcieve is a\ntoken: &rsquo;OFF&rsquo;, &rsquo;RIG&rsquo;,\n&rsquo;POLL&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Transceive is a\nmechanism for radios to report events without a specific\ncall for information.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Transceive token will return a space separated\nlist of radio backend supported Transceive mode tokens. Use\nthis to determine the supported Transceive modes of a given\nradio backend.</p>\n\n<p style=\"margin-left:11%;\"><b>a</b>, <b>get_trn</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Transceive</i>'\nmode.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Transceive mode\n(reporting event) as in <b>set_trn</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>*</b>, <b>reset</b>\n'<i>Reset</i>'</p>\n\n<p style=\"margin-left:22%;\">Perform rig '<i>Reset</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Reset is a\nvalue: &rsquo;0&rsquo; = None, &rsquo;1&rsquo; = Software\nreset, &rsquo;2&rsquo; = VFO reset, &rsquo;4&rsquo; = Memory\nClear reset, &rsquo;8&rsquo; = Master reset.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Since these\nvalues are defined as a bitmask in\n<i>include/hamlib/rig.h</i>, it should be possible to AND\nthese values together to do multiple resets at once, if the\nbackend supports it or supports a reset action via rig\ncontrol at all.</p>\n\n<p style=\"margin-left:11%;\"><b>0x87</b>,\n<b>set_powerstat</b> '<i>Power Status</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Power Status</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Power Status is\na value: &rsquo;0&rsquo; = Power Off, &rsquo;1&rsquo; =\nPower On, &rsquo;2&rsquo; = Power Standby (enter standby),\n&rsquo;4&rsquo; = Power Operate (leave standby).</p>\n\n<p style=\"margin-left:11%;\"><b>0x88</b>,\n<b>get_powerstat</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Power Status</i>' as in\n<b>set_powerstat</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>0x89</b>, <b>send_dtmf</b>\n'<i>Digits</i>'</p>\n\n<p style=\"margin-left:22%;\">Set DTMF '<i>Digits</i>'.</p>\n\n<p style=\"margin-left:11%;\"><b>0x8a</b>,\n<b>recv_dtmf</b></p>\n\n<p style=\"margin-left:22%;\">Get DTMF '<i>Digits</i>'.</p>\n\n<p style=\"margin-left:11%;\"><b>_</b>, <b>get_info</b></p>\n\n<p style=\"margin-left:22%;\">Get misc information about the\nrig.</p>\n\n<p style=\"margin-left:11%;\"><b>0xf5</b>,\n<b>get_rig_info</b></p>\n\n<p style=\"margin-left:22%;\">Get misc information about the\nrig vfo status and other info.</p>\n\n<p style=\"margin-left:11%;\"><b>0xf3</b>,\n<b>get_vfo_info</b> '<i>VFO</i>'</p>\n\n<p style=\"margin-left:22%;\">Get misc information about a\nspecific vfo.</p>\n\n<p style=\"margin-left:11%;\"><b>dump_state</b></p>\n\n<p style=\"margin-left:22%;\">Return certain state\ninformation about the radio backend.</p>\n\n<p style=\"margin-left:11%;\"><b>1</b>, <b>dump_caps</b></p>\n\n<p style=\"margin-left:22%;\">Not a real rig remote command,\nit just dumps capabilities, i.e. what the backend knows\nabout this model, and what it can do.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">TODO: Ensure\nthis is in a consistent format so it can be read into a\nhash, dictionary, etc. Bug reports requested.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThis command will produce many lines of output so be very\ncareful if using a fixed length array! For example, running\nthis command against the Dummy backend results in over 5kB\nof text output.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">VFO parameter\nnot used in &rsquo;VFO mode&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>2</b>, <b>power2mW</b>\n'<i>Power [0.0..1.0]</i>' '<i>Frequency</i>'\n'<i>Mode</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Power mW</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Converts a\nPower value in a range of <i>0.0</i>...<i>1.0</i> to the\nreal transmit power in milli-Watts (integer).</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Frequency</i>'\nand '<i>Mode</i>' also need to be provided as output power\nmay vary according to these values.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">VFO parameter\nis not used in VFO mode.</p>\n\n<p style=\"margin-left:11%;\"><b>4</b>, <b>mW2power</b>\n'<i>Power mW</i>' '<i>Frequency</i>' '<i>Mode</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Power\n[0.0..1.0]</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Converts the\nreal transmit power in milli-Watts (integer) to a Power\nvalue in a range of <i>0.0 ... 1.0</i>.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Frequency</i>'\nand '<i>Mode</i>' also need to be provided as output power\nmay vary according to these values.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">VFO parameter\nis not used in VFO mode.</p>\n\n<p style=\"margin-left:11%;\"><b>w</b>, <b>send_cmd</b>\n'<i>Cmd</i>'</p>\n\n<p style=\"margin-left:22%;\">Send a raw command string to\nthe radio.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">This is useful\nfor testing and troubleshooting radio commands and responses\nwhen developing a backend.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">For binary\nprotocols enter values as \\0xAA\\0xBB. Expect a\n'<i>Reply</i>' from the radio which will likely be a binary\nblock or an ASCII string depending on the radio&rsquo;s\nprotocol (see your radio&rsquo;s computer control\ndocumentation).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The command\nterminator, set by the <b>send-cmd-term</b> option above,\nwill terminate each command string sent to the radio. This\ncharacter should not be a part of the input string.</p>\n\n<p style=\"margin-left:11%;\"><b>W</b>, <b>send_cmd_rx</b>\n'<i>Cmd</i><b>'</b> <i>nbytes</i></p>\n\n<p style=\"margin-left:22%;\">Send a raw command string to\nthe radio and expect nbytes returned.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">This is useful\nfor testing and troubleshooting radio commands and responses\nwhen developing a backend. If the # of bytes requested is\n&lt;= the number actually returned no timeout will\noccur.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The command\nargument can have no spaces in it. For binary protocols\nenter values as \\0xAA\\0xBB. Expect a '<i>Reply</i>' from the\nradio which will likely be a binary block or an ASCII string\ndepending on the radio&rsquo;s protocol (see your\nradio&rsquo;s computer control documentation).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The command\nterminator, set by the <b>send-cmd-term</b> option above,\nwill terminate each command string sent to the radio. This\ncharacter should not be a part of the input string.</p>\n\n<p style=\"margin-left:11%;\"><b>set_clock</b>\n'<i>DateTime</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>DateTime</i>'</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Sets rig clock\n-- note that some rigs do not handle seconds or\nmilliseconds. If you try to set sec/msec and rig does not\nsupport it you will get a debug warning message. Format is\nISO8601, <br>\nFormats accepted <br>\nYYYY-MM-DDTHH:MM:SS.SSS+ZZ (where +ZZ is either -/+ UTC\noffset) <br>\nYYYY-MM-DDTHH:MM:SS+ZZ <br>\nYYYY-MM-DDTHH:MM+ZZ <br>\nYYYY-MM-DD (sets date only) <br>\nNote: Icom rigs expect you to set local time and the hours\noff to UTC. <br>\nSo...4PM EST example would be 2021-12-01T16:00:00+05 <br>\nBut...if you want to display GMT you must set the clock for\nGMT with zero UTC offset. <br>\nHopefully Icom will allow displaying either clock in the\nfuture</p>\n\n<p style=\"margin-left:11%;\"><b>get_clock</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>RigTime</i>'</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Gets rig clock\n-- note that some rigs do not handle seconds or\nmilliseconds. Format is ISO8601 YYYY-MM-DDTHH:MM:SS.sss+ZZ\nwhere +ZZ is either -/+ UTC offset</p>\n\n<p style=\"margin-left:11%;\"><b>chk_vfo</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Status</i>'</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns Status\nas 1 if vfo option is on and 0 if vfo option is off. This\ncommand reflects the -o switch for rigctl and ritctld and\ncan be dynamically changed by <b>set_vfo_opt.</b></p>\n\n<p style=\"margin-left:11%;\"><b>set_vfo_opt</b>\n'<i>Status</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Status</i>'</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Set vfo option\nStatus 1=on or 0=off This is the same as using the -o switch\nfor rigctl and ritctld. This can be dyamically changed while\nrunning.</p>\n\n<p style=\"margin-left:11%;\"><b>pause</b>\n'<i>Seconds</i>'</p>\n\n<p style=\"margin-left:22%;\">Pause for the given whole\n(integer) number of '<i>Seconds</i>' before sending the next\ncommand to the radio.</p>\n\n<p style=\"margin-left:11%;\"><b>password</b>\n'<i>Password</i>'</p>\n\n<p style=\"margin-left:22%;\">Sends password to rigctld when\nrigctld has been secured with -A. Must use the 32-char\nshared secret from rigctld.</p>\n\n<h2>READLINE\n<a name=\"READLINE\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">If\n<b>Readline</b> library development files are found at\nconfigure time, <b>rigctl</b> will be conditonally built\nwith Readline support for command and argument entry.\nReadline command key bindings are at their defaults as\ndescribed in the\n<a href=\"https://tiswww.cwru.edu/php/chet/readline/rluserman.html\">Readline\nmanual</a>. <b>rigctl</b> sets the name &ldquo;rigctl&rdquo;\nwhich can be used in Conditional Init Constructs in the\nReadline Init File (<i>$HOME/.inputrc</i> by default) for\ncustom keybindings unique to <b>rigctl</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Command history\nis available with Readline support as described in the\n<a href=\"https://tiswww.case.edu/php/chet/readline/history.html#SEC1\">Readline\nHistory manual</a>. Command and argument strings are stored\nas single lines even when arguments are prompted for input\nindividually. Commands and arguments are not validated and\nare stored as typed with values separated by a single\nspace.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Normally\nsession history is not saved, however, use of either of the\n<b>-i</b>/<b>--read-history</b> or\n<b>-I</b>/<b>--save-history</b> options when starting\n<b>rigctl</b> will cause any previously saved history to be\nread in and/or the current and any previous session history\n(assuming the <b>-i</b> and <b>-I</b> options are given\ntogether) will be written out when <b>rigctl</b> is closed.\nEach option is mutually exclusive, i.e. either may be given\nseparately or in combination. This is useful to save a set\nof commands and then read them later but not write the\nmodified history for a consistent set of test commands in\ninteractive mode, for example.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">History is\nstored in <i>$HOME/.rigctl_history</i> by default although\nthe destination directory may be changed by setting the\n<b>RIGCTL_HIST_DIR</b> environment variable. When\nRIGCTL_HIST_DIR is unset, the value of the <b>HOME</b>\nenvironment variable is used instead. Only the destination\ndirectory may be changed at this time.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">If Readline\nsupport is not found at configure time the original internal\ncommand handler is used. Readline is not used for\n<b>rigctl</b> commands entered on the command line\nregardless if Readline support is built in or not.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nReadline support is not included in the MS Windows 32 or 64\nbit binary builds supplied by the Hamlib Project. Running\n<b>rigctl</b> on the MS Windows platform in the\n&rsquo;cmd&rsquo; shell does give session command line\nhistory, however, it is not saved to disk between\nsessions.</p>\n\n<h2>DIAGNOSTICS\n<a name=\"DIAGNOSTICS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>-v</b>,\n<b>--verbose</b> option allows different levels of\ndiagnostics to be output to <b>stderr</b> and correspond to\n-v for <b>BUG</b>, -vv for <b>ERR</b>, -vvv for <b>WARN</b>,\n-vvvv for <b>VERBOSE</b>, or -vvvvv for <b>TRACE</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A given verbose\nlevel is useful for providing needed debugging information\nto the email address below. For example, TRACE output shows\nall of the values sent to and received from the radio which\nis very useful for radio backend library development and may\nbe requested by the developers.</p>\n\n<h2>EXIT STATUS\n<a name=\"EXIT STATUS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigctl</b>\nexits with:</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>0</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if all operations completed normally;</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>1</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if there was an invalid command line option or\nargument;</p> </td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>2</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if an error was returned by <b>Hamlib</b>.</p></td></tr>\n</table>\n\n<h2>EXAMPLES\n<a name=\"EXAMPLES\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>rigctl</b> for a Yaesu FT-920 using a USB to serial\nadapter on Linux in interactive mode:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rigctl -m\n1014 -r /dev/ttyUSB1</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>rigctl</b> for a Yaesu FT-920 using COM1 on MS Windows\nwhile generating TRACE output to <i>stderr</i>:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">&gt; <b>rigctl\n-m 1014 -r COM1 -vvvvv</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>rigctl</b> for a Yaesu FT-920 using a USB to serial\nadapter while setting baud rate and stop bits:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rigctl -m\n1014 -r /dev/ttyUSB1 -s 4800 -C stop_bits=2</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>rigctl</b> for an Elecraft K3 using a USB to serial\nadapter while specifying a command terminator for the\n<b>w</b> command:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rigctl -m\n2029 -r /dev/ttyUSB0 -t&rsquo;;&rsquo;</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Connect to a\nrunning <b>rigctld</b> with radio model 2 (&ldquo;NET\nrigctl&rdquo;) on the local host and specifying the TCP\nport, setting frequency and mode:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rigctl -m\n2 -r localhost:4532 F 7253500 M LSB 0</b></p>\n\n<h2>BUGS\n<a name=\"BUGS\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>set_chan</b>\nhas no entry method as of yet, hence left unimplemented.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This almost\nempty section...</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Report bugs\nto:</p>\n\n\n<p style=\"margin-left:22%;\"><a href=\"mailto:hamlib-developer@lists.sourceforge.net\">Hamlib\nDeveloper mailing list </a></p>\n\n<h2>COPYING\n<a name=\"COPYING\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This file is\npart of Hamlib, a project to develop a library that\nsimplifies radio, rotator, and amplifier control functions\nfor developers of software primarily of interest to radio\namateurs and those interested in radio communications.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Copyright\n&copy; 2000-2011 Stephane Fillod <br>\nCopyright &copy; 2000-2018 the Hamlib Group (various\ncontributors) <br>\nCopyright &copy; 2010-2020 Nate Bargmann</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This is free\nsoftware; see the file COPYING for copying conditions. There\nis NO warranty; not even for MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.</p>\n\n<h2>SEE ALSO\n<a name=\"SEE ALSO\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>less</b>(1),\n<b>more</b>(1), <b>rigctld</b>(1), <b>hamlib</b>(7)</p>\n\n<h2>COLOPHON\n<a name=\"COLOPHON\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Links to the\nHamlib Wiki, Git repository, release archives, and daily\nsnapshot archives are available via\n<a href=\"http://www.hamlib.org\">hamlib.org</a>.</p>\n<hr>\n</body>\n</html>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/doc/rigctlcom.1.html",
    "content": "<!-- Creator     : groff version 1.22.4 -->\n<!-- CreationDate: Wed May 18 09:31:52 2022 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<meta name=\"Content-Style\" content=\"text/css\">\n<style type=\"text/css\">\n       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       h1      { text-align: center }\n</style>\n<title>RIGCTLCOM</title>\n\n</head>\n<body>\n\n<h1 align=\"center\">RIGCTLCOM</h1>\n\n<a href=\"#NAME\">NAME</a><br>\n<a href=\"#SYNOPSIS\">SYNOPSIS</a><br>\n<a href=\"#DESCRIPTION\">DESCRIPTION</a><br>\n<a href=\"#OPTIONS\">OPTIONS</a><br>\n<a href=\"#DIAGNOSTICS\">DIAGNOSTICS</a><br>\n<a href=\"#EXIT STATUS\">EXIT STATUS</a><br>\n<a href=\"#EXAMPLE\">EXAMPLE</a><br>\n<a href=\"#BUGS\">BUGS</a><br>\n<a href=\"#COPYING\">COPYING</a><br>\n<a href=\"#SEE ALSO\">SEE ALSO</a><br>\n<a href=\"#COLOPHON\">COLOPHON</a><br>\n\n<hr>\n\n\n<h2>NAME\n<a name=\"NAME\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">rigctlcom - COM\nport passthru as TS-2000 emulator to your rig</p>\n\n<h2>SYNOPSIS\n<a name=\"SYNOPSIS\"></a>\n</h2>\n\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"14%\">\n\n\n<p style=\"margin-top: 1em\"><b>rigctlcom</b></p></td>\n<td width=\"1%\"></td>\n<td width=\"74%\">\n\n\n<p style=\"margin-top: 1em\">[<b>-hlLuV</b>]\n[<b>-m&nbsp;</b><i>id</i>] [<b>-r&nbsp;</b><i>device</i>]\n[<b>-R&nbsp;</b><i>device</i>]\n[<b>-p&nbsp;</b><i>device</i>]\n[<b>-d&nbsp;</b><i>device</i>] [<b>-P&nbsp;</b><i>type</i>]\n[<b>-D&nbsp;</b><i>type</i>] [<b>-s&nbsp;</b><i>baud</i>]\n[<b>-S&nbsp;</b><i>baud</i>] [<b>-c&nbsp;</b><i>id</i>]\n[<b>-C&nbsp;</b><i>parm=val</i>] [<b>-B</b>]\n[<b>-v</b>[<b>-Z</b>]]</p> </td></tr>\n</table>\n\n<h2>DESCRIPTION\n<a name=\"DESCRIPTION\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Allows programs\nwhich can connect to TS-2000 via COM port to use Hamlib\nradios. Multiple programs can connect to the radio via FLRig\nor rigctld.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Virtual\nserial/COM ports must be set up first using <b>socat</b>(1)\nor similar on POSIX systems (BSD, Linux, OS/X). On Microsoft\nWindows available utilities are\n<a href=\"http://com0com.sourceforge.net\">com0com</a>,\n<a href=\"https://freevirtualserialports.com\">Free Virtual\nSerial Ports</a>, or\n<a href=\"http://www.virtualserialportdriver.com/\">VPSD</a>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please report\nbugs and provide feedback at the e-mail address given in the\n<b>BUGS</b> section below. Patches and code enhancements\nsent to the same address are welcome.</p>\n\n<h2>OPTIONS\n<a name=\"OPTIONS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This program\nfollows the usual GNU command line syntax. Short options\nthat take an argument may have the value follow immediately\nor be separated by a space. Long options starting with two\ndashes (&rsquo;-&rsquo;) require an &rsquo;=&rsquo; between\nthe option and any argument.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported options: <b><br>\n-m</b>, <b>--model</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Select radio model number.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See model list\n(use &ldquo;rigctlcom -l&rdquo;).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\n<b>rigctlcom</b> (or third party software using the C API)\nwill use radio model 2 for <b>NET rigctl</b> (communicating\nwith <b>rigctld</b>).</p>\n\n<p style=\"margin-left:11%;\"><b>-r</b>,\n<b>--rig-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the port connected to the radio.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Often a serial\nport, but could be a USB to serial adapter. Typically\n<i>/dev/ttyS0</i>, <i>/dev/ttyS1</i>, <i>/dev/ttyUSB0</i>,\netc. on Linux, <i>COM1</i>, <i>COM2</i>, etc. on MS Windows.\nThe BSD flavors and Mac OS/X have their own designations.\nSee your system&rsquo;s documentation.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The special\nstring &ldquo;uh-rig&rdquo; may be given to enable micro-ham\ndevice support.</p>\n\n<p style=\"margin-left:11%;\"><b>-R</b>,\n<b>--rig-file2</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of one of the virtual com ports -- your program will\nconnect to the other com port of the virtual pair.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Virtual serial\nports on POSIX systems can be done with <b>socat</b>(1):</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\">$ <b>socat -d\n-d pty,raw,echo=0 pty,raw,echo=0</b></p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See this\n<a href=\"https://stackoverflow.com/a/19733677\">Stackoverflow\nanswer for using socat</a>.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">On Microsoft\nWindows available utilities are com0com, Free Virtual Serial\nPorts, or VPSD (see <b>DESCRIPTION</b> above for WWW\nlinks).</p>\n\n<p style=\"margin-left:11%;\"><b>-p</b>,\n<b>--ptt-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the Push-To-Talk device using a device file as\ndescribed above.</p>\n\n<p style=\"margin-left:11%;\"><b>-d</b>,\n<b>--dcd-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the Data Carrier Detect device using a device file\nas described above.</p>\n\n<p style=\"margin-left:11%;\"><b>-P</b>,\n<b>--ptt-type</b>=<i>type</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>type</i> of Push-To-Talk\ndevice.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Supported types\nare &rsquo;RIG&rsquo; (CAT command), &rsquo;DTR&rsquo;,\n&rsquo;RTS&rsquo;, &rsquo;PARALLEL&rsquo;,\n&rsquo;NONE&rsquo;, overriding PTT type defined in the\nrig&rsquo;s backend.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Some side\neffects of this command are that when type is set to DTR,\nread PTT state comes from the <b>Hamlib</b> frontend, not\nread from the radio. When set to NONE, PTT state cannot be\nread or set even if rig backend supports reading/setting PTT\nstatus from the rig.</p>\n\n<p style=\"margin-left:11%;\"><b>-D</b>,\n<b>--dcd-type</b>=<i>type</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>type</i> of Data Carrier\nDetect device.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Supported types\nare &rsquo;RIG&rsquo; (CAT command), &rsquo;DSR&rsquo;,\n&rsquo;CTS&rsquo;, &rsquo;CD&rsquo;, &rsquo;PARALLEL&rsquo;,\n&rsquo;NONE&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>-s</b>,\n<b>--serial-speed</b>=<i>baud</i></p>\n\n<p style=\"margin-left:22%;\">Set serial speed to <i>baud</i>\nrate.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Uses maximum\nserial speed from radio backend capabilities (set by\n<b>-m</b> above) as the default.</p>\n\n<p style=\"margin-left:11%;\"><b>-S</b>,\n<b>--serial-speed2</b>=<i>baud</i></p>\n\n<p style=\"margin-left:22%;\">Set serial speed to <i>baud</i>\nrate for virtual com port (see <b>-R</b>).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Uses maximum\nserial speed from radio backend capabilities (set by\n<b>-m</b> above) as the default.</p>\n\n<p style=\"margin-left:11%;\"><b>-c</b>,\n<b>--civaddr</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>id</i> as the CI-V\naddress to communicate with the rig.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Only useful for\nIcom and some Ten-Tec rigs.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe <i>id</i> is in decimal notation, unless prefixed by\n<i>0x</i>, in which case it is hexadecimal.</p>\n\n<p style=\"margin-left:11%;\"><b>-L</b>,\n<b>--show-conf</b></p>\n\n<p style=\"margin-left:22%;\">List all config parameters for\nthe radio defined with <b>-m</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>-C</b>,\n<b>--set-conf</b>=<i>parm=val</i>[<i>,parm=val</i>]</p>\n\n<p style=\"margin-left:22%;\">Set radio configuration\nparameter(s), e.g. <i>stop_bits=2</i>.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use the\n<b>-L</b> option above for a list of configuration\nparameters for a given model number.</p>\n\n<p style=\"margin-left:11%;\"><b>-u</b>,\n<b>--dump-caps</b></p>\n\n<p style=\"margin-left:22%;\">Dump capabilities for the radio\ndefined with <b>-m</b> above and exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-l</b>, <b>--list</b></p>\n\n<p style=\"margin-left:22%;\">List all model numbers defined\nin <b>Hamlib</b> and exit.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The list is\nsorted by model number.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: In\nLinux the list can be scrolled back using\n<b>Shift-PageUp</b>/<b>Shift-PageDown</b>, or using the\nscrollbars of a virtual terminal in X or the cmd window in\nWindows. The output can be piped to <b>more</b>(1) or\n<b>less</b>(1), e.g. &ldquo;rigctl -l | more&rdquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>-n</b>,\n<b>--no-restore-ai</b></p>\n\n<p style=\"margin-left:22%;\"><b>rigctl</b> restores the\nstate of auto information (AI) on the controlled rig.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">If this is not\ndesired, for example if you are using <b>rigctl</b> to turn\nAI mode on or off, pass this option.</p>\n\n<p style=\"margin-left:11%;\"><b>-B</b>, <b>--mapa2b</b></p>\n\n<p style=\"margin-left:22%;\">Maps set_freq on VFOA to VFOB\ninstead. This allows using CW skimmer with the rig in split\nmode and clicking on a frequency in CW skimmer will set VFOB\nto the transmit frequency.</p>\n\n<p style=\"margin-left:11%;\"><b>-v</b>, <b>--verbose</b></p>\n\n<p style=\"margin-left:22%;\">Set verbose mode, cumulative\n(see <b>DIAGNOSTICS</b> below).</p>\n\n<p style=\"margin-left:11%;\"><b>-Z</b>,\n<b>--debug-time-stamps</b></p>\n\n<p style=\"margin-left:22%;\">Enable time stamps for the\ndebug messages.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use only in\ncombination with the <b>-v</b> option as it generates no\noutput on its own.</p>\n\n<p style=\"margin-left:11%;\"><b>-h</b>, <b>--help</b></p>\n\n<p style=\"margin-left:22%;\">Show a summary of these options\nand exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-V</b>, <b>--version</b></p>\n\n<p style=\"margin-left:22%;\">Show version of <b>rigctl</b>\nand exit.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nSome options may not be implemented by a given backend and\nwill return an error. This is most likely to occur with the\n<b>--set-conf</b> and <b>--show-conf</b> options.</p>\n\n<h2>DIAGNOSTICS\n<a name=\"DIAGNOSTICS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>-v</b>,\n<b>--verbose</b> option allows different levels of\ndiagnostics to be output to <b>stderr</b> and correspond to\n-v for <b>BUG</b>, -vv for <b>ERR</b>, -vvv for <b>WARN</b>,\n-vvvv for <b>VERBOSE</b>, or -vvvvv for <b>TRACE</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A given verbose\nlevel is useful for providing needed debugging information\nto the email address below. For example, TRACE output shows\nall of the values sent to and received from the radio which\nis very useful for radio backend library development and may\nbe requested by the developers.</p>\n\n<h2>EXIT STATUS\n<a name=\"EXIT STATUS\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigctlcom</b>\nexits with:</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>0</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if all operations completed normally;</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>1</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if there was an invalid command line option or\nargument;</p> </td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>2</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if an error was returned by <b>Hamlib</b>.</p></td></tr>\n</table>\n\n<h2>EXAMPLE\n<a name=\"EXAMPLE\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>rigctlcom</b> with FLRig as the Hamlib model and virtual\ncom port pair COM9/COM10, e.g.\n<a href=\"http://n1mm.hamdocs.com\">N1MM Logger+</a> attaching\nto COM10 and using the TS-2000 emulator attached to COM9\n(assumes virtual serial/COM ports pipe has been created with\nthe proper utility as described above):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rigctlcom\n-m 4 -R COM9 -S 115200</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The following\ndiagram shows the communications flow that allows N1MM\nLogger+ to communicate with a radio connected to Flrig:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">Flrig\n-&gt;&lt;- rigctlcom -&gt; COM9 &lt;- virt_port_pipe -&gt;\nCOM10 &lt;- N1MM</p>\n\n<h2>BUGS\n<a name=\"BUGS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Report bugs\nto:</p>\n\n\n<p style=\"margin-left:22%;\"><a href=\"mailto:hamlib-developer@lists.sourceforge.net\">Hamlib\nDeveloper mailing list </a></p>\n\n<h2>COPYING\n<a name=\"COPYING\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This file is\npart of Hamlib, a project to develop a library that\nsimplifies radio, rotator, and amplifier control functions\nfor developers of software primarily of interest to radio\namateurs and those interested in radio communications.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Copyright\n&copy; 2000-2011 Stephane Fillod <br>\nCopyright &copy; 2000-2018 the Hamlib Group (various\ncontributors) <br>\nCopyright &copy; 2010-2020 Nate Bargmann <br>\nCopyright &copy; 2019 Michael Black W9MDB</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This is free\nsoftware; see the file COPYING for copying conditions. There\nis NO warranty; not even for MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.</p>\n\n<h2>SEE ALSO\n<a name=\"SEE ALSO\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigctld</b>(1),\n<b>rigctl</b>(1), <b>socat</b>(1), <b>hamlib</b>(7)</p>\n\n<h2>COLOPHON\n<a name=\"COLOPHON\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Links to the\nHamlib Wiki, Git repository, release archives, and daily\nsnapshot archives are available via\n<a href=\"http://www.hamlib.org\">hamlib.org</a>.</p>\n<hr>\n</body>\n</html>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/doc/rigctld.1.html",
    "content": "<!-- Creator     : groff version 1.22.4 -->\n<!-- CreationDate: Wed May 18 09:31:52 2022 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<meta name=\"Content-Style\" content=\"text/css\">\n<style type=\"text/css\">\n       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       h1      { text-align: center }\n</style>\n<title>RIGCTLD</title>\n\n</head>\n<body>\n\n<h1 align=\"center\">RIGCTLD</h1>\n\n<a href=\"#NAME\">NAME</a><br>\n<a href=\"#SYNOPSIS\">SYNOPSIS</a><br>\n<a href=\"#DESCRIPTION\">DESCRIPTION</a><br>\n<a href=\"#OPTIONS\">OPTIONS</a><br>\n<a href=\"#COMMANDS\">COMMANDS</a><br>\n<a href=\"#PROTOCOL\">PROTOCOL</a><br>\n<a href=\"#DIAGNOSTICS\">DIAGNOSTICS</a><br>\n<a href=\"#EXAMPLES\">EXAMPLES</a><br>\n<a href=\"#SECURITY\">SECURITY</a><br>\n<a href=\"#BUGS\">BUGS</a><br>\n<a href=\"#COPYING\">COPYING</a><br>\n<a href=\"#SEE ALSO\">SEE ALSO</a><br>\n<a href=\"#COLOPHON\">COLOPHON</a><br>\n\n<hr>\n\n\n<h2>NAME\n<a name=\"NAME\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">rigctld - TCP\nradio control daemon</p>\n\n<h2>SYNOPSIS\n<a name=\"SYNOPSIS\"></a>\n</h2>\n\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"11%\">\n\n\n<p style=\"margin-top: 1em\"><b>rigctld</b></p></td>\n<td width=\"1%\"></td>\n<td width=\"77%\">\n\n\n<p style=\"margin-top: 1em\">[<b>-hlLouV</b>]\n[<b>-m&nbsp;</b><i>id</i>] [<b>-r&nbsp;</b><i>device</i>]\n[<b>-p&nbsp;</b><i>device</i>]\n[<b>-d&nbsp;</b><i>device</i>] [<b>-P&nbsp;</b><i>type</i>]\n[<b>-D&nbsp;</b><i>type</i>] [<b>-s&nbsp;</b><i>baud</i>]\n[<b>-c&nbsp;</b><i>id</i>] [<b>-T&nbsp;</b><i>IPADDR</i>]\n[<b>-t&nbsp;</b><i>number</i>]\n[<b>-C&nbsp;</b><i>parm=val</i>]\n[<b>-X&nbsp;</b><i>seconds</i>] [<b>-v</b>[<b>-Z</b>]]</p></td></tr>\n</table>\n\n<h2>DESCRIPTION\n<a name=\"DESCRIPTION\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The\n<b>rigctld</b> program is a radio control daemon that\nhandles client requests via TCP sockets. This allows\nmultiple user programs to share one radio (this needs more\ndevelopment). Multiple radios can be controlled on different\nTCP ports by use of multiple <b>rigctld</b> processes. Note\nthat multiple processes/ports are also necessary if some\nclients use extended responses and/or vfo mode. So up to 4\nprocesses/ports may be needed for each combination of\nextended response/vfo mode. The syntax of the commands are\nthe same as <b>rigctl</b>(1). It is hoped that\n<b>rigctld</b> will be especially useful for client authors\nusing languages such as Perl, Python, PHP, and others.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigctld</b>\ncommunicates to a client through a TCP socket using text\ncommands shared with <b>rigctl</b>. The protocol is simple,\ncommands are sent to <b>rigctld</b> on one line and\n<b>rigctld</b> responds to <b>get</b> commands with the\nrequested values, one per line, when successful, otherwise,\nit responds with one line &ldquo;RPRT x&rdquo;, where\n&rsquo;x&rsquo; is a negative number indicating the error\ncode. Commands that do not return values respond with the\nline &ldquo;RPRT x&rdquo;, where &rsquo;x&rsquo; is\n&rsquo;0&rsquo; when successful, otherwise is a regative\nnumber indicating the error code. Each line is terminated\nwith a newline &rsquo;\\n&rsquo; character. This protocol is\nprimarily for use by the <b>NET rigctl</b> (radio model 2)\nbackend.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A separate\n<b>Extended Response Protocol</b> extends the above behavior\nby echoing the received command string as a header, any\nreturned values as a key: value pair, and the &ldquo;RPRT\nx&rdquo; string as the end of response marker which includes\nthe <b>Hamlib</b> success or failure value. See the\n<b>PROTOCOL</b> section for details. Consider using this\nprotocol for clients that will interact with <b>rigctld</b>\ndirectly through a TCP socket.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Keep in mind\nthat Hamlib is BETA level software. While a lot of backend\nlibraries lack complete rotator support, the basic functions\nare usually well supported.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please report\nbugs and provide feedback at the e-mail address given in the\n<b>BUGS</b> section below. Patches and code enhancements\nsent to the same address are welcome.</p>\n\n<h2>OPTIONS\n<a name=\"OPTIONS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This program\nfollows the usual GNU command line syntax. Short options\nthat take an argument may have the value follow immediately\nor be separated by a space. Long options starting with two\ndashes (&rsquo;-&rsquo;) require an &rsquo;=&rsquo; between\nthe option and any argument.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported options: <b><br>\n-m</b>, <b>--model</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Select radio model number.\nDefaults to dummy device.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See model list\n(use &ldquo;rigctl -l&rdquo;).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\n<b>rigctl</b> (or third party software using the C API) will\nuse radio model 2 for <b>NET rigctl</b> (this model number\nis not used for rigctld even though it shows in the model\nlist).</p>\n\n<p style=\"margin-left:11%;\"><b>-r</b>,\n<b>--rig-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the port connected to the radio.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Often a serial\nport, but could be a USB to serial adapter. Typically\n<i>/dev/ttyS0</i>, <i>/dev/ttyS1</i>, <i>/dev/ttyUSB0</i>,\netc. on Linux, <i>COM1</i>, <i>COM2</i>, etc. on MS Windows.\nThe BSD flavors and Mac OS/X have their own designations.\nSee your system&rsquo;s documentation.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The special\nstring &ldquo;uh-rig&rdquo; may be given to enable micro-ham\ndevice support.</p>\n\n<p style=\"margin-left:11%;\"><b>-p</b>,\n<b>--ptt-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the Push-To-Talk device using a device file as\ndescribed above.</p>\n\n<p style=\"margin-left:11%;\"><b>-d</b>,\n<b>--dcd-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the Data Carrier Detect device using a device file\nas described above.</p>\n\n<p style=\"margin-left:11%;\"><b>-P</b>,\n<b>--ptt-type</b>=<i>type</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>type</i> of Push-To-Talk\ndevice.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Supported types\nare &rsquo;RIG&rsquo; (CAT command), &rsquo;DTR&rsquo;,\n&rsquo;RTS&rsquo;, &rsquo;PARALLEL&rsquo;,\n&rsquo;NONE&rsquo;, overriding PTT type defined in the\nrig&rsquo;s backend.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Some side\neffects of this command are that when type is set to DTR,\nread PTT state comes from the <b>Hamlib</b> frontend, not\nread from the radio. When set to NONE, PTT state cannot be\nread or set even if rig backend supports reading/setting PTT\nstatus from the rig.</p>\n\n<p style=\"margin-left:11%;\"><b>-D</b>,\n<b>--dcd-type</b>=<i>type</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>type</i> of Data Carrier\nDetect device.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Supported types\nare &rsquo;RIG&rsquo; (CAT command), &rsquo;DSR&rsquo;,\n&rsquo;CTS&rsquo;, &rsquo;CD&rsquo;, &rsquo;PARALLEL&rsquo;,\n&rsquo;NONE&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>-s</b>,\n<b>--serial-speed</b>=<i>baud</i></p>\n\n<p style=\"margin-left:22%;\">Set serial speed to <i>baud</i>\nrate.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Uses maximum\nserial speed from radio backend capabilities (set by\n<b>-m</b> above) as the default.</p>\n\n<p style=\"margin-left:11%;\"><b>-c</b>,\n<b>--civaddr</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>id</i> as the CI-V\naddress to communicate with the rig.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Only useful for\nIcom and some Ten-Tec rigs.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe <i>id</i> is in decimal notation, unless prefixed by\n<i>0x</i>, in which case it is hexadecimal.</p>\n\n<p style=\"margin-left:11%;\"><b>-T</b>,\n<b>--listen-addr</b>=<i>IPADDR</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>IPADDR</i> as the\nlistening IP address.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The default is\nANY (0.0.0.0).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>rigctld</b>\ncan be run and connected to like this:</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">rigctld</p>\n\n<p style=\"margin-left:28%;\">rigctl -m 2 <br>\nrigctl -m 2 -r 127.0.0.1 <br>\nrigctl -m 2 -r localhost <br>\nrigctl -m 2 -r 192.168.1.1 (local IP address) <br>\nrigctl -m 2 -r ::1 (on Linux rigctld doesn&rsquo;t listen on\nIPV6 by default)</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">rigctld -T\n127.0.0.1</p>\n\n<p style=\"margin-left:28%;\">rigctl -m 2 <br>\nrigctl -m 2 -r 127.0.0.1 <br>\nExceptions: <br>\nrigctl -m 2 -r localhost (only works if localhost is IPV4\naddress)</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">rigctld -T\nlocalhost (will set up on IPV4 or IPV6 based on\nlocalhost)</p>\n\n<p style=\"margin-left:28%;\">rigctl -m 2 <br>\nrigctl -m 2 -r localhost <br>\nrigctl -m 2 ip6-localhost <br>\nExceptions: <br>\nrigctl -m 2 -r 127.0.0.1 (only works if localhost is IPV4\naddress) <br>\nrigctl -m 2 -r ::1 (only works localhost is IPV6\naddress)</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">On Linux only\nwhere ip6-localhost is fe00::0: <br>\nrigctld -T ip6-localhost</p>\n\n<p style=\"margin-left:28%;\">rigctl -m 2 -r\nip6-localhost</p>\n\n<p style=\"margin-left:11%;\"><b>-t</b>,\n<b>--port</b>=<i>number</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>number</i> as the TCP\nlistening port.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The default is\n4532.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: As\n<b>rotctld</b>&rsquo;s default port is 4533, it is advisable\nto use even numbered ports for <b>rigctld</b>, e.g. 4532,\n4534, 4536, etc.</p>\n\n<p style=\"margin-left:11%;\"><b>-L</b>,\n<b>--show-conf</b></p>\n\n<p style=\"margin-left:22%;\">List all config parameters for\nthe radio defined with <b>-m</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>-C</b>,\n<b>--set-conf</b>=<i>parm=val</i>[<i>,parm=val</i>]</p>\n\n<p style=\"margin-left:22%;\">Set radio configuration\nparameter(s), e.g. <i>stop_bits=2</i>.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use the\n<b>-L</b> option above for a list of configuration\nparameters for a given model number.</p>\n\n<p style=\"margin-left:11%;\"><b>-u</b>,\n<b>--dump-caps</b></p>\n\n<p style=\"margin-left:22%;\">Dump capabilities for the radio\ndefined with <b>-m</b> above and exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-l</b>, <b>--list</b></p>\n\n<p style=\"margin-left:22%;\">List all model numbers defined\nin <b>Hamlib</b> and exit.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The list is\nsorted by model number.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: In\nLinux the list can be scrolled back using\n<b>Shift-PageUp</b>/<b>Shift-PageDown</b>, or using the\nscrollbars of a virtual terminal in X or the cmd window in\nWindows. The output can be piped to <b>more</b>(1) or\n<b>less</b>(1), e.g. &ldquo;rigctl -l | more&rdquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>-o</b>, <b>--vfo</b></p>\n\n<p style=\"margin-left:22%;\">Enable vfo mode.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">An extra VFO\nargument will be required in front of each appropriate\ncommand (except <b>set_vfo</b>). Otherwise,\n&rsquo;currVFO&rsquo; is used when this option is not set\nand an extra VFO argument is not used.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See\n<b>chk_vfo</b> below.</p>\n\n<p style=\"margin-left:11%;\"><b>-v</b>, <b>--verbose</b></p>\n\n<p style=\"margin-left:22%;\">Set verbose mode, cumulative\n(see <b>DIAGNOSTICS</b> below).</p>\n\n<p style=\"margin-left:11%;\"><b>-W</b>,\n<b>--twiddle_timeout</b>=<i>seconds</i></p>\n\n<p style=\"margin-left:22%;\">Enables timeout when VFO\ntwiddling is detected. Some functions will be ignored.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Should only be\nneeded when controlling software should be\n&quot;paused&quot; so you can move the VFO. Continuous\nmovement extends the timeout.</p>\n\n<p style=\"margin-left:11%;\"><b>-x</b>,\n<b>--uplink=option</b></p>\n\n<p style=\"margin-left:22%;\">1=Sub, 2=Main</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">For GPredict\nuse to ignore get_freq for Sub or Main uplink VFO.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Should allow\ndownlink VFO movement without confusing GPredict or the\nuplink</p>\n\n<p style=\"margin-left:11%;\"><b>-Z</b>,\n<b>--debug-time-stamps</b></p>\n\n<p style=\"margin-left:22%;\">Enable time stamps for the\ndebug messages.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use only in\ncombination with the <b>-v</b> option as it generates no\noutput on its own.</p>\n\n<p style=\"margin-left:11%;\"><b>-A</b>,\n<b>--password</b></p>\n\n<p style=\"margin-left:22%;\">Sets password on rigctld which\nrequires hamlib to use rig_set_password and rigctl to use\n\\password to access rigctld. A 32-char shared secret will be\ndisplayed to be used on the client side.</p>\n\n<p style=\"margin-left:11%;\"><b>-h</b>, <b>--help</b></p>\n\n<p style=\"margin-left:22%;\">Show a summary of these options\nand exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-V</b>, <b>--version</b></p>\n\n<p style=\"margin-left:22%;\">Show version of <b>rigctl</b>\nand exit.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nSome options may not be implemented by a given backend and\nwill return an error. This is most likely to occur with the\n<b>--set-conf</b> and <b>--show-conf</b> options.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please note\nthat the backend for the radio to be controlled, or the\nradio itself may not support some commands. In that case,\nthe operation will fail with a <b>Hamlib</b> error code.</p>\n\n<h2>COMMANDS\n<a name=\"COMMANDS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Commands can be\nsent over the TCP socket either as a single char, or as a\nlong command name plus the value(s) space separated on one\n&rsquo;\\n&rsquo; terminated line. See <b>PROTOCOL</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Since most of\nthe <b>Hamlib</b> operations have a <b>set</b> and a\n<b>get</b> method, an upper case letter will be used for\n<b>set</b> methods whereas the corresponding lower case\nletter refers to the <b>get</b> method. Each operation also\nhas a long name; prepend a backslash, &rsquo;\\&rsquo;, to\nsend a long command name.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Example (Perl):\n&ldquo;print $socket &quot;\\\\dump_caps\\n&quot;;&rdquo; to\nsee what the radio&rsquo;s backend can do (<b>Note</b>: In\nPerl and many other languages a &rsquo;\\&rsquo; will need to\nbe escaped with a preceding &rsquo;\\&rsquo; so that even\nthough two backslash characters appear in the code, only one\nwill be passed to <b>rigctld</b>. This is a possible bug,\nbeware!).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nThe backend for the radio to be controlled, or the radio\nitself may not support some commands. In that case, the\noperation will fail with a <b>Hamlib</b> error message.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported commands (In the case of <b>set</b>\ncommands the quoted italicized string is replaced by the\nvalue in the description. In the case of <b>get</b> commands\nthe quoted italicized string is the key name of the value\nreturned.): <b><br>\nF</b>, <b>set_freq</b> '<i>Frequency</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Frequency</i>', in\nHz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Frequency may\nbe a floating point or integer value.</p>\n\n<p style=\"margin-left:11%;\"><b>f</b>, <b>get_freq</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Frequency</i>', in\nHz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns an\ninteger value and the VFO hamlib thinks is active. Note that\nsome rigs (e.g. all Icoms) cannot track current VFO so\nhamlib can get out of sync with the rig if the user presses\nrig buttons like the VFO. rigctld clients should ensure they\nset the intended VFO or use vfo mode.</p>\n\n<p style=\"margin-left:11%;\"><b>M</b>, <b>set_mode</b>\n'<i>Mode</i>' '<i>Passband</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Mode</i>' and\n'<i>Passband</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Mode is a\ntoken: &rsquo;USB&rsquo;, &rsquo;LSB&rsquo;,\n&rsquo;CW&rsquo;, &rsquo;CWR&rsquo;, &rsquo;RTTY&rsquo;,\n&rsquo;RTTYR&rsquo;, &rsquo;AM&rsquo;, &rsquo;FM&rsquo;,\n&rsquo;WFM&rsquo;, &rsquo;AMS&rsquo;, &rsquo;PKTLSB&rsquo;,\n&rsquo;PKTUSB&rsquo;, &rsquo;PKTFM&rsquo;,\n&rsquo;ECSSUSB&rsquo;, &rsquo;ECSSLSB&rsquo;,\n&rsquo;FA&rsquo;, &rsquo;SAM&rsquo;, &rsquo;SAL&rsquo;,\n&rsquo;SAH&rsquo;, &rsquo;DSB&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Passband is in\nHz as an integer, or &rsquo;0&rsquo; for the radio backend\ndefault.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Mode token will return a space separated list\nof radio backend supported Modes. Use this to determine the\nsupported Modes of a given radio backend.</p>\n\n<p style=\"margin-left:11%;\"><b>m</b>, <b>get_mode</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Mode</i>' and\n'<i>Passband</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns Mode as\na token and Passband in Hz as in <b>set_mode</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>V</b>, <b>set_vfo</b>\n'<i>VFO</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>VFO</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">VFO is a token:\n&rsquo;VFOA&rsquo;, &rsquo;VFOB&rsquo;, &rsquo;VFOC&rsquo;,\n&rsquo;currVFO&rsquo;, &rsquo;VFO&rsquo;, &rsquo;MEM&rsquo;,\n&rsquo;Main&rsquo;, &rsquo;Sub&rsquo;, &rsquo;TX&rsquo;,\n&rsquo;RX&rsquo;, &rsquo;MainA&rsquo;, &rsquo;MainB&rsquo;,\n&rsquo;MainC&rsquo;, &rsquo;SubA&rsquo;, &rsquo;SubB&rsquo;\n&rsquo;SubC&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">In VFO mode\n(see <b>--vfo</b> option above) only a single VFO parameter\nis required:</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\">$ rigctl -m 229\n-r /dev/rig -o</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\">Rig command: V\n<br>\nVFO: VFOB</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\">Rig\ncommand:</p>\n\n<p style=\"margin-left:11%;\"><b>v</b>, <b>get_vfo</b></p>\n\n<p style=\"margin-left:22%;\">Get current '<i>VFO</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns VFO as\na token as in <b>set_vfo</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>J</b>, <b>set_rit</b>\n'<i>RIT</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>RIT</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">RIT is in Hz\nand can be + or -. A value of &rsquo;0&rsquo; resets RIT\n(Receiver Incremental Tuning) to match the VFO\nfrequency.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nRIT needs to be explicitly activated or deactivated with the\n<b>set_func</b> command. This allows setting the RIT offset\nindependently of its activation and allows RIT to remain\nactive while setting the offset to &rsquo;0&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>j</b>, <b>get_rit</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>RIT</i>' in Hz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returned value\nis an integer.</p>\n\n<p style=\"margin-left:11%;\"><b>Z</b>, <b>set_xit</b>\n'<i>XIT</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>XIT</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">XIT is in Hz\nand can be + or -. A value of &rsquo;0&rsquo; resets XIT\n(Transmitter Incremental Tuning) to match the VFO\nfrequency.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nXIT needs to be explicitly activated or deactivated with the\n<b>set_func</b> command. This allows setting the XIT offset\nindependently of its activation and allows XIT to remain\nactive while setting the offset to &rsquo;0&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>z</b>, <b>get_xit</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>XIT</i>' in Hz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returned value\nis an integer.</p>\n\n<p style=\"margin-left:11%;\"><b>T</b>, <b>set_ptt</b>\n'<i>PTT</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>PTT</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">PTT is a value:\n&rsquo;0&rsquo; (RX), &rsquo;1&rsquo; (TX), &rsquo;2&rsquo;\n(TX mic), or &rsquo;3&rsquo; (TX data).</p>\n\n<p style=\"margin-left:11%;\"><b>t</b>, <b>get_ptt</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>PTT</i>' status.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns PTT as\na value in <b>set_ptt</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>S</b>, <b>set_split_vfo</b>\n'<i>Split</i>' '<i>TX VFO</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Split</i>' mode.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Split is either\n&rsquo;0&rsquo; = Normal or &rsquo;1&rsquo; = Split.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Set '<i>TX\nVFO</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">TX VFO is a\ntoken: &rsquo;VFOA&rsquo;, &rsquo;VFOB&rsquo;,\n&rsquo;VFOC&rsquo;, &rsquo;currVFO&rsquo;,\n&rsquo;VFO&rsquo;, &rsquo;MEM&rsquo;, &rsquo;Main&rsquo;,\n&rsquo;Sub&rsquo;, &rsquo;TX&rsquo;, &rsquo;RX&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>s</b>,\n<b>get_split_vfo</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Split</i>' mode.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Split is either\n&rsquo;0&rsquo; = Normal or &rsquo;1&rsquo; = Split.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Get '<i>TX\nVFO</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">TX VFO is a\ntoken as in <b>set_split_vfo</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>I</b>, <b>set_split_freq</b>\n'<i>Tx Frequency</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>TX Frequency</i>', in\nHz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Frequency may\nbe a floating point or integer value.</p>\n\n<p style=\"margin-left:11%;\"><b>i</b>,\n<b>get_split_freq</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>TX Frequency</i>', in\nHz.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns an\ninteger value.</p>\n\n<p style=\"margin-left:11%;\"><b>X</b>, <b>set_split_mode</b>\n'<i>TX Mode</i>' '<i>TX Passband</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>TX Mode</i>' and '<i>TX\nPassband</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">TX Mode is a\ntoken: &rsquo;USB&rsquo;, &rsquo;LSB&rsquo;,\n&rsquo;CW&rsquo;, &rsquo;CWR&rsquo;, &rsquo;RTTY&rsquo;,\n&rsquo;RTTYR&rsquo;, &rsquo;AM&rsquo;, &rsquo;FM&rsquo;,\n&rsquo;WFM&rsquo;, &rsquo;AMS&rsquo;, &rsquo;PKTLSB&rsquo;,\n&rsquo;PKTUSB&rsquo;, &rsquo;PKTFM&rsquo;,\n&rsquo;ECSSUSB&rsquo;, &rsquo;ECSSLSB&rsquo;,\n&rsquo;FA&rsquo;, &rsquo;SAM&rsquo;, &rsquo;SAL&rsquo;,\n&rsquo;SAH&rsquo;, &rsquo;DSB&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">TX Passband is\nin Hz as an integer, or &rsquo;0&rsquo; for the radio\nbackend default.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a TX Mode token will return a space separated\nlist of radio backend supported TX Modes. Use this to\ndetermine the supported TX Modes of a given radio\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>x</b>,\n<b>get_split_mode</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>TX Mode</i>' and '<i>TX\nPassband</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns TX Mode\nas a token and TX Passband in Hz as in <b>set_split_mode</b>\nabove.</p>\n\n<p style=\"margin-left:11%;\"><b>Y</b>, <b>set_ant</b>\n'<i>Antenna</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Antenna</i>' number\n(&rsquo;0&rsquo;, &rsquo;1&rsquo;, &rsquo;2&rsquo;,\n...).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Option depends\non rig..for Icom it probably sets the Tx &amp; Rx antennas\nas in the IC-7851. See your manual for rig specific option\nvalues. Most rigs don&rsquo;t care about the option.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">For the IC-7851\n(and perhaps others) it means this:</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\">1 = TX/RX =\nANT1 <br>\n2 = TX/RX = ANT2 <br>\n3 = TX/RX = ANT3 <br>\n4 = TX/RX = ANT1/ANT4 <br>\n5 = TX/RX = ANT2/ANT4 <br>\n6 = TX/RX = ANT3/ANT4</p>\n\n<p style=\"margin-left:11%;\"><b>y</b>, <b>get_ant</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Antenna</i>' number\n(&rsquo;0&rsquo;, &rsquo;1&rsquo;, &rsquo;2&rsquo;,\n...).</p>\n\n<p style=\"margin-left:11%;\"><b>b</b>, <b>send_morse</b>\n'<i>Morse</i>'</p>\n\n<p style=\"margin-left:22%;\">Send '<i>Morse</i>'\nsymbols.</p>\n\n<p style=\"margin-left:11%;\"><b>0x8b</b>, <b>get_dcd</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>DCD</i>' (squelch)\nstatus: &rsquo;0&rsquo; (Closed) or &rsquo;1&rsquo;\n(Open).</p>\n\n<p style=\"margin-left:11%;\"><b>R</b>, <b>set_rptr_shift</b>\n'<i>Rptr Shift</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Rptr Shift</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Rptr Shift is\none of: &rsquo;+&rsquo;, &rsquo;-&rsquo;, or something else\nfor &rsquo;None&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>r</b>,\n<b>get_rptr_shift</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Rptr Shift</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns\n&rsquo;+&rsquo;, &rsquo;-&rsquo;, or &rsquo;None&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>O</b>, <b>set_rptr_offs</b>\n'<i>Rptr Offset</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Rptr Offset</i>', in\nHz.</p>\n\n<p style=\"margin-left:11%;\"><b>o</b>,\n<b>get_rptr_offs</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Rptr Offset</i>', in\nHz.</p>\n\n<p style=\"margin-left:11%;\"><b>C</b>, <b>set_ctcss_tone</b>\n'<i>CTCSS Tone</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>CTCSS Tone</i>', in\ntenths of Hz.</p>\n\n<p style=\"margin-left:11%;\"><b>c</b>,\n<b>get_ctcss_tone</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>CTCSS Tone</i>', in\ntenths of Hz.</p>\n\n<p style=\"margin-left:11%;\"><b>D</b>, <b>set_dcs_code</b>\n'<i>DCS Code</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>DCS Code</i>'.</p>\n\n<p style=\"margin-left:11%;\"><b>d</b>,\n<b>get_dcs_code</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>DCS Code</i>'.</p>\n\n<p style=\"margin-left:11%;\"><b>0x90</b>,\n<b>set_ctcss_sql</b> '<i>CTCSS Sql</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>CTCSS Sql</i>' tone, in\ntenths of Hz.</p>\n\n<p style=\"margin-left:11%;\"><b>0x91</b>,\n<b>get_ctcss_sql</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>CTCSS Sql</i>' tone, in\ntenths of Hz.</p>\n\n<p style=\"margin-left:11%;\"><b>0x92</b>, <b>set_dcs_sql</b>\n'<i>DCS Sql</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>DCS Sql</i>' code.</p>\n\n<p style=\"margin-left:11%;\"><b>0x93</b>,\n<b>get_dcs_sql</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>DCS Sql</i>' <br>\ncode.</p>\n\n<p style=\"margin-left:11%;\"><b>N</b>, <b>set_ts</b>\n'<i>Tuning Step</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Tuning Step</i>', in\nHz.</p>\n\n<p style=\"margin-left:11%;\"><b>n</b>, <b>get_ts</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Tuning Step</i>', in\nHz.</p>\n\n<p style=\"margin-left:11%;\"><b>U</b>, <b>set_func</b>\n'<i>Func</i>' '<i>Func Status</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Func</i>' and '<i>Func\nStatus</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Func is a\ntoken: &rsquo;FAGC&rsquo;, &rsquo;NB&rsquo;,\n&rsquo;COMP&rsquo;, &rsquo;VOX&rsquo;, &rsquo;TONE&rsquo;,\n&rsquo;TSQL&rsquo;, &rsquo;SBKIN&rsquo;,\n&rsquo;FBKIN&rsquo;, &rsquo;ANF&rsquo;, &rsquo;NR&rsquo;,\n&rsquo;AIP&rsquo;, &rsquo;APF&rsquo;, &rsquo;MON&rsquo;,\n&rsquo;MN&rsquo;, &rsquo;RF&rsquo;, &rsquo;ARO&rsquo;,\n&rsquo;LOCK&rsquo;, &rsquo;MUTE&rsquo;, &rsquo;VSC&rsquo;,\n&rsquo;REV&rsquo;, &rsquo;SQL&rsquo;, &rsquo;ABM&rsquo;,\n&rsquo;BC&rsquo;, &rsquo;MBC&rsquo;, &rsquo;RIT&rsquo;,\n&rsquo;AFC&rsquo;, &rsquo;SATMODE&rsquo;,\n&rsquo;SCOPE&rsquo;, &rsquo;RESUME&rsquo;,\n&rsquo;TBURST&rsquo;, &rsquo;TUNER&rsquo;,\n&rsquo;XIT&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Func Status is\na non null value for &ldquo;activate&rdquo; or\n&ldquo;de-activate&rdquo; otherwise, much as TRUE/FALSE\ndefinitions in the C language (true is non-zero and false is\nzero, &rsquo;0&rsquo;).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Func token will return a space separated list\nof radio backend supported set function tokens. Use this to\ndetermine the supported functions of a given radio\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>u</b>, <b>get_func</b>\n'<i>Func</i>'</p>\n\n<p style=\"margin-left:22%;\">Get '<i>Func Status</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns Func\nStatus as a non null value for the Func token given as in\n<b>set_func</b> above.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Func token will return a space separated list\nof radio backend supported get function tokens. Use this to\ndetermine the supported functions of a given radio\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>L</b>, <b>set_level</b>\n'<i>Level</i>' '<i>Level Value</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Level</i>' and\n'<i>Level Value</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Level is a\ntoken: &rsquo;PREAMP&rsquo;, &rsquo;ATT&rsquo;,\n&rsquo;VOX&rsquo;, &rsquo;AF&rsquo;, &rsquo;RF&rsquo;,\n&rsquo;SQL&rsquo;, &rsquo;IF&rsquo;, &rsquo;APF&rsquo;,\n&rsquo;NR&rsquo;, &rsquo;PBT_IN&rsquo;,\n&rsquo;PBT_OUT&rsquo;, &rsquo;CWPITCH&rsquo;,\n&rsquo;RFPOWER&rsquo;, &rsquo;RFPOWER_METER&rsquo;,\n&rsquo;RFPOWER_METER_WATTS&rsquo;, &rsquo;MICGAIN&rsquo;,\n&rsquo;KEYSPD&rsquo;, &rsquo;NOTCHF&rsquo;,\n&rsquo;COMP&rsquo;, &rsquo;AGC&rsquo;, &rsquo;BKINDL&rsquo;,\n&rsquo;BAL&rsquo;, &rsquo;METER&rsquo;,\n&rsquo;VOXGAIN&rsquo;, &rsquo;ANTIVOX&rsquo;,\n&rsquo;SLOPE_LOW&rsquo;, &rsquo;SLOPE_HIGH&rsquo;,\n&rsquo;RAWSTR&rsquo;, &rsquo;SWR&rsquo;, &rsquo;ALC&rsquo;,\n&rsquo;STRENGTH&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The Level Value\ncan be a float or an integer value. For the AGC token the\nvalue is one of &rsquo;0&rsquo; = OFF, &rsquo;1&rsquo; =\nSUPERFAST, &rsquo;2&rsquo; = FAST, &rsquo;3&rsquo; = SLOW,\n&rsquo;4&rsquo; = USER, &rsquo;5&rsquo; = MEDIUM,\n&rsquo;6&rsquo; = AUTO.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Level token will return a space separated list\nof radio backend supported set level tokens. Use this to\ndetermine the supported levels of a given radio backend.</p>\n\n<p style=\"margin-left:11%;\"><b>l</b>, <b>get_level</b>\n'<i>Level</i>'</p>\n\n<p style=\"margin-left:22%;\">Get '<i>Level Value</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns Level\nValue as a float or integer for the Level token given as in\n<b>set_level</b> above.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Level token will return a space separated list\nof radio backend supported get level tokens. Use this to\ndetermine the supported levels of a given radio backend.</p>\n\n<p style=\"margin-left:11%;\"><b>P</b>, <b>set_parm</b>\n'<i>Parm</i>' '<i>Parm Value</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Parm</i>' and '<i>Parm\nValue</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Parm is a\ntoken: &rsquo;ANN&rsquo;, &rsquo;APO&rsquo;,\n&rsquo;BACKLIGHT&rsquo;, &rsquo;BEEP&rsquo;,\n&rsquo;TIME&rsquo;, &rsquo;BAT&rsquo;,\n&rsquo;KEYLIGHT&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Parm token will return a space separated list\nof radio backend supported set parameter tokens. Use this to\ndetermine the supported parameters of a given radio\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>p</b>, <b>get_parm</b>\n'<i>Parm</i>'</p>\n\n<p style=\"margin-left:22%;\">Get '<i>Parm Value</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns Parm\nValue as a float or integer for the Parm token given as in\n<b>set_parm</b> above.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Parm token will return a space separated list\nof radio backend supported get parameter tokens. Use this to\ndetermine the supported parameters of a given radio\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>B</b>, <b>set_bank</b>\n'<i>Bank</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Bank</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Sets the\ncurrent memory bank number.</p>\n\n<p style=\"margin-left:11%;\"><b>E</b>, <b>set_mem</b>\n'<i>Memory#</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Memory#</i>' channel\nnumber.</p>\n\n<p style=\"margin-left:11%;\"><b>e</b>, <b>get_mem</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Memory#</i>' channel\nnumber.</p>\n\n<p style=\"margin-left:11%;\"><b>G</b>, <b>vfo_op</b>\n'<i>Mem/VFO Op</i>'</p>\n\n<p style=\"margin-left:22%;\">Perform a '<i>Mem/VFO\nOp</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Mem/VFO\nOperation is a token: &rsquo;CPY&rsquo;, &rsquo;XCHG&rsquo;,\n&rsquo;FROM_VFO&rsquo;, &rsquo;TO_VFO&rsquo;,\n&rsquo;MCL&rsquo;, &rsquo;UP&rsquo;, &rsquo;DOWN&rsquo;,\n&rsquo;BAND_UP&rsquo;, &rsquo;BAND_DOWN&rsquo;,\n&rsquo;LEFT&rsquo;, &rsquo;RIGHT&rsquo;, &rsquo;TUNE&rsquo;,\n&rsquo;TOGGLE&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Mem/VFO Op token will return a space separated\nlist of radio backend supported Set Mem/VFO Op tokens. Use\nthis to determine the supported Mem/VFO Ops of a given radio\nbackend.</p>\n\n<p style=\"margin-left:11%;\"><b>g</b>, <b>scan</b> '<i>Scan\nFct</i>' '<i>Scan Channel</i>'</p>\n\n<p style=\"margin-left:22%;\">Perform a '<i>Scan Fct</i>' on\na '<i>Scan Channel</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Scan Function\nis a token: &rsquo;STOP&rsquo;, &rsquo;MEM&rsquo;,\n&rsquo;SLCT&rsquo;, &rsquo;PRIO&rsquo;, &rsquo;PROG&rsquo;,\n&rsquo;DELTA&rsquo;, &rsquo;VFO&rsquo;,\n&rsquo;PLT&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Scan Channel is\nan integer (maybe?).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Scan Fct token will return a space separated\nlist of radio backend supported Scan Function tokens. Use\nthis to determine the supported Scan Functions of a given\nradio backend.</p>\n\n<p style=\"margin-left:11%;\"><b>H</b>, <b>set_channel</b>\n'<i>Channel</i>'</p>\n\n<p style=\"margin-left:22%;\">Set memory '<i>Channel</i>'\ndata.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Not implemented\nyet.</p>\n\n<p style=\"margin-left:11%;\"><b>h</b>, <b>get_channel</b>\n'<i>readonly</i>'</p>\n\n<p style=\"margin-left:22%;\">Get channel memory.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">If readonly!=0\nthen only channel data is returned and rig remains on the\ncurrent channel. If readonly=0 then rig will be set to the\nchannel requested. data.</p>\n\n<p style=\"margin-left:11%;\"><b>A</b>, <b>set_trn</b>\n'<i>Transceive</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Transceive</i>'\nmode.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Transcieve is a\ntoken: &rsquo;OFF&rsquo;, &rsquo;RIG&rsquo;,\n&rsquo;POLL&rsquo;.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Transceive is a\nmechanism for radios to report events without a specific\ncall for information.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nPassing a &rsquo;?&rsquo; (query) as the first argument\ninstead of a Transceive token will return a space separated\nlist of radio backend supported Transceive mode tokens. Use\nthis to determine the supported Transceive modes of a given\nradio backend.</p>\n\n<p style=\"margin-left:11%;\"><b>a</b>, <b>get_trn</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Transceive</i>'\nmode.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Transceive mode\n(reporting event) as in <b>set_trn</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>*</b>, <b>reset</b>\n'<i>Reset</i>'</p>\n\n<p style=\"margin-left:22%;\">Perform rig '<i>Reset</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Reset is a\nvalue: &rsquo;0&rsquo; = None, &rsquo;1&rsquo; = Software\nreset, &rsquo;2&rsquo; = VFO reset, &rsquo;4&rsquo; = Memory\nClear reset, &rsquo;8&rsquo; = Master reset.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Since these\nvalues are defined as a bitmask in\n<i>include/hamlib/rig.h</i>, it should be possible to AND\nthese values together to do multiple resets at once, if the\nbackend supports it or supports a reset action via rig\ncontrol at all.</p>\n\n<p style=\"margin-left:11%;\"><b>0x87</b>,\n<b>set_powerstat</b> '<i>Power Status</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Power Status</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Power Status is\na value: &rsquo;0&rsquo; = Power Off, &rsquo;1&rsquo; =\nPower On, &rsquo;2&rsquo; = Power Standby.</p>\n\n<p style=\"margin-left:11%;\"><b>0x88</b>,\n<b>get_powerstat</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>Power Status</i>' as in\n<b>set_powerstat</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>0x89</b>, <b>send_dtmf</b>\n'<i>Digits</i>'</p>\n\n<p style=\"margin-left:22%;\">Set DTMF '<i>Digits</i>'.</p>\n\n<p style=\"margin-left:11%;\"><b>0x8a</b>,\n<b>recv_dtmf</b></p>\n\n<p style=\"margin-left:22%;\">Get DTMF '<i>Digits</i>'.</p>\n\n<p style=\"margin-left:11%;\"><b>_</b>, <b>get_info</b></p>\n\n<p style=\"margin-left:22%;\">Get misc information about the\nrig.</p>\n\n<p style=\"margin-left:11%;\"><b>0xf5</b>,\n<b>get_rig_info</b></p>\n\n<p style=\"margin-left:22%;\">Get misc information about the\nrig vfos and other info.</p>\n\n<p style=\"margin-left:11%;\"><b>0xf3</b>,\n<b>get_vfo_info</b> '<i>VFO</i>'</p>\n\n<p style=\"margin-left:22%;\">Get misc information about a\nspecific vfo.</p>\n\n<p style=\"margin-left:11%;\"><b>dump_state</b></p>\n\n<p style=\"margin-left:22%;\">Return certain state\ninformation about the radio backend.</p>\n\n<p style=\"margin-left:11%;\"><b>1</b>, <b>dump_caps</b></p>\n\n<p style=\"margin-left:22%;\">Not a real rig remote command,\nit just dumps capabilities, i.e. what the backend knows\nabout this model, and what it can do.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">TODO: Ensure\nthis is in a consistent format so it can be read into a\nhash, dictionary, etc. Bug reports requested.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThis command will produce many lines of output so be very\ncareful if using a fixed length array! For example, running\nthis command against the Dummy backend results in over 5kB\nof text output.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">VFO parameter\nnot used in &rsquo;VFO mode&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>2</b>, <b>power2mW</b>\n'<i>Power [0.0..1.0]</i>' '<i>Frequency</i>'\n'<i>Mode</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Power mW</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Converts a\nPower value in a range of <i>0.0</i>...<i>1.0</i> to the\nreal transmit power in milli-Watts (integer).</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Frequency</i>'\nand '<i>Mode</i>' also need to be provided as output power\nmay vary according to these values.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">VFO parameter\nis not used in VFO mode.</p>\n\n<p style=\"margin-left:11%;\"><b>4</b>, <b>mW2power</b>\n'<i>Power mW</i>' '<i>Frequency</i>' '<i>Mode</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Power\n[0.0..1.0]</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Converts the\nreal transmit power in milli-Watts (integer) to a Power\nvalue in a range of <i>0.0 ... 1.0</i>.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Frequency</i>'\nand '<i>Mode</i>' also need to be provided as output power\nmay vary according to these values.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">VFO parameter\nis not used in VFO mode.</p>\n\n<p style=\"margin-left:11%;\"><b>set_clock</b>\n'<i>DateTime</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>DateTime</i>'</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Sets rig clock\n-- note that some rigs do not handle seconds or\nmilliseconds. If you try to set that you will get a debug\nwarning message. Format is ISO8601. <br>\nFormats accepted <br>\nYYYY-MM-DDTHH:MM:SS.sss+ZZ (where +ZZ is either -/+ UTC\noffset) <br>\nYYYY-MM-DDTHH:MM:SS+ZZ <br>\nYYYY-MM-DDTHH:MM+ZZ <br>\nYYYY-MM-DD (sets date only)</p>\n\n<p style=\"margin-left:11%;\"><b>get_clock</b></p>\n\n<p style=\"margin-left:22%;\">Get '<i>RigTime</i>'</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Gets rig clock\n-- note that some rigs do not handle seconds or\nmilliseconds. Format is ISO8601 YYYY-MM-DDTHH:MM:SS.sss+ZZ\nwhere +ZZ is either -/+ UTC offset</p>\n\n<p style=\"margin-left:11%;\"><b>chk_vfo</b></p>\n\n<p style=\"margin-left:22%;\">Returns &ldquo;1\\n&rdquo;\n(single line only) if <b>rigctld</b> was invoked with the\n<b>-o</b>/<b>--vfo</b> option and &ldquo;0\\n&rdquo; if\nnot.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">When in VFO\nmode the client will need to pass '<i>VFO</i>' as the first\nparameter to <b>set</b> or <b>get</b> commands. VFO is one\nof the strings defined in <b>set_vfo</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>set_vfo_opt</b>\n'<i>Status</i>'</p>\n\n<p style=\"margin-left:22%;\">Set '<i>Status</i>'</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Set vfo option\nStatus 1=on or 0=off This is the same as using the -o switch\nfor rigctl and ritctld. This can be dyamically changed while\nrunning.</p>\n\n<h2>PROTOCOL\n<a name=\"PROTOCOL\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">There are two\nprotocols in use by <b>rigctld</b>, the <b>Default\nProtocol</b> and the <b>Extended Response Protocol</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>Default\nProtocol</b> is intended primarily for the communication\nbetween <b>Hamlib</b> library functions and <b>rigctld</b>\n(&ldquo;NET rigctl&rdquo;, available using radio model\n&rsquo;2&rsquo;).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>Extended\nResponse Protocol</b> is intended to be used with scripts or\nother programs interacting directly with <b>rigctld</b> as\nconsistent feedback is provided.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Default\nProtocol</b> <br>\nThe <b>Default Protocol</b> is intentionally simple.\nCommands are entered on a single line with any needed\nvalues. In practice, reliable results are obtained by\nterminating each command string with a newline character,\n&rsquo;\\n&rsquo;.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Example set\nfrequency and mode commands (Perl code (typed text shown in\nbold)):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>print\n$socket &quot;F 14250000\\n&quot;; <br>\nprint $socket &quot;\\\\set_mode LSB 2400\\n&quot;;</b> #\nescape leading &rsquo;\\&rsquo;</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A one line\nresponse will be sent as a reply to <b>set</b> commands,\n&ldquo;RPRT <i>x</i>\\n&rdquo; where <i>x</i> is the Hamlib\nerror code with &rsquo;0&rsquo; indicating success of the\ncommand.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Responses from\n<b>rigctld get</b> commands are text values and match the\nsame tokens used in the <b>set</b> commands. Each value is\nreturned on its own line. On error the string &ldquo;RPRT\n<i>x</i>\\n&rdquo; is returned where <i>x</i> is the Hamlib\nerror code.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Example get\nfrequency (Perl code):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>print\n$socket &quot;f\\n&quot;;</b> <br>\n&quot;14250000\\n&quot;</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Most <b>get</b>\nfunctions return one to three values. A notable exception is\nthe <b>dump_caps</b> command which returns many lines of\n<b>key</b>:<i>value</i> pairs.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This protocol\nis primarily used by the &ldquo;NET rigctl&rdquo; (rigctl\nmodel 2) backend which allows applications already written\nfor Hamlib&rsquo;s C API to take advantage of <b>rigctld</b>\nwithout the need of rewriting application code. An\napplication&rsquo;s user can select rotator model 2\n(&ldquo;NET rigctl&rdquo;) and then set <b>rig_pathname</b>\nto &ldquo;localhost:4532&rdquo; or other network\n<i>host</i>:<i>port</i> (set by the <b>-T</b>/<b>-t</b>\noptions, respectively, above).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Extended\nResponse Protocol</b> <br>\nThe Extended Response protocol adds several rules to the\nstrings returned by <b>rigctld</b> and adds a rule for the\ncommand syntax.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">1. The command\nreceived by <b>rigctld</b> is echoed with its long command\nname followed by the value(s) (if any) received from the\nclient terminated by the specified response separator as the\nfirst record of the response.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">2. The last\nrecord of each block is the string &ldquo;RPRT\n<i>x</i>\\n&rdquo; where <i>x</i> is the numeric return value\nof the Hamlib backend function that was called by the\ncommand.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">3. Any records\nconsisting of data values returned by the radio backend are\nprepended by a string immediately followed by a colon then a\nspace and then the value terminated by the response\nseparator. e.g. &ldquo;Frequency: 14250000\\n&rdquo; when the\ncommand was prepended by &rsquo;+&rsquo;.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">4. All commands\nreceived will be acknowledged by <b>rigctld</b> <br>\nwith records from rules 1 and 2. Records from rule 3 are\nonly returned when data values must be returned to the\nclient.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">An example\nresponse to a <b>set_mode</b> command sent from the shell\nprompt (note the prepended &rsquo;+&rsquo;):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>echo\n&quot;+M USB 2400&quot; | nc -w 1 localhost 4532</b> <br>\nset_mode: USB 2400 <br>\nRPRT 0</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">In this case\nthe long command name and values are returned on the first\nline and the second line contains the end of block marker\nand the numeric radio backend return value indicating\nsuccess.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">An example\nresponse to a <b>get_mode</b> query:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>echo\n&quot;+\\get_mode&quot; | nc -w 1 localhost 4532</b> <br>\nget_mode: <br>\nMode: USB <br>\nPassband: 2400 <br>\nRPRT 0</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe &rsquo;\\&rsquo; is still required for the long command\nname even with the ERP character.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">In this case,\nas no value is passed to <b>rigctld</b>, the first line\nconsists only of the long command name. The final line shows\nthat the command was processed successfully by the radio\nbackend.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Invoking the\nExtended Response Protocol requires prepending a command\nwith a punctuation character. As shown in the examples\nabove, prepending a &rsquo;+&rsquo; character to the command\nresults in the responses being separated by a newline\ncharacter (&rsquo;\\n&rsquo;). Any other punctuation\ncharacter recognized by the C <b>ispunct</b>() function\nexcept &rsquo;\\&rsquo;, &rsquo;?&rsquo;, or &rsquo;_&rsquo;\nwill cause that character to become the response separator\nand the entire response will be on one line.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Separator\ncharacter summary:</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"4%\">\n\n\n<p>&rsquo;<b>+</b>&rsquo;</p></td>\n<td width=\"7%\"></td>\n<td width=\"78%\">\n\n\n<p>Each record of the response is appended with a newline\n(&rsquo;\\n&rsquo;).</p> </td></tr>\n</table>\n\n<p style=\"margin-left:11%;\">&rsquo;<b>;</b>&rsquo;,\n&rsquo;<b>|</b>&rsquo;, or, &rsquo;<b>,</b>&rsquo;</p>\n\n<p style=\"margin-left:22%;\">Each record of the response is\nappended by the given character resulting in entire response\non one line.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">These are\ncommon record separators for text representations of\nspreadsheet data, etc.</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"4%\">\n\n\n<p>&rsquo;<b>?</b>&rsquo;</p></td>\n<td width=\"7%\"></td>\n<td width=\"78%\">\n\n\n<p>Reserved for help in <b>rigctl</b>.</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"4%\">\n\n\n<p>&rsquo;<b>_</b>&rsquo;</p></td>\n<td width=\"7%\"></td>\n<td width=\"78%\">\n\n\n<p>Reserved for <b>get_info</b> short command</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"4%\">\n\n\n<p>&rsquo;<b>#</b>&rsquo;</p></td>\n<td width=\"7%\"></td>\n<td width=\"78%\">\n\n\n<p>Reserved for comments when reading a command file\nscript.</p> </td></tr>\n</table>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nOther punctuation characters have not been tested! Use at\nyour own risk.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">For example,\ninvoking a <b>get_mode</b> query with a leading\n&rsquo;;&rsquo; returns:</p>\n\n\n<p style=\"margin-left:17%; margin-top: 1em\">get_mode:;Mode:\nUSB;Passband: 2400;RPRT 0</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Or, using the\npipe character &rsquo;|&rsquo; returns:</p>\n\n\n<p style=\"margin-left:17%; margin-top: 1em\">get_mode:|Mode:\nUSB|Passband: 2400|RPRT 0</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">And a\n<b>set_mode</b> command prepended with a &rsquo;|&rsquo;\nreturns:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">set_mode: USB\n2400|RPRT 0</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Such a format\nwill allow reading a response as a single event using a\npreferred response separator. Other punctuation characters\nhave not been tested!</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The following\ncommands have been tested with the Extended Response\nprotocol and the included <b>testctld.pl</b> Perl\nscript:</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>set_freq</b>,\n<b>get_freq</b>, <b>set_split_freq</b>,\n<b>get_split_freq</b>, <b>set_mode</b>, <b>get_mode</b>,\n<b>set_split_mode</b>, <b>get_split_mode</b>,\n<b>set_vfo</b>, <b>get_vfo</b>, <b>set_split_vfo</b>,\n<b>get_split_vfo</b>, <b>set_rit</b>, <b>get_rit</b>,\n<b>set_xit</b>, <b>get_xit</b>, <b>set_ptt</b>,\n<b>get_ptt</b>, <b>power2mW</b>, <b>mW2power</b>,\n<b>dump_caps</b>.</p>\n\n<h2>DIAGNOSTICS\n<a name=\"DIAGNOSTICS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>-v</b>,\n<b>--verbose</b> option allows different levels of\ndiagnostics to be output to <b>stderr</b> and correspond to\n-v for <b>BUG</b>, -vv for <b>ERR</b>, -vvv for <b>WARN</b>,\n-vvvv for <b>VERBOSE</b>, or -vvvvv for <b>TRACE</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A given verbose\nlevel is useful for providing needed debugging information\nto the email address below. For example, TRACE output shows\nall of the values sent to and received from the radio which\nis very useful for radio backend library development and may\nbe requested by the developers.</p>\n\n<h2>EXAMPLES\n<a name=\"EXAMPLES\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>rigctld</b> for a Yaesu FT-920 using a USB-to-serial\nadapter and backgrounding:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rigctld -m\n1014 -r /dev/ttyUSB1 &amp;</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>rigctld</b> for a Yaesu FT-920 using a USB-to-serial\nadapter while setting baud rate and stop bits, and\nbackgrounding:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rigctld -m\n1014 -r /dev/ttyUSB1 -s 4800 -C stop_bits=2 &amp;</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>rigctld</b> for an Elecraft K3 using COM2 on MS\nWindows:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rigctld -m\n2029 -r COM2</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Connect to the\nalready running <b>rigctld</b> and set the frequency to\n14.266 MHz with a 1 second read timeout using the default\nprotocol from the shell prompt:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>echo\n&quot;\\set_freq 14266000&quot; | nc -w 1 localhost\n4532P</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Connect to a\nrunning <b>rigctld</b> with <b>rigctl</b> on the local\nhost:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rigctl\n-m2</b></p>\n\n<h2>SECURITY\n<a name=\"SECURITY\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">No\nauthentication whatsoever; DO NOT leave this TCP port open\nwide to the Internet. Please ask if stronger security is\nneeded or consider using a Secure Shell (<b>ssh</b>(1))\ntunnel.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">As\n<b>rigctld</b> does not need any greater permissions than\n<b>rigctl</b>, it is advisable to not start <b>rigctld</b>\nas &ldquo;root&rdquo; or another system user account in\norder to limit any vulnerability.</p>\n\n<h2>BUGS\n<a name=\"BUGS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The daemon is\nnot detaching and backgrounding itself.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">No method to\nexit the daemon so the <b>kill</b>(1) command must be used\nto terminate it.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Multiple\nclients using the daemon may experience contention with the\nconnected radio.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Report bugs\nto:</p>\n\n\n<p style=\"margin-left:22%;\"><a href=\"mailto:hamlib-developer@lists.sourceforge.net\">Hamlib\nDeveloper mailing list </a></p>\n\n<h2>COPYING\n<a name=\"COPYING\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This file is\npart of Hamlib, a project to develop a library that\nsimplifies radio, rotator, and amplifier control functions\nfor developers of software primarily of interest to radio\namateurs and those interested in radio communications.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Copyright\n&copy; 2000-2010 Stephane Fillod <br>\nCopyright &copy; 2000-2018 the Hamlib Group (various\ncontributors) <br>\nCopyright &copy; 2011-2020 Nate Bargmann</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This is free\nsoftware; see the file COPYING for copying conditions. There\nis NO warranty; not even for MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.</p>\n\n<h2>SEE ALSO\n<a name=\"SEE ALSO\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>kill</b>(1),\n<b>rigctl</b>(1), <b>ssh</b>(1), <b>hamlib</b>(7)</p>\n\n<h2>COLOPHON\n<a name=\"COLOPHON\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Links to the\nHamlib Wiki, Git repository, release archives, and daily\nsnapshot archives are available via\n<a href=\"http://www.hamlib.org\">hamlib.org</a>.</p>\n<hr>\n</body>\n</html>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/doc/rigmem.1.html",
    "content": "<!-- Creator     : groff version 1.22.4 -->\n<!-- CreationDate: Wed May 18 09:31:52 2022 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<meta name=\"Content-Style\" content=\"text/css\">\n<style type=\"text/css\">\n       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       h1      { text-align: center }\n</style>\n<title>RIGMEM</title>\n\n</head>\n<body>\n\n<h1 align=\"center\">RIGMEM</h1>\n\n<a href=\"#NAME\">NAME</a><br>\n<a href=\"#SYNOPSIS\">SYNOPSIS</a><br>\n<a href=\"#DESCRIPTION\">DESCRIPTION</a><br>\n<a href=\"#OPTIONS\">OPTIONS</a><br>\n<a href=\"#COMMANDS\">COMMANDS</a><br>\n<a href=\"#DIAGNOSTICS\">DIAGNOSTICS</a><br>\n<a href=\"#EXIT STATUS\">EXIT STATUS</a><br>\n<a href=\"#BUGS\">BUGS</a><br>\n<a href=\"#COPYING\">COPYING</a><br>\n<a href=\"#SEE ALSO\">SEE ALSO</a><br>\n<a href=\"#COLOPHON\">COLOPHON</a><br>\n\n<hr>\n\n\n<h2>NAME\n<a name=\"NAME\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">rigmem - backup\nand restore memory of radio transceivers and receivers</p>\n\n<h2>SYNOPSIS\n<a name=\"SYNOPSIS\"></a>\n</h2>\n\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"9%\">\n\n\n<p style=\"margin-top: 1em\"><b>rigmem</b></p></td>\n<td width=\"2%\"></td>\n<td width=\"78%\">\n\n\n<p style=\"margin-top: 1em\">[<b>-ahvVx</b>]\n[<b>-m&nbsp;</b><i>id</i>] [<b>-r&nbsp;</b><i>device</i>]\n[<b>-s&nbsp;</b><i>baud</i>] [<b>-c&nbsp;</b><i>id</i>]\n[<b>-C&nbsp;</b><i>parm=val</i>] [<b>-p&nbsp;</b><i>sep</i>]\ncommand [<i>file</i>]</p></td></tr>\n</table>\n\n<h2>DESCRIPTION\n<a name=\"DESCRIPTION\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Backup and\nrestore memory of radio transceivers and receivers.\n<b>rigmem</b> accepts <i>command</i>s from the command line\nonly.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Keep in mind\nthat Hamlib is BETA level software. While a lot of backend\nlibraries lack complete radio support, the basic functions\nare usually well supported.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please report\nbugs and provide feedback at the e-mail address given in the\n<b>BUGS</b> section below. Patches and code enhancements\nsent to the same address are welcome.</p>\n\n<h2>OPTIONS\n<a name=\"OPTIONS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This program\nfollows the usual GNU command line syntax. Short options\nthat take an argument may have the value follow immediately\nor be separated by a space. Long options starting with two\ndashes (&rsquo;-&rsquo;) require an &rsquo;=&rsquo; between\nthe option and any argument.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported options: <b><br>\n-m</b>, <b>--model</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Select radio model number.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See model list\n(use &ldquo;rigctl -l&rdquo;).</p>\n\n<p style=\"margin-left:11%;\"><b>-r</b>,\n<b>--rig-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the port connected to the radio.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Often a serial\nport, but could be a USB to serial adapter. Typically\n<i>/dev/ttyS0</i>, <i>/dev/ttyS1</i>, <i>/dev/ttyUSB0</i>,\netc. on Linux, <i>COM1</i>, <i>COM2</i>, etc. on MS Windows.\nThe BSD flavors and Mac OS/X have their own designations.\nSee your system&rsquo;s documentation.</p>\n\n<p style=\"margin-left:11%;\"><b>-s</b>,\n<b>--serial-speed</b>=<i>baud</i></p>\n\n<p style=\"margin-left:22%;\">Set radio serial speed to\n<i>baud</i> rate.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Uses maximum\nserial speed from radio backend capabilities as the\ndefault.</p>\n\n<p style=\"margin-left:11%;\"><b>-c</b>,\n<b>--civaddr</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>id</i> as the CI-V\naddress to communicate with the radio.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Only useful for\nIcom and some Ten-Tec radios.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe <i>id</i> is in decimal notation, unless prefixed by\n<i>0x</i>, in which case it is hexadecimal.</p>\n\n<p style=\"margin-left:11%;\"><b>-C</b>,\n<b>--set-conf</b>=<i>parm=val</i>[<i>,parm=val</i>]</p>\n\n<p style=\"margin-left:22%;\">Set radio configuration\nparameter(s), e.g. <i>stop_bits=2</i>.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use the\n<b>-L</b> option of <b>rigctl</b> for a list of\nconfiguration parameters for a given model number.</p>\n\n<p style=\"margin-left:11%;\"><b>-p</b>,\n<b>--set-separator</b>=<i>sep</i></p>\n\n<p style=\"margin-left:22%;\">Set character as column\nseparator instead of the CSV comma.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Some common\nalternatives are the vertical bar (pipe), &rsquo;|&rsquo;,\nsemicolon, &rsquo;;&rsquo;, and colon, &rsquo;:&rsquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>-a</b>, <b>--all</b></p>\n\n<p style=\"margin-left:22%;\">Bypass mem_caps, apply to all\nfields of channel_t.</p>\n\n<p style=\"margin-left:11%;\"><b>-x</b>, <b>--xml</b></p>\n\n<p style=\"margin-left:22%;\">Use XML format instead of CSV,\nif libxml2 is available.</p>\n\n<p style=\"margin-left:11%;\"><b>-v</b>, <b>--verbose</b></p>\n\n<p style=\"margin-left:22%;\">Set verbose mode, cumulative\n(see <b>DIAGNOSTICS</b> below).</p>\n\n<p style=\"margin-left:11%;\"><b>-h</b>, <b>--help</b></p>\n\n<p style=\"margin-left:22%;\">Show a summary of these options\nand exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-V</b>, <b>--version</b></p>\n\n<p style=\"margin-left:22%;\">Show version of <b>rigmem</b>\nand exit.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nSome options may not be implemented by a given backend and\nwill return an error. This is most likely to occur with the\n<b>--set-conf</b> option.</p>\n\n<h2>COMMANDS\n<a name=\"COMMANDS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Backup and\nrestore are supported for basic CSV file and XML format\nwhere available.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please note\nthat the backend for the radio to be controlled, or the\nradio itself may not support some commands. In that case,\nthe operation will fail with a <b>Hamlib</b> error\nmessage.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported commands: <b><br>\nsave</b> <i>file</i></p>\n\n<p style=\"margin-left:22%;\">Save all the content of memory\nin a CSV (or XML) file given as an argument to the\ncommand.</p>\n\n<p style=\"margin-left:11%;\"><b>load</b> <i>file</i></p>\n\n<p style=\"margin-left:22%;\">Load the content into all the\nmemory from a CSV (or XML) file given as an argument to the\ncommand.</p>\n\n<p style=\"margin-left:11%;\"><b>save_parm</b>\n<i>file</i></p>\n\n<p style=\"margin-left:22%;\">Save all the parameters of the\nradio in a CSV (or XML) file given as an argument to the\ncommand.</p>\n\n<p style=\"margin-left:11%;\"><b>load_parm</b>\n<i>file</i></p>\n\n<p style=\"margin-left:22%;\">Load the parameters of the\nradio from a CSV (or XML) file given as an argument to the\ncommand.</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"7%\">\n\n\n<p><b>clear</b></p></td>\n<td width=\"4%\"></td>\n<td width=\"78%\">\n\n\n<p>This is a very <b>DANGEROUS</b> command, as it will\ncompletely clear out everything you have programmed in the\nmemory of your radio. <b>ALL DATA WILL BE LOST</b>. Use at\nyour own risk!</p></td></tr>\n</table>\n\n<h2>DIAGNOSTICS\n<a name=\"DIAGNOSTICS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>-v</b>,\n<b>--verbose</b> option allows different levels of\ndiagnostics to be output to <b>stderr</b> and correspond to\n-v for <b>BUG</b>, -vv for <b>ERR</b>, -vvv for <b>WARN</b>,\n-vvvv for <b>VERBOSE</b>, or -vvvvv for <b>TRACE</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A given verbose\nlevel is useful for providing needed debugging information\nto the email address below. For example, TRACE output shows\nall of the values sent to and received from the radio which\nis very useful for radio backend library development and may\nbe requested by the developers.</p>\n\n<h2>EXIT STATUS\n<a name=\"EXIT STATUS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigmem</b>\nexits with:</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p style=\"margin-top: 1em\"><b>0</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p style=\"margin-top: 1em\">if all operations completed\nnormally;</p> </td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>1</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if there was an invalid command line option or\nargument;</p> </td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>2</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if an error was returned by <b>Hamlib</b>.</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>3</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>the <b>Hamlib</b> backend has no memory support\nimplemented and/or the radio has no memory access\navailable.</p> </td></tr>\n</table>\n\n<h2>BUGS\n<a name=\"BUGS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Report bugs\nto:</p>\n\n\n<p style=\"margin-left:22%;\"><a href=\"mailto:hamlib-developer@lists.sourceforge.net\">Hamlib\nDeveloper mailing list </a></p>\n\n<h2>COPYING\n<a name=\"COPYING\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This file is\npart of Hamlib, a project to develop a library that\nsimplifies radio, rotator, and amplifier control functions\nfor developers of software primarily of interest to radio\namateurs and those interested in radio communications.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Copyright\n&copy; 2003-2011 Stephane Fillod <br>\nCopyright &copy; 2007,2019-2020 Nate Bargmann</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This is free\nsoftware; see the file COPYING for copying conditions. There\nis NO warranty; not even for MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.</p>\n\n<h2>SEE ALSO\n<a name=\"SEE ALSO\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigctl</b>(1),\n<b>hamlib</b>(7)</p>\n\n<h2>COLOPHON\n<a name=\"COLOPHON\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Links to the\nHamlib Wiki, Git repository, release archives, and daily\nsnapshot archives are available via\n<a href=\"http://www.hamlib.org\">hamlib.org</a>.</p>\n<hr>\n</body>\n</html>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/doc/rigsmtr.1.html",
    "content": "<!-- Creator     : groff version 1.22.4 -->\n<!-- CreationDate: Wed May 18 09:31:52 2022 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<meta name=\"Content-Style\" content=\"text/css\">\n<style type=\"text/css\">\n       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       h1      { text-align: center }\n</style>\n<title>RIGSMTR</title>\n\n</head>\n<body>\n\n<h1 align=\"center\">RIGSMTR</h1>\n\n<a href=\"#NAME\">NAME</a><br>\n<a href=\"#SYNOPSIS\">SYNOPSIS</a><br>\n<a href=\"#DESCRIPTION\">DESCRIPTION</a><br>\n<a href=\"#OPTIONS\">OPTIONS</a><br>\n<a href=\"#DIAGNOSTICS\">DIAGNOSTICS</a><br>\n<a href=\"#EXIT STATUS\">EXIT STATUS</a><br>\n<a href=\"#EXAMPLE\">EXAMPLE</a><br>\n<a href=\"#BUGS\">BUGS</a><br>\n<a href=\"#COPYING\">COPYING</a><br>\n<a href=\"#SEE ALSO\">SEE ALSO</a><br>\n<a href=\"#COLOPHON\">COLOPHON</a><br>\n\n<hr>\n\n\n<h2>NAME\n<a name=\"NAME\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">rigsmtr -\nmeasure S-Meter vs azimuth using Hamlib</p>\n\n<h2>SYNOPSIS\n<a name=\"SYNOPSIS\"></a>\n</h2>\n\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"11%\">\n\n\n<p style=\"margin-top: 1em\"><b>rigsmtr</b></p></td>\n<td width=\"1%\"></td>\n<td width=\"77%\">\n\n\n<p style=\"margin-top: 1em\">[<b>-hvV</b>]\n[<b>-m&nbsp;</b><i>id</i>] [<b>-r&nbsp;</b><i>device</i>]\n[<b>-s&nbsp;</b><i>baud</i>] [<b>-c&nbsp;</b><i>id</i>]\n[<b>-C&nbsp;</b><i>parm=val</i>] [<b>-M&nbsp;</b><i>id</i>]\n[<b>-R&nbsp;</b><i>device</i>] [<b>-S&nbsp;</b><i>baud</i>]\n[<b>-N&nbsp;</b><i>parm=val</i>] [<i>time_step</i>]</p></td></tr>\n</table>\n\n<h2>DESCRIPTION\n<a name=\"DESCRIPTION\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigsmtr</b>\nuses <b>Hamlib</b> to control a radio to measure S-Meter\nvalue versus antenna azimuth.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">It rotates the\nantenna from minimum azimuth to maximum azimuth. Every\nsecond, or <i>time_step</i> if specified in seconds, it\nretrieves the signal strength. Azimuth in degrees and the\ncorresponding S-Meter level in dB relative to S9 are then\nprinted on <b>stdout</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">To work\ncorrectly, rigsmtr needs a radio that could measure S-Meter\nand a Hamlib backend that is able to retrieve it, connected\nto a Hamlib supported rotator.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Keep in mind\nthat Hamlib is BETA level software. While a lot of backend\nlibraries lack complete radio support, the basic functions\nare usually well supported.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please report\nbugs and provide feedback at the e-mail address given in the\n<b>BUGS</b> section below. Patches and code enhancements\nsent to the same address are welcome.</p>\n\n<h2>OPTIONS\n<a name=\"OPTIONS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This program\nfollows the usual GNU command line syntax. Short options\nthat take an argument may have the value follow immediately\nor be separated by a space. Long options starting with two\ndashes (&rsquo;-&rsquo;) require an &rsquo;=&rsquo; between\nthe option and any argument.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported options. <b><br>\n-m</b>, <b>--model</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Select radio model number.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See model list\n(use &ldquo;rigctl -l&rdquo;).</p>\n\n<p style=\"margin-left:11%;\"><b>-r</b>,\n<b>--rig-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the port connected to the radio.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Often a serial\nport, but could be a USB to serial adapter. Typically\n<i>/dev/ttyS0</i>, <i>/dev/ttyS1</i>, <i>/dev/ttyUSB0</i>,\netc. on Linux, <i>COM1</i>, <i>COM2</i>, etc. on MS Windows.\nThe BSD flavors and Mac OS/X have their own designations.\nSee your system&rsquo;s documentation.</p>\n\n<p style=\"margin-left:11%;\"><b>-s</b>,\n<b>--serial-speed</b>=<i>baud</i></p>\n\n<p style=\"margin-left:22%;\">Set radio serial speed to\n<i>baud</i> rate.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Uses maximum\nserial speed from radio backend capabilities as the\ndefault.</p>\n\n<p style=\"margin-left:11%;\"><b>-c</b>,\n<b>--civaddr</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>id</i> as the CI-V\naddress to communicate with the radio.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Only useful for\nIcom and some Ten-Tec radios.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe <i>id</i> is in decimal notation, unless prefixed by\n<i>0x</i>, in which case it is hexadecimal.</p>\n\n<p style=\"margin-left:11%;\"><b>-C</b>,\n<b>--set-conf</b>=<i>parm=val</i>[<i>,parm=val</i>]</p>\n\n<p style=\"margin-left:22%;\">Set radio configuration\nparameter(s), e.g. <i>stop_bits=2</i>.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use the\n<b>-L</b> option of <b>rigctl</b> for a list of\nconfiguration parameters for a given model number.</p>\n\n<p style=\"margin-left:11%;\"><b>-M</b>,\n<b>--rot-model</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Select rotator model\nnumber.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See model list\n(use &ldquo;rotctl -l&rdquo;).</p>\n\n<p style=\"margin-left:11%;\"><b>-R</b>,\n<b>--rot-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the port connected to the rotator.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Often a serial\nport, but could be a USB to serial adapter. Typically\n<i>/dev/ttyS0</i>, <i>/dev/ttyS1</i>, <i>/dev/ttyUSB0</i>,\netc. on Linux, <i>COM1</i>, <i>COM2</i>, etc. on MS Windows.\nThe BSD flavors and Mac OS/X have their own designations.\nSee your system&rsquo;s documentation.</p>\n\n<p style=\"margin-left:11%;\"><b>-S</b>,\n<b>--rot-serial-speed</b>=<i>baud</i></p>\n\n<p style=\"margin-left:22%;\">Set rotator serial speed to\n<i>baud</i> rate.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Uses maximum\nserial speed from rotator backend capabilities as the\ndefault.</p>\n\n<p style=\"margin-left:11%;\"><b>-N</b>,\n<b>--rot-set-conf</b>=<i>parm=val</i>[<i>,parm=val</i>]</p>\n\n<p style=\"margin-left:22%;\">Set rotator configuration\nparameter(s), e.g. <i>stop_bits=2</i>.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use the\n<b>-L</b> option of <b>rotctl</b> for a list of\nconfiguration parameters for a given model number.</p>\n\n<p style=\"margin-left:11%;\"><b>-v</b>, <b>--verbose</b></p>\n\n<p style=\"margin-left:22%;\">Set verbose mode, cumulative\n(see <b>DIAGNOSTICS</b> below).</p>\n\n<p style=\"margin-left:11%;\"><b>-h</b>, <b>--help</b></p>\n\n<p style=\"margin-left:22%;\">Show a summary of these options\nand exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-V</b>, <b>--version</b></p>\n\n<p style=\"margin-left:22%;\">Show version of <b>rigsmtr</b>\nand exit.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nSome options may not be implemented by a given backend and\nwill return an error. This is most likely to occur with the\n<b>--set-conf</b> and <b>--rot-set-conf</b> options.</p>\n\n<h2>DIAGNOSTICS\n<a name=\"DIAGNOSTICS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>-v</b>,\n<b>--verbose</b> option allows different levels of\ndiagnostics to be output to <b>stderr</b> and correspond to\n-v for <b>BUG</b>, -vv for <b>ERR</b>, -vvv for <b>WARN</b>,\n-vvvv for <b>VERBOSE</b>, or -vvvvv for <b>TRACE</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A given verbose\nlevel is useful for providing needed debugging information\nto the email address below. For example, TRACE output shows\nall of the values sent to and received from the radio which\nis very useful for radio backend library development and may\nbe requested by the developers.</p>\n\n<h2>EXIT STATUS\n<a name=\"EXIT STATUS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigsmtr</b>\nexits with:</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>0</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if all operations completed normally;</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>1</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if there was an invalid command line option or\nargument;</p> </td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>2</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if an error was returned by <b>Hamlib</b>;</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>3</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if the radio doesn&rsquo;t have the required\ncapabilities.</p> </td></tr>\n</table>\n\n<h2>EXAMPLE\n<a name=\"EXAMPLE\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Collect S-Meter\nreadings on a TS-850 while an EasycommII rotator makes a\nfull 360&deg; rotation and record measurements in the file\n<i>csmtr</i> (typed text shown in bold):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rigsmtr -m\n2009 -r /dev/ttyS1 -M 202 &gt; csmtr</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">After\ncompletion the file <i>csmtr</i> contains lines such as:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">0 -47 <br>\n30 -40 <br>\n60 -22 <br>\n90 -3 <br>\n120 10 <br>\n150 1 <br>\n180 -11 <br>\n210 -24 <br>\n240 -35 <br>\n270 -42 <br>\n300 -48 <br>\n330 -51 <br>\n360 -49</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The results can\nbe plotted with <b>gnuplot</b>(1):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>gnuplot\n<br>\nset angles degrees <br>\nset polar <br>\nset grid polar 15. <br>\nunset border <br>\nunset param <br>\nset style data line <br>\nset rrange [-60:60] <br>\nset xrange [-60:60] <br>\nset yrange [-60:60] <br>\nplot csmtr</b></p>\n\n<h2>BUGS\n<a name=\"BUGS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Report bugs\nto:</p>\n\n\n<p style=\"margin-left:22%;\"><a href=\"mailto:hamlib-developer@lists.sourceforge.net\">Hamlib\nDeveloper mailing list </a></p>\n\n<h2>COPYING\n<a name=\"COPYING\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This file is\npart of Hamlib, a project to develop a library that\nsimplifies radio, rotator, and amplifier control functions\nfor developers of software primarily of interest to radio\namateurs and those interested in radio communications.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Copyright\n&copy; 2007-2009 Stephane Fillod <br>\nCopyright &copy; 2018-2020 Nate Bargmann</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This is free\nsoftware; see the file COPYING for copying conditions. There\nis NO warranty; not even for MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.</p>\n\n<h2>SEE ALSO\n<a name=\"SEE ALSO\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>gnuplot</b>(1),\n<b>rigctl</b>(1), <b>rotctl</b>(1), <b>hamlib</b>(7)</p>\n\n<h2>COLOPHON\n<a name=\"COLOPHON\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Links to the\nHamlib Wiki, Git repository, release archives, and daily\nsnapshot archives are available via\n<a href=\"http://www.hamlib.org\">hamlib.org</a>.</p>\n<hr>\n</body>\n</html>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/doc/rigswr.1.html",
    "content": "<!-- Creator     : groff version 1.22.4 -->\n<!-- CreationDate: Wed May 18 09:31:52 2022 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<meta name=\"Content-Style\" content=\"text/css\">\n<style type=\"text/css\">\n       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       h1      { text-align: center }\n</style>\n<title>RIGSWR</title>\n\n</head>\n<body>\n\n<h1 align=\"center\">RIGSWR</h1>\n\n<a href=\"#NAME\">NAME</a><br>\n<a href=\"#SYNOPSIS\">SYNOPSIS</a><br>\n<a href=\"#DESCRIPTION\">DESCRIPTION</a><br>\n<a href=\"#OPTIONS\">OPTIONS</a><br>\n<a href=\"#DIAGNOSTICS\">DIAGNOSTICS</a><br>\n<a href=\"#EXIT STATUS\">EXIT STATUS</a><br>\n<a href=\"#EXAMPLE\">EXAMPLE</a><br>\n<a href=\"#BUGS\">BUGS</a><br>\n<a href=\"#COPYING\">COPYING</a><br>\n<a href=\"#SEE ALSO\">SEE ALSO</a><br>\n<a href=\"#COLOPHON\">COLOPHON</a><br>\n\n<hr>\n\n\n<h2>NAME\n<a name=\"NAME\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">rigswr -\nmeasure VSWR vs frequency.</p>\n\n<h2>SYNOPSIS\n<a name=\"SYNOPSIS\"></a>\n</h2>\n\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"9%\">\n\n\n<p style=\"margin-top: 1em\"><b>rigswr</b></p></td>\n<td width=\"2%\"></td>\n<td width=\"78%\">\n\n\n<p style=\"margin-top: 1em\">[<b>-hvV</b>]\n[<b>-m&nbsp;</b><i>id</i>] [<b>-r&nbsp;</b><i>device</i>]\n[<b>-s&nbsp;</b><i>baud</i>] [<b>-c&nbsp;</b><i>id</i>]\n[<b>-C&nbsp;</b><i>parm=val</i>]\n[<b>-p&nbsp;</b><i>device</i>] [<b>-P&nbsp;</b><i>type</i>]\nstart_freq stop_freq [<i>freq_step</i>]</p></td></tr>\n</table>\n\n<h2>DESCRIPTION\n<a name=\"DESCRIPTION\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigswr</b>\nuses <b>Hamlib</b> to control a radio to measure VSWR\n(Voltage Standing Wave Ratio) over a frequency range.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">It scans\nfrequencies from <i>start_freq</i> to <i>stop_freq</i> with\nan optional increment of <i>freq_step</i> (default step is\n100 kHz). All values must be entered as an integer in Hertz\n(cycles per second).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\n<b>rigswr</b> assumes that <i>start_freq</i> is less than or\nequal to <i>stop_freq</i>. If it is greater, <b>rigswr</b>\nwill exit without doing anything.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">For each\nfrequency, it transmits at 25% of total POWER during 0.5\nsecond in CW mode and reads VSWR.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Frequency and\nthe corresponding VSWR are then printed on\n<b>stdout</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">To work\ncorrectly, <b>rigswr</b> needs a radio that can measure VSWR\nand a <b>Hamlib</b> backend that supports reading VSWR from\nthe radio.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Keep in mind\nthat Hamlib is BETA level software. While a lot of backend\nlibraries lack complete radio support, the basic functions\nare usually well supported.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please report\nbugs and provide feedback at the e-mail address given in the\n<b>BUGS</b> section below. Patches and code enhancements\nsent to the same address are welcome.</p>\n\n<h2>OPTIONS\n<a name=\"OPTIONS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This program\nfollows the usual GNU command line syntax. Short options\nthat take an argument may have the value follow immediately\nor be separated by a space. Long options starting with two\ndashes (&rsquo;-&rsquo;) require an &rsquo;=&rsquo; between\nthe option and any argument.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported options: <b><br>\n-m</b>, <b>--model</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Select radio model number.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See model list\n(use &ldquo;rigctl -l&rdquo;).</p>\n\n<p style=\"margin-left:11%;\"><b>-r</b>,\n<b>--rig-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the port connected to the radio.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Often a serial\nport, but could be a USB to serial adapter. Typically\n<i>/dev/ttyS0</i>, <i>/dev/ttyS1</i>, <i>/dev/ttyUSB0</i>,\netc. on Linux, <i>COM1</i>, <i>COM2</i>, etc. on MS Windows.\nThe BSD flavors and Mac OS/X have their own designations.\nSee your system&rsquo;s documentation.</p>\n\n<p style=\"margin-left:11%;\"><b>-s</b>,\n<b>--serial-speed</b>=<i>baud</i></p>\n\n<p style=\"margin-left:22%;\">Set radio serial speed to\n<i>baud</i> rate.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Uses maximum\nserial speed from radio backend capabilities as the\ndefault.</p>\n\n<p style=\"margin-left:11%;\"><b>-c</b>,\n<b>--civaddr</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>id</i> as the CI-V\naddress to communicate with the radio.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Only useful for\nIcom and some Ten-Tec radios.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe <i>id</i> is in decimal notation, unless prefixed by\n<i>0x</i>, in which case it is hexadecimal.</p>\n\n<p style=\"margin-left:11%;\"><b>-C</b>,\n<b>--set-conf</b>=<i>parm=val</i>[<i>,parm=val</i>]</p>\n\n<p style=\"margin-left:22%;\">Set radio configuration\nparameter(s), e.g. <i>stop_bits=2</i>.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use the\n<b>-L</b> option of <b>rigctl</b> for a list of\nconfiguration parameters for a given model number.</p>\n\n<p style=\"margin-left:11%;\"><b>-p</b>,\n<b>--ptt-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the Push-To-Talk port using a device file as with\nthe <b>-r</b> option above.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">This is only\nneeded if the radio doesn&rsquo;t have CAT PTT control and\nrequires a separate device port to key the transmitter.</p>\n\n<p style=\"margin-left:11%;\"><b>-P</b>,\n<b>--ptt-type</b>=<i>type</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>type</i> of Push-To-Talk\ndevice.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Supported types\nare RIG (CAT), DTR, RTS, PARALLEL, NONE.</p>\n\n<p style=\"margin-left:11%;\"><b>-v</b>, <b>--verbose</b></p>\n\n<p style=\"margin-left:22%;\">Set verbose mode, cumulative\n(see <b>DIAGNOSTICS</b> below).</p>\n\n<p style=\"margin-left:11%;\"><b>-h</b>, <b>--help</b></p>\n\n<p style=\"margin-left:22%;\">Show a summary of these options\nand exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-V</b>, <b>--version</b></p>\n\n<p style=\"margin-left:22%;\">Show version of <b>rigswr</b>\nand exit.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nSome options may not be implemented by a given backend and\nwill return an error. This is most likely to occur with the\n<b>--set-conf</b> option.</p>\n\n<h2>DIAGNOSTICS\n<a name=\"DIAGNOSTICS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>-v</b>,\n<b>--verbose</b> option allows different levels of\ndiagnostics to be output to <b>stderr</b> and correspond to\n-v for <b>BUG</b>, -vv for <b>ERR</b>, -vvv for <b>WARN</b>,\n-vvvv for <b>VERBOSE</b>, or -vvvvv for <b>TRACE</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A given verbose\nlevel is useful for providing needed debugging information\nto the email address below. For example, TRACE output shows\nall of the values sent to and received from the radio which\nis very useful for radio backend library development and may\nbe requested by the developers.</p>\n\n<h2>EXIT STATUS\n<a name=\"EXIT STATUS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rigswr</b>\nexits with:</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>0</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if all operations completed normally;</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>1</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if there was an invalid command line option or\nargument;</p> </td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>2</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if an error was returned by <b>Hamlib</b>;</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>3</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if the rig doesn&rsquo;t have the required\ncapabilities.</p> </td></tr>\n</table>\n\n<h2>EXAMPLE\n<a name=\"EXAMPLE\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Scans\nfrequencies between 14.000 MHz and 14.200 MHz with 50 kHz\nstep on a TS-850 and records VSWR measurements in file\n<i>cswr</i> (typed text shown in bold):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rigswr -m\n2009 -r /dev/ttyS1 14000000 14200000 50000 &gt; cswr</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">After\ncompletion, <i>cswr</i> contains the following lines:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">14000000 1.50\n<br>\n14050000 1.31 <br>\n14100000 1.22 <br>\n14150000 1.07 <br>\n14200000 1.07</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The result can\nbe plotted with <b>gnuplot</b>(1):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>gnuplot\n<br>\nset data style linespoints <br>\nset grid <br>\nplot cswr</b></p>\n\n<h2>BUGS\n<a name=\"BUGS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Depending on\nkeyer/QSK setup, transmissions in CW mode may not be\nmodulated thus possibly giving a wrong result. Please report\nthis situation if it happens.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Report bugs\nto:</p>\n\n\n<p style=\"margin-left:22%;\"><a href=\"mailto:hamlib-developer@lists.sourceforge.net\">Hamlib\nDeveloper mailing list </a></p>\n\n<h2>COPYING\n<a name=\"COPYING\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This file is\npart of Hamlib, a project to develop a library that\nsimplifies radio, rotator, and amplifier control functions\nfor developers of software primarily of interest to radio\namateurs and those interested in radio communications.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Copyright\n&copy; 2004 Thierry Leconte <br>\nCopyright &copy; 2004-2011 Stephane Fillod <br>\nCopyright &copy; 2007,2018-2020 Nate Bargmann</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This is free\nsoftware; see the file COPYING for copying conditions. There\nis NO warranty; not even for MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.</p>\n\n<h2>SEE ALSO\n<a name=\"SEE ALSO\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>gnuplot</b>(1),\n<b>rigctl</b>(1), <b>hamlib</b>(7)</p>\n\n<h2>COLOPHON\n<a name=\"COLOPHON\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Links to the\nHamlib Wiki, Git repository, release archives, and daily\nsnapshot archives are available via\n<a href=\"http://www.hamlib.org\">hamlib.org</a>.</p>\n<hr>\n</body>\n</html>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/doc/rotctl.1.html",
    "content": "<!-- Creator     : groff version 1.22.4 -->\n<!-- CreationDate: Wed May 18 09:31:53 2022 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<meta name=\"Content-Style\" content=\"text/css\">\n<style type=\"text/css\">\n       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       h1      { text-align: center }\n</style>\n<title>ROTCTL</title>\n\n</head>\n<body>\n\n<h1 align=\"center\">ROTCTL</h1>\n\n<a href=\"#NAME\">NAME</a><br>\n<a href=\"#SYNOPSIS\">SYNOPSIS</a><br>\n<a href=\"#DESCRIPTION\">DESCRIPTION</a><br>\n<a href=\"#OPTIONS\">OPTIONS</a><br>\n<a href=\"#COMMANDS\">COMMANDS</a><br>\n<a href=\"#READLINE\">READLINE</a><br>\n<a href=\"#DIAGNOSTICS\">DIAGNOSTICS</a><br>\n<a href=\"#EXIT STATUS\">EXIT STATUS</a><br>\n<a href=\"#EXAMPLES\">EXAMPLES</a><br>\n<a href=\"#BUGS\">BUGS</a><br>\n<a href=\"#COPYING\">COPYING</a><br>\n<a href=\"#SEE ALSO\">SEE ALSO</a><br>\n<a href=\"#COLOPHON\">COLOPHON</a><br>\n\n<hr>\n\n\n<h2>NAME\n<a name=\"NAME\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">rotctl -\ncontrol antenna rotators</p>\n\n<h2>SYNOPSIS\n<a name=\"SYNOPSIS\"></a>\n</h2>\n\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"9%\">\n\n\n<p style=\"margin-top: 1em\"><b>rotctl</b></p></td>\n<td width=\"2%\"></td>\n<td width=\"78%\">\n\n\n<p style=\"margin-top: 1em\">[<b>-hiIlLuV</b>]\n[<b>-m&nbsp;</b><i>id</i>] [<b>-r&nbsp;</b><i>device</i>]\n[<b>-R&nbsp;</b><i>device2</i>] [<b>-s&nbsp;</b><i>baud</i>]\n[<b>-t&nbsp;</b><i>char</i>]\n[<b>-C&nbsp;</b><i>parm=val</i>] [<b>-v</b>[<b>-Z</b>]]\n[<b>command</b>|<b>-</b>]</p> </td></tr>\n</table>\n\n<h2>DESCRIPTION\n<a name=\"DESCRIPTION\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Control antenna\nrotators.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rotctl</b>\naccepts <i>commands</i> from the command line as well as in\ninteractive mode if none are provided on the command\nline.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Keep in mind\nthat Hamlib is BETA level software. While a lot of backend\nlibraries lack complete rotator support, the basic functions\nare usually well supported.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please report\nbugs and provide feedback at the e-mail address given in the\n<b>BUGS</b> section below. Patches and code enhancements\nsent to the same address are welcome.</p>\n\n<h2>OPTIONS\n<a name=\"OPTIONS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This program\nfollows the usual GNU command line syntax. Short options\nthat take an argument may have the value follow immediately\nor be separated by a space. Long options starting with two\ndashes (&rsquo;-&rsquo;) require an &rsquo;=&rsquo; between\nthe option and any argument.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported options: <b><br>\n-m</b>, <b>--model</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Select rotator model\nnumber.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See model list\n(use &ldquo;rotctl -l&rdquo;).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\n<b>rotctl</b> (or third party software using the C API) will\nuse rotator model 2 for <b>NET rotctl</b> (communicating\nwith <b>rotctld</b>).</p>\n\n<p style=\"margin-left:11%;\"><b>-r</b>,\n<b>--rot-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the port connected to the rotator.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Often a serial\nport, but could be a USB to serial adapter. Typically\n<i>/dev/ttyS0</i>, <i>/dev/ttyS1</i>, <i>/dev/ttyUSB0</i>,\netc. on Linux, <i>COM1</i>, <i>COM2</i>, etc. on MS Windows.\nThe BSD flavors and Mac OS/X have their own designations.\nSee your system&rsquo;s documentation.</p>\n\n<p style=\"margin-left:11%;\"><b>-R</b>,\n<b>--rot-file2</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the port connected to the 2nd rotator. e.g. 2nd\nrotator used for elevation.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Often a serial\nport, but could be a USB to serial adapter. Typically\n<i>/dev/ttyS0</i>, <i>/dev/ttyS1</i>, <i>/dev/ttyUSB0</i>,\netc. on Linux, <i>COM1</i>, <i>COM2</i>, etc. on MS Windows.\nThe BSD flavors and Mac OS/X have their own designations.\nSee your system&rsquo;s documentation.</p>\n\n<p style=\"margin-left:11%;\"><b>-s</b>,\n<b>--serial-speed</b>=<i>baud</i></p>\n\n<p style=\"margin-left:22%;\">Set serial speed to <i>baud</i>\nrate.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Uses maximum\nserial speed from rotator backend capabilities as the\ndefault.</p>\n\n<p style=\"margin-left:11%;\"><b>-t</b>,\n<b>--send-cmd-term</b>=<i>char</i></p>\n\n<p style=\"margin-left:22%;\">Change the termination\n<i>char</i> for text protocol when using the <b>send_cmd</b>\ncommand.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The default\nvalue is ASCII CR (&rsquo;0x0D&rsquo;). ASCII non-printing\ncharacters can be given as the ASCII number in hexadecimal\nformat prepended with &ldquo;0x&rdquo;. You may pass an\nempty string for no termination char. The string\n&ldquo;-1&rdquo; tells <b>rotctl</b> to switch to binary\nprotocol. See the <b>send_cmd</b> command for further\nexplanation.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe semicolon (&rsquo;;&rsquo;) is a common terminator for\nrotators that accept ASCII character strings.</p>\n\n<p style=\"margin-left:11%;\"><b>-L</b>,\n<b>--show-conf</b></p>\n\n<p style=\"margin-left:22%;\">List all configuration\nparameters for the rotator defined with <b>-m</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>-C</b>,\n<b>--set-conf</b>=<i>parm=val</i>[<i>,parm=val</i>]</p>\n\n<p style=\"margin-left:22%;\">Set rotator configuration\nparameter(s), e.g. <i>stop_bits=2</i>.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use the\n<b>-L</b> option above for a list of configuration\nparameters for a given model number.</p>\n\n<p style=\"margin-left:11%;\"><b>-u</b>,\n<b>--dump-caps</b></p>\n\n<p style=\"margin-left:22%;\">Dump capabilities for the\nrotator defined with <b>-m</b> above and exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-l</b>, <b>--list</b></p>\n\n<p style=\"margin-left:22%;\">List all rotator model numbers\ndefined in <b>Hamlib</b> and exit.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The list is\nsorted by model number.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: In\nLinux the list can be scrolled back using\n<b>Shift-PageUp</b>/<b>Shift-PageDown</b>, or using the\nscrollbars of a virtual terminal in X or the cmd window in\nWindows. The output can be piped to <b>more</b>(1) or\n<b>less</b>(1), e.g. &ldquo;rotctl -l | more&rdquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>-i</b>,\n<b>--read-history</b></p>\n\n<p style=\"margin-left:22%;\">Read previously saved command\nand argument history from a file (default\n<i>$HOME/.rotctl_history</i>) for the current session.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Available when\n<b>rotctl</b> is built with Readline support (see\n<b>READLINE</b> below).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: To\nread a history file stored in another directory, set the\n<b>ROTCTL_HIST_DIR</b> environment variable, e.g.\n&ldquo;ROTCTL_HIST_DIR=$HOME/tmp rotctl -i&rdquo;. When\nROTCTL_HIST_DIR is not set, the value of <b>HOME</b> is\nused.</p>\n\n<p style=\"margin-left:11%;\"><b>-I</b>,\n<b>--save-history</b></p>\n\n<p style=\"margin-left:22%;\">Write current session (and any\nprevious session(s), if <b>-i</b> option is also given)\ncommand and argument history to a file (default\n<i>$HOME/.rotctl_history</i>) at the end of the current\nsession.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Complete\ncommands with arguments are saved as a single line to be\nrecalled and used or edited. Available when <b>rotctl</b> is\nbuilt with Readline support (see <b>READLINE</b> below).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: To\nwrite a history file in another directory, set the\n<b>ROTCTL_HIST_DIR</b> environment variable, e.g.\n&ldquo;ROTCTL_HIST_DIR=$HOME/tmp rotctl -I&rdquo;. When\nROTCTL_HIST_DIR is not set, the value of <b>HOME</b> is\nused.</p>\n\n<p style=\"margin-left:11%;\"><b>-v</b>, <b>--verbose</b></p>\n\n<p style=\"margin-left:22%;\">Set verbose mode, cumulative\n(see <b>DIAGNOSTICS</b> below).</p>\n\n<p style=\"margin-left:11%;\"><b>-Z</b>,\n<b>--debug-time-stamps</b></p>\n\n<p style=\"margin-left:22%;\">Enable time stamps for the\ndebug messages.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use only in\ncombination with the <b>-v</b> option as it generates no\noutput on its own.</p>\n\n<p style=\"margin-left:11%;\"><b>-h</b>, <b>--help</b></p>\n\n<p style=\"margin-left:22%;\">Show a summary of these options\nand exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-V</b>, <b>--version</b></p>\n\n<p style=\"margin-left:22%;\">Show version of <b>rotctl</b>\nand exit.</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>-</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>Stop option processing and read commands from standard\ninput.</p> </td></tr>\n</table>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See <b>Standard\nInput</b> below.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nSome options may not be implemented by a given backend and\nwill return an error. This is most likely to occur with the\n<b>--set-conf</b> and <b>--show-conf</b> options.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Be aware that\nthe backend for the rotator to be controlled, or the rotator\nitself may not support some commands. In that case, the\noperation will fail with a <b>Hamlib</b> error code.</p>\n\n<h2>COMMANDS\n<a name=\"COMMANDS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Commands can be\nentered either as a single char, or as a long command name.\nThe commands are not prefixed with a dash as the options\nare. They may be typed in when in interactive mode or\nprovided as argument(s) in command line interface mode. In\ninteractive mode commands and their arguments may be entered\non a single line (typed text shown in bold):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>P 123\n45</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Since most of\nthe <b>Hamlib</b> operations have a <b>set</b> and a\n<b>get</b> method, an upper case letter will often be used\nfor a <b>set</b> method whereas the corresponding lower case\nletter refers to the <b>get</b> method. Each operation also\nhas a long name; in interactive mode, prepend a backslash,\n&rsquo;\\&rsquo;, to enter a long command name.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Example: Use\n&ldquo;\\get_info&rdquo; in interactive mode to see the\nrotator&rsquo;s information.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe backend for the rotator to be controlled, or the rotator\nitself may not support some commands. In that case, the\noperation will fail with a <b>Hamlib</b> error message.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Standard\nInput</b> <br>\nAs an alternative to the <b>READLINE</b> interactive command\nentry or a single command for each run, <b>rotctl</b>\nfeatures a special option where a single dash\n(&rsquo;-&rsquo;) may be used to read commands from standard\ninput (<b>stdin</b>). Commands must be separated by\nwhitespace similar to the commands given on the command\nline. Comments may be added using the &rsquo;#&rsquo;\ncharacter, all text up until the end of the current line\nincluding the &rsquo;#&rsquo; character is ignored.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A simple\nexample:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>cat\n&lt;&lt;.EOF. &gt;cmds.txt</b> <br>\n&gt; <b># File of commands</b></p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"17%\"></td>\n<td width=\"-9%\">\n\n\n<p>&gt; <b>set_pos 180.0 10.0</b></p></td>\n<td width=\"30%\"></td>\n<td width=\"8%\"></td>\n<td width=\"54%\">\n\n\n<p><b># rotate</b></p></td></tr>\n</table>\n\n<p style=\"margin-left:17%;\">&gt; <b>pause 30 # wait for\naction to complete</b> <br>\n&gt; <b>get_pos # query rotator</b> <br>\n&gt;<b>.EOF.</b></p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rotctl -m\n1 - &lt;cmds.txt</b></p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">set_pos 180.0\n10.0 <br>\npause 30 <br>\nget_pos 180.000000 <br>\n10.000000</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Rotator\nCommands</b> <br>\nA summary of commands is included below (In the case of\n<b>set</b> commands the quoted italicized string is replaced\nby the value in the description. In the case of <b>get</b>\ncommands the quoted italicized string is the key name of the\nvalue returned.): <b><br>\nQ</b>|<b>q</b>, exit rotctl</p>\n\n<p style=\"margin-left:22%;\">Exit rotctl in interactive\nmode.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">When rotctl is\ncontrolling the rotator directly, will close the rotator\nbackend and port. When rotctl is connected to rotctld\n(rotator model 2), the TCP/IP connection to rotctld is\nclosed and rotctld remains running, available for another\nTCP/IP network connection.</p>\n\n<p style=\"margin-left:11%;\"><b>P</b>, <b>set_pos</b>\n'<i>Azimuth</i>' '<i>Elevation</i>'</p>\n\n<p style=\"margin-left:22%;\">Set position.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Azimuth</i>'\nand '<i>Elevation</i>' are floating point values.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Azimuth can be\n-180 to 540 depending on the rotator to allow for rotators\nfacing south and the capabilities of the rotator.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Elevation can\nbe -20 to 210 depending on the rotator.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">For\nexample:</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\"><b>P 163.0\n41.0</b></p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: If\nthe rotator does not support setting elevation (most do not)\nsupply &ldquo;0.0&rdquo; for '<i>Elevation</i>'.</p>\n\n<p style=\"margin-left:11%;\"><b>p</b>, <b>get_pos</b></p>\n\n<p style=\"margin-left:22%;\">Get position.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Azimuth</i>'\nand '<i>Elevation</i>' are returned as double precision\nfloating point values.</p>\n\n<p style=\"margin-left:11%;\"><b>M</b>, <b>move</b>\n'<i>Direction</i>' '<i>Speed</i>'</p>\n\n<p style=\"margin-left:22%;\">Move the rotator in a specific\ndirection at the given rate.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Direction</i>'\nis an integer or keyword defined as &rsquo;2&rsquo; = UP,\n&rsquo;4&rsquo; = DOWN, &rsquo;8&rsquo; = LEFT or CCW and\n&rsquo;16&rsquo; = RIGHT or CW</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Speed</i>'\nis an integer between 1 and 100. Use -1 for no change to\ncurrent speed.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nNot all backends that implement the move command use the\nSpeed value.</p>\n\n<p style=\"margin-left:11%;\"><b>S</b>, <b>stop</b></p>\n\n<p style=\"margin-left:22%;\">Stop the rotator.</p>\n\n<p style=\"margin-left:11%;\"><b>K</b>, <b>park</b></p>\n\n<p style=\"margin-left:22%;\">Park the rotator.</p>\n\n<p style=\"margin-left:11%;\"><b>C</b>, <b>set_conf</b>\n'<i>Token</i>' '<i>Value</i>'</p>\n\n<p style=\"margin-left:22%;\">Set a configuration\nparameter.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Token</i>'\nis a string; see the <b>-C</b> option and the <b>-L</b>\noutput.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Value</i>'\nis a string of up to 20 characters.</p>\n\n<p style=\"margin-left:11%;\"><b>R</b>, <b>reset</b>\n'<i>Reset</i>'</p>\n\n<p style=\"margin-left:22%;\">Reset the rotator.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Reset</i>'\naccepts an integer value of &rsquo;1&rsquo; for &ldquo;Reset\nAll&rdquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>_</b>, <b>get_info</b></p>\n\n<p style=\"margin-left:22%;\">Get miscellaneous information\nabout the rotator.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns\n'<i>Info</i>' &ldquo;Model Name&rdquo; at present.</p>\n\n<p style=\"margin-left:11%;\"><b>dump_state</b></p>\n\n<p style=\"margin-left:22%;\">Return certain state\ninformation about the rotator backend.</p>\n\n<p style=\"margin-left:11%;\"><b>1</b>, <b>dump_caps</b></p>\n\n<p style=\"margin-left:22%;\">Not a real rot remote command,\nit just dumps capabilities, i.e. what the backend knows\nabout this model, and what it can do.</p>\n\n<p style=\"margin-left:11%;\"><b>w</b>, <b>send_cmd</b>\n'<i>Cmd</i>'</p>\n\n<p style=\"margin-left:22%;\">Send a raw command string to\nthe rotator.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">ASCII CR (or\n<b>--send-cmd-term</b> value, see <b>-t</b> option) is\nappended automatically at the end of the command for text\nprotocols. For binary protocols, enter hexadecimal values as\n&ldquo;\\0xAA\\0xBB&rdquo;.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Locator\nCommands</b> <br>\nThese commands offer conversions of Degrees Minutes Seconds\nto other formats, <b>Maidenhead</b> square locator\nconversions and distance and azimuth conversions. <b><br>\nL</b>, <b>lonlat2loc</b> '<i>Longitude</i>'\n'<i>Latitude</i>' '<i>Loc Len</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns the <b>Maidenhead</b>\n'<i>Locator</i>' for the given '<i>Longitude</i>' and\n'<i>Latitude</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Floating point\nvalues are supplied. The precision of the returned square is\ncontrolled by '<i>Loc Len</i>' which should be an even\nnumbered integer value between 2 and 12.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">For\nexample:</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\"><b>L -170.0\n-85.0 12</b></p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">returns:</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\">Locator:\nAA55AA00AA00</p>\n\n<p style=\"margin-left:11%;\"><b>l</b>, <b>loc2lonlat</b>\n'<i>Locator</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Longitude</i>' and\n'<i>Latitude</i>' in decimal degrees at the approximate\ncenter of the requested <b>Maidenhead</b> grid square.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Locator</i>'\ncan be from 2 to 12 characters in length.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">West longitude\nis expressed as a negative value.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">South latitude\nis expressed as a negative value.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">For\nexample:</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\"><b>l\nAA55AA00AA00</b></p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">returns:</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\">Longitude:\n-169.999983 Latitude: -84.999991</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nDespite the use of double precision variables internally,\nsome rounding error occurs.</p>\n\n<p style=\"margin-left:11%;\"><b>D</b>, <b>dms2dec</b>\n'<i>Degrees</i>' '<i>Minutes</i>' '<i>Seconds</i>'\n'<i>S/W</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Dec Degrees</i>', a\nsigned floating point value.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Degrees</i>'\nand '<i>Minutes</i>' are integer values.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Seconds</i>'\nis a floating point value.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>S/W</i>' is\na flag with &rsquo;1&rsquo; indicating South latitude or\nWest longitude and &rsquo;0&rsquo; North or East (the flag\nis needed as computers don&rsquo;t recognize a signed zero\neven though only the '<i>Degrees</i>' value is typically\nsigned in DMS notation).</p>\n\n<p style=\"margin-left:11%;\"><b>d</b>, <b>dec2dms</b>\n'<i>Dec Degrees</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Degrees</i>'\n'<i>Minutes</i>' '<i>Seconds</i>' '<i>S/W</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Values are as\nin <b>dms2dec</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>E</b>, <b>dmmm2dec</b>\n'<i>Degrees</i>' '<i>Dec Minutes</i>' '<i>S/W</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Dec Degrees</i>', a\nsigned floating point value.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Degrees</i>'\nis an integer value.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Dec\nMinutes</i>' is a floating point value.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>S/W</i>' is\na flag as in <b>dms2dec</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>e</b>, <b>dec2dmmm</b>\n'<i>Dec Deg</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Degrees</i>'\n'<i>Minutes</i>' '<i>S/W</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Values are as\nin <b>dmmm2dec</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>B</b>, <b>qrb</b> '<i>Lon\n1</i>' '<i>Lat 1</i>' '<i>Lon 2</i>' '<i>Lat 2</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Distance</i>' and\n'<i>Azimuth</i>'.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Distance</i>'\nis in km.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Azimuth</i>'\nis in degrees.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Supplied\n<i>Lon</i>/<i>Lat</i> values are signed floating point\nnumbers.</p>\n\n<p style=\"margin-left:11%;\"><b>A</b>, <b>a_sp2a_lp</b>\n'<i>Short Path Deg</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Long Path\nDeg</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Both the\nsupplied argument and returned value are floating point\nvalues within the range of 0.00 to 360.00.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nSupplying a negative value will return an error message.</p>\n\n<p style=\"margin-left:11%;\"><b>a</b>, <b>d_sp2d_lp</b>\n'<i>Short Path km</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Long Path\nkm</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Both the\nsupplied argument and returned value are floating point\nvalues.</p>\n\n<p style=\"margin-left:11%;\"><b>pause</b>\n'<i>Seconds</i>'</p>\n\n<p style=\"margin-left:22%;\">Pause for the given whole\n(integer) number of '<i>Seconds</i>' before sending the next\ncommand to the rotator.</p>\n\n<h2>READLINE\n<a name=\"READLINE\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">If\n<b>Readline</b> library development files are found at\nconfigure time, <b>rotctl</b> will be conditonally built\nwith Readline support for command and argument entry.\nReadline command key bindings are at their defaults as\ndescribed in the\n<a href=\"https://tiswww.cwru.edu/php/chet/readline/rluserman.html\">Readline\nmanual</a>. <b>rotctl</b> sets the name &ldquo;rotctl&rdquo;\nwhich can be used in Conditional Init Constructs in the\nReadline Init File (<i>$HOME/.inputrc</i> by default) for\ncustom keybindings unique to <b>rotctl</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Command history\nis available with Readline support as described in the\n<a href=\"https://tiswww.case.edu/php/chet/readline/history.html#SEC1\">Readline\nHistory manual</a>. Command and argument strings are stored\nas single lines even when arguments are prompted for input\nindividually. Commands and arguments are not validated and\nare stored as typed with values separated by a single\nspace.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Normally\nsession history is not saved, however, use of either of the\n<b>-i</b>/<b>--read-history</b> or\n<b>-I</b>/<b>--save-history</b> options when starting\n<b>rotctl</b> will cause any previously saved history to be\nread in and/or the current and any previous session history\n(assuming the <b>-i</b> and <b>-I</b> options are given\ntogether) will be written out when <b>rotctl</b> is closed.\nEach option is mutually exclusive, i.e. either may be given\nseparately or in combination. This is useful to save a set\nof commands and then read them later but not write the\nmodified history for a consistent set of test commands in\ninteractive mode, for example.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">History is\nstored in <i>$HOME/.rotctl_history</i> by default although\nthe destination directory may be changed by setting the\n<b>ROTCTL_HIST_DIR</b> environment variable. When\nROTCTL_HIST_DIR is unset, the value of the <b>HOME</b>\nenvironment variable is used instead. Only the destination\ndirectory may be changed at this time.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">If Readline\nsupport is not found at configure time the original internal\ncommand handler is used. Readline is not used for\n<b>rotctl</b> commands entered on the command line\nregardless if Readline support is built in or not.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nReadline support is not included in the MS Windows 32 or 64\nbit binary builds supplied by the Hamlib Project. Running\n<b>rotctl</b> on the MS Windows platform in the\n&rsquo;cmd&rsquo; shell does give session command line\nhistory, however, it is not saved to disk between\nsessions.</p>\n\n<h2>DIAGNOSTICS\n<a name=\"DIAGNOSTICS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>-v</b>,\n<b>--verbose</b> option allows different levels of\ndiagnostics to be output to <b>stderr</b> and correspond to\n-v for <b>BUG</b>, -vv for <b>ERR</b>, -vvv for <b>WARN</b>,\n-vvvv for <b>VERBOSE</b>, or -vvvvv for <b>TRACE</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A given verbose\nlevel is useful for providing needed debugging information\nto the email address below. For example, TRACE output shows\nall of the values sent to and received from the radio which\nis very useful for radio backend library development and may\nbe requested by the developers.</p>\n\n<h2>EXIT STATUS\n<a name=\"EXIT STATUS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rotctl</b>\nexits with:</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>0</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if all operations completed normally;</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>1</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if there was an invalid command line option or\nargument;</p> </td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"1%\">\n\n\n<p><b>2</b></p></td>\n<td width=\"10%\"></td>\n<td width=\"78%\">\n\n\n<p>if an error was returned by <b>Hamlib</b>.</p></td></tr>\n</table>\n\n<h2>EXAMPLES\n<a name=\"EXAMPLES\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>rotctl</b> for RotorEZ using the first serial port on\nLinux:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rotctl -m\n401 -r /dev/ttyS0</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>rotctl</b> for RotorEZ using COM2 on MS Windows:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">&gt; <b>rotctl\n-m 401 -r COM2</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Connect to a\nrunning <b>rotctld</b> with rotator model 2 (&ldquo;NET\nrotctl&rdquo;) on the local host and specifying the TCP\nport, and querying the position:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rotctl -m\n2 -r localhost:4533 t_pos</b></p>\n\n<h2>BUGS\n<a name=\"BUGS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Report bugs\nto:</p>\n\n\n<p style=\"margin-left:22%;\"><a href=\"mailto:hamlib-developer@lists.sourceforge.net\">Hamlib\nDeveloper mailing list </a></p>\n\n<h2>COPYING\n<a name=\"COPYING\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This file is\npart of Hamlib, a project to develop a library that\nsimplifies radio, rotator, and amplifier control functions\nfor developers of software primarily of interest to radio\namateurs and those interested in radio communications.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Copyright\n&copy; 2001-2011 Stephane Fillod <br>\nCopyright &copy; 2002-2017 the Hamlib Group (various\ncontributors) <br>\nCopyright &copy; 2003-2020 Nate Bargmann</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This is free\nsoftware; see the file COPYING for copying conditions. There\nis NO warranty; not even for MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.</p>\n\n<h2>SEE ALSO\n<a name=\"SEE ALSO\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>less</b>(1),\n<b>more</b>(1), <b>rotctld</b>(1), <b>hamlib</b>(7)</p>\n\n<h2>COLOPHON\n<a name=\"COLOPHON\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Links to the\nHamlib Wiki, Git repository, release archives, and daily\nsnapshot archives are available via\n<a href=\"http://www.hamlib.org\">hamlib.org</a>.</p>\n<hr>\n</body>\n</html>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/doc/rotctld.1.html",
    "content": "<!-- Creator     : groff version 1.22.4 -->\n<!-- CreationDate: Wed May 18 09:31:53 2022 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<meta name=\"Content-Style\" content=\"text/css\">\n<style type=\"text/css\">\n       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }\n       h1      { text-align: center }\n</style>\n<title>ROTCTLD</title>\n\n</head>\n<body>\n\n<h1 align=\"center\">ROTCTLD</h1>\n\n<a href=\"#NAME\">NAME</a><br>\n<a href=\"#SYNOPSIS\">SYNOPSIS</a><br>\n<a href=\"#DESCRIPTION\">DESCRIPTION</a><br>\n<a href=\"#OPTIONS\">OPTIONS</a><br>\n<a href=\"#COMMANDS\">COMMANDS</a><br>\n<a href=\"#PROTOCOL\">PROTOCOL</a><br>\n<a href=\"#DIAGNOSTICS\">DIAGNOSTICS</a><br>\n<a href=\"#EXAMPLES\">EXAMPLES</a><br>\n<a href=\"#SECURITY\">SECURITY</a><br>\n<a href=\"#BUGS\">BUGS</a><br>\n<a href=\"#COPYING\">COPYING</a><br>\n<a href=\"#SEE ALSO\">SEE ALSO</a><br>\n<a href=\"#COLOPHON\">COLOPHON</a><br>\n\n<hr>\n\n\n<h2>NAME\n<a name=\"NAME\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">rotctld - TCP\nrotator control daemon</p>\n\n<h2>SYNOPSIS\n<a name=\"SYNOPSIS\"></a>\n</h2>\n\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"11%\">\n\n\n<p style=\"margin-top: 1em\"><b>rotctld</b></p></td>\n<td width=\"1%\"></td>\n<td width=\"77%\">\n\n\n<p style=\"margin-top: 1em\">[<b>-hlLuV</b>]\n[<b>-m&nbsp;</b><i>id</i>] [<b>-r&nbsp;</b><i>device</i>]\n[<b>-s&nbsp;</b><i>baud</i>] [<b>-T&nbsp;</b><i>IPADDR</i>]\n[<b>-t&nbsp;</b><i>number</i>]\n[<b>-C&nbsp;</b><i>parm=val</i>] [<b>-v</b>[<b>-Z</b>]]</p></td></tr>\n</table>\n\n<h2>DESCRIPTION\n<a name=\"DESCRIPTION\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The\n<b>rotctld</b> program is a rotator control daemon that\nhandles client requests via TCP sockets. This allows\nmultiple user programs to share one rotator (this needs more\ndevelopment). Multiple rotators can be controlled on\ndifferent TCP ports by use of multiple <b>rotctld</b>\nprocesses. The syntax of the commands are the same as\n<b>rotctl</b>(1). It is hoped that <b>rotctld</b> will be\nespecially useful for client authors using languages such as\nPerl, Python, PHP, and others.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>rotctld</b>\ncommunicates to a client through a TCP socket using text\ncommands shared with <b>rotctl</b>. The protocol is simple,\ncommands are sent to <b>rotctld</b> on one line and\n<b>rotctld</b> responds to &ldquo;get&rdquo; commands with\nthe requested values, one per line, when successful,\notherwise, it responds with one line &ldquo;RPRT x&rdquo;,\nwhere &rsquo;x&rsquo; is a negative number indicating the\nerror code. Commands that do not return values respond with\nthe line &ldquo;RPRT x&rdquo;, where &rsquo;x&rsquo; is\n&rsquo;0&rsquo; when successful, otherwise is a regative\nnumber indicating the error code. Each line is terminated\nwith a newline &rsquo;\\n&rsquo; character. This protocol is\nprimarily for use by the <b>NET rotctl</b> (rotator model 2)\nbackend.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A separate\n<b>Extended Response Protocol</b> extends the above behavior\nby echoing the received command string as a header, any\nreturned values as a key: value pair, and the &ldquo;RPRT\nx&rdquo; string as the end of response marker which includes\nthe <b>Hamlib</b> success or failure value. See the\n<b>PROTOCOL</b> section for details. Consider using this\nprotocol for clients that will interact with <b>rotctld</b>\ndirectly through a TCP socket.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Keep in mind\nthat Hamlib is BETA level software. While a lot of backend\nlibraries lack complete rotator support, the basic functions\nare usually well supported.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Please report\nbugs and provide feedback at the e-mail address given in the\n<b>BUGS</b> section below. Patches and code enhancements\nsent to the same address are welcome.</p>\n\n<h2>OPTIONS\n<a name=\"OPTIONS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This program\nfollows the usual GNU command line syntax. Short options\nthat take an argument may have the value follow immediately\nor be separated by a space. Long options starting with two\ndashes (&rsquo;-&rsquo;) require an &rsquo;=&rsquo; between\nthe option and any argument.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported options: <b><br>\n-m</b>, <b>--model</b>=<i>id</i></p>\n\n<p style=\"margin-left:22%;\">Select rotator model\nnumber.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">See model list\n(use &ldquo;rotctld -l&rdquo;).</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\n<b>rotctl</b> (or third party software using the C API) will\nuse rotator model 2 for <b>NET rotctl</b> (this model number\nis not used for rotctld even though it shows in the model\nlist).</p>\n\n<p style=\"margin-left:11%;\"><b>-r</b>,\n<b>--rot-file</b>=<i>device</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>device</i> as the file\nname of the port connected to the rotator.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Often a serial\nport, but could be a USB to serial adapter. Typically\n<i>/dev/ttyS0</i>, <i>/dev/ttyS1</i>, <i>/dev/ttyUSB0</i>,\netc. on Linux, <i>COM1</i>, <i>COM2</i>, etc. on MS Windows.\nThe BSD flavors and Mac OS/X have their own designations.\nSee your system&rsquo;s documentation.</p>\n\n<p style=\"margin-left:11%;\"><b>-s</b>,\n<b>--serial-speed</b>=<i>baud</i></p>\n\n<p style=\"margin-left:22%;\">Set serial speed to <i>baud</i>\nrate.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Uses maximum\nserial speed from rotator backend capabilities as the\ndefault.</p>\n\n<p style=\"margin-left:11%;\"><b>-T</b>,\n<b>--listen-addr</b>=<i>IPADDR</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>IPADDR</i> as the\nlistening IP address.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The default is\nANY.</p>\n\n<p style=\"margin-left:11%;\"><b>-t</b>,\n<b>--port</b>=<i>number</i></p>\n\n<p style=\"margin-left:22%;\">Use <i>number</i> as the TCP\nlistening port.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The default is\n4533.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: As\n<b>rigctld</b>'s default port is 4532, it is advisable to\nuse odd numbered ports for <b>rotctld</b>, e.g. 4533, 4535,\n4537, etc.</p>\n\n<p style=\"margin-left:11%;\"><b>-L</b>,\n<b>--show-conf</b></p>\n\n<p style=\"margin-left:22%;\">List all configuration\nparameters for the rotator defined with <b>-m</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>-C</b>,\n<b>--set-conf</b>=<i>parm=val</i>[<i>,parm=val</i>]</p>\n\n<p style=\"margin-left:22%;\">Set rotator configuration\nparameter(s), e.g. <i>stop_bits=2</i>.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use the\n<b>-L</b> option above for a list of configuration\nparameters for a given model number.</p>\n\n<p style=\"margin-left:11%;\"><b>-u</b>,\n<b>--dump-state</b></p>\n\n<p style=\"margin-left:22%;\">Dump state for the rotator\ndefined with <b>-m</b> above and exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-u</b>,\n<b>--dump-caps</b></p>\n\n<p style=\"margin-left:22%;\">Dump capabilities for the\nrotator defined with <b>-m</b> above and exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-l</b>, <b>--list</b></p>\n\n<p style=\"margin-left:22%;\">List all rotator model numbers\ndefined in <b>Hamlib</b> and exit.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">The list is\nsorted by model number.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: In\nLinux the list can be scrolled back using\n<b>Shift-PageUp</b>/<b>Shift-PageDown</b>, or using the\nscrollbars of a virtual terminal in X or the cmd window in\nWindows. The output can be piped to <b>more</b>(1) or\n<b>less</b>(1), e.g. &ldquo;rotctl -l | more&rdquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>-v</b>, <b>--verbose</b></p>\n\n<p style=\"margin-left:22%;\">Set verbose mode, cumulative\n(see <b>DIAGNOSTICS</b> below).</p>\n\n<p style=\"margin-left:11%;\"><b>-Z</b>,\n<b>--debug-time-stamps</b></p>\n\n<p style=\"margin-left:22%;\">Enable time stamps for the\ndebug messages.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Use only in\ncombination with the <b>-v</b> option as it generates no\noutput on its own.</p>\n\n<p style=\"margin-left:11%;\"><b>-h</b>, <b>--help</b></p>\n\n<p style=\"margin-left:22%;\">Show a summary of these options\nand exit.</p>\n\n<p style=\"margin-left:11%;\"><b>-V</b>, <b>--version</b></p>\n\n<p style=\"margin-left:22%;\">Show version of <b>rotctld</b>\nand exit.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nSome options may not be implemented by a given backend and\nwill return an error. This is most likely to occur with the\n<b>--set-conf</b> and <b>--show-conf</b> options.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Be aware that\nthe backend for the rotator to be controlled, or the rotator\nitself may not support some commands. In that case, the\noperation will fail with a <b>Hamlib</b> error code.</p>\n\n<h2>COMMANDS\n<a name=\"COMMANDS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Commands can be\nsent over the TCP socket either as a single char, or as a\nlong command name plus the value(s) space separated on one\n&rsquo;\\n&rsquo; terminated line. See <b>PROTOCOL</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Since most of\nthe <b>Hamlib</b> operations have a <b>set</b> and a\n<b>get</b> method, an upper case letter will be used for\n<b>set</b> methods whereas the corresponding lower case\nletter refers to the <b>get</b> method. Each operation also\nhas a long name; prepend a backslash, &rsquo;\\&rsquo;, to\nsend a long command name.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Example (Perl):\n&ldquo;print $socket &quot;\\\\dump_caps\\n&quot;;&rdquo; to\nsee what the rotator&rsquo;s backend can do (<b>Note</b>: In\nPerl and many other languages a &rsquo;\\&rsquo; will need to\nbe escaped with a preceding &rsquo;\\&rsquo; so that even\nthough two backslash characters appear in the code, only one\nwill be passed to <b>rotctld</b>. This is a possible bug,\nbeware!).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Note</b>:\nThe backend for the rotator to be controlled, or the rotator\nitself may not support some commands. In that case, the\noperation will fail with a <b>Hamlib</b> error message.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Here is a\nsummary of the supported commands (In the case of <b>set</b>\ncommands the quoted italicized string is replaced by the\nvalue in the description. In the case of <b>get</b> commands\nthe quoted italicized string is the key name of the value\nreturned.): <b><br>\nP</b>, <b>set_pos</b> '<i>Azimuth</i>'\n'<i>Elevation</i>'</p>\n\n<p style=\"margin-left:22%;\">Set position.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Azimuth</i>'\nand '<i>Elevation</i>' are floating point values.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">For example\n(typed text shown in bold):</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\"><b>P 163.0\n41.0</b></p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>: If\nthe rotator does not support setting elevation (most do not)\nsupply &ldquo;0.0&rdquo; for '<i>Elevation</i>'.</p>\n\n<p style=\"margin-left:11%;\"><b>p</b>, <b>get_pos</b></p>\n\n<p style=\"margin-left:22%;\">Get position.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Azimuth</i>'\nand '<i>Elevation</i>' are returned as double precision\nfloating point values.</p>\n\n<p style=\"margin-left:11%;\"><b>M</b>, <b>move</b>\n'<i>Direction</i>' '<i>Speed</i>'</p>\n\n<p style=\"margin-left:22%;\">Move the rotator in a specific\ndirection at the given rate.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Direction</i>'\nis an integer defined as &rsquo;2&rsquo; = Up,\n&rsquo;4&rsquo; = Down, &rsquo;8&rsquo; = Left, and\n&rsquo;16&rsquo; = Right.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Speed</i>'\nis an integer between 1 and 100. Use -1 for no change to\ncurrent speed.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nNot all backends that implement the move command use the\nSpeed value.</p>\n\n<p style=\"margin-left:11%;\"><b>S</b>, <b>stop</b></p>\n\n<p style=\"margin-left:22%;\">Stop the rotator.</p>\n\n<p style=\"margin-left:11%;\"><b>K</b>, <b>park</b></p>\n\n<p style=\"margin-left:22%;\">Park the rotator.</p>\n\n<p style=\"margin-left:11%;\"><b>C</b>, <b>set_conf</b>\n'<i>Token</i>' '<i>Value</i>'</p>\n\n<p style=\"margin-left:22%;\">Set a configuration\nparameter.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Token</i>'\nis a string; see the <b>-C</b> option and the <b>-L</b>\noutput.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Value</i>'\nis a string of up to 20 characters.</p>\n\n<p style=\"margin-left:11%;\"><b>R</b>, <b>reset</b>\n'<i>Reset</i>'</p>\n\n<p style=\"margin-left:22%;\">Reset the rotator.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Reset</i>'\naccepts an integer value of &rsquo;1&rsquo; for &ldquo;Reset\nAll&rdquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>_</b>, <b>get_info</b></p>\n\n<p style=\"margin-left:22%;\">Get misc information about the\nrotator.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Returns\n'<i>Info</i>' &ldquo;Model Name&rdquo;.</p>\n\n<p style=\"margin-left:11%;\"><b>dump_state</b></p>\n\n<p style=\"margin-left:22%;\">Return certain state\ninformation about the rotator backend.</p>\n\n<p style=\"margin-left:11%;\"><b>1</b>, <b>dump_caps</b></p>\n\n<p style=\"margin-left:22%;\">Not a real rot remote command,\nit just dumps capabilities, i.e. what the backend knows\nabout this model, and what it can do.</p>\n\n<p style=\"margin-left:11%;\"><b>w</b>, <b>send_cmd</b>\n'<i>Cmd</i>'</p>\n\n<p style=\"margin-left:22%;\">Send a raw command string to\nthe rotator.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">ASCII CR is\nappended automatically at the end of the command for text\nprotocols. For binary protocols, enter hexadecimal values as\n&ldquo;\\0xAA\\0xBB&rdquo;.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Locator\nCommands</b> <br>\nThese commands offer conversions of Degrees Minutes Seconds\nto other formats, <b>Maidenhead</b> square locator\nconversions and distance and azimuth conversions. <b><br>\nL</b>, <b>lonlat2loc</b> '<i>Longitude</i>'\n'<i>Latitude</i>' '<i>Loc Len</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns the <b>Maidenhead</b>\n'<i>Locator</i>' for the given '<i>Longitude</i>' and\n'<i>Latitude</i>'.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Longitude</i>'\nand '<i>Latitude</i>' are floating point values.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Loc\nLen</i>' is the precision of the returned square and should\nbe an even numbered integer value between 2 and 12.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">For\nexample:</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\"><b>L -170.0\n-85.0 12</b></p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">returns:</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\">Locator:\nAA55AA00AA00</p>\n\n<p style=\"margin-left:11%;\"><b>l</b>, <b>loc2lonlat</b>\n'<i>Locator</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Longitude</i>' and\n'<i>Latitude</i>' in decimal degrees at the approximate\ncenter of the requested <b>Maidenhead</b> grid square.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Locator</i>'\ncan be from 2 to 12 characters in length.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">West longitude\nis expressed as a negative value.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">South latitude\nis expressed as a negative value.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">For\nexample:</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\"><b>l\nAA55AA00AA00</b></p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">returns:</p>\n\n<p style=\"margin-left:28%; margin-top: 1em\">Longitude:\n-169.999983 Latitude: -84.999991</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nDespite the use of double precision variables internally,\nsome rounding error occurs.</p>\n\n<p style=\"margin-left:11%;\"><b>D</b>, <b>dms2dec</b>\n'<i>Degrees</i>' '<i>Minutes</i>' '<i>Seconds</i>'\n'<i>S/W</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Dec Degrees</i>', a\nsigned floating point value.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Degrees</i>'\nand '<i>Minutes</i>' are integer values.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Seconds</i>'\nis a floating point value.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>S/W</i>' is\na flag with &rsquo;1&rsquo; indicating South latitude or\nWest longitude and &rsquo;0&rsquo; North or East (the flag\nis needed as computers don&rsquo;t recognize a signed zero\neven though only the '<i>Degrees</i>' value is typically\nsigned in DMS notation).</p>\n\n<p style=\"margin-left:11%;\"><b>d</b>, <b>dec2dms</b>\n'<i>Dec Degrees</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Degrees</i>'\n'<i>Minutes</i>' '<i>Seconds</i>' '<i>S/W</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Values are as\nin <b>dms2dec</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>E</b>, <b>dmmm2dec</b>\n'<i>Degrees</i>' '<i>Dec Minutes</i>' '<i>S/W</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Dec Degrees</i>', a\nsigned floating point value.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Degrees</i>'\nis an integer value.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Dec\nMinutes</i>' is a floating point value.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>S/W</i>' is\na flag as in <b>dms2dec</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>e</b>, <b>dec2dmmm</b>\n'<i>Dec Deg</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Degrees</i>'\n'<i>Minutes</i>' '<i>S/W</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Values are as\nin <b>dmmm2dec</b> above.</p>\n\n<p style=\"margin-left:11%;\"><b>B</b>, <b>qrb</b> '<i>Lon\n1</i>' '<i>Lat 1</i>' '<i>Lon 2</i>' '<i>Lat 2</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Distance</i>' and\n'<i>Azimuth</i>'.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Distance</i>'\nis in km.</p>\n\n\n<p style=\"margin-left:22%; margin-top: 1em\">'<i>Azimuth</i>'\nis in degrees.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Supplied\n<i>Lon</i>/<i>Lat</i> values are signed floating point\nnumbers.</p>\n\n<p style=\"margin-left:11%;\"><b>A</b>, <b>a_sp2a_lp</b>\n'<i>Short Path Deg</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Long Path\nDeg</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Both the\nsupplied argument and returned value are floating point\nvalues within the range of 0.00 to 360.00.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nSupplying a negative value will return an error message.</p>\n\n<p style=\"margin-left:11%;\"><b>a</b>, <b>d_sp2d_lp</b>\n'<i>Short Path km</i>'</p>\n\n<p style=\"margin-left:22%;\">Returns '<i>Long Path\nkm</i>'.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">Both the\nsupplied argument and returned value are floating point\nvalues.</p>\n\n<p style=\"margin-left:11%;\"><b>pause</b>\n'<i>Seconds</i>'</p>\n\n<p style=\"margin-left:22%;\">Pause for the given whole\n(integer) number of '<i>Seconds</i>' before sending the next\ncommand to the rotator.</p>\n\n<h2>PROTOCOL\n<a name=\"PROTOCOL\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">There are two\nprotocols in use by <b>rotctld</b>, the <b>Default\nProtocol</b> and the <b>Extended Response Protocol</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>Default\nProtocol</b> is intended primarily for the communication\nbetween <b>Hamlib</b> library functions and <b>rotctld</b>\n(&ldquo;NET rotctl&rdquo;, available using rotator model\n&rsquo;2&rsquo;).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>Extended\nResponse Protocol</b> is intended to be used with scripts or\nother programs interacting directly with <b>rotctld</b> as\nconsistent feedback is provided.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Default\nProtocol</b> <br>\nThe <b>Default Protocol</b> is intentionally simple.\nCommands are entered on a single line with any needed\nvalues. In practice, reliable results are obtained by\nterminating each command string with a newline character,\n&rsquo;\\n&rsquo;.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Example set\nposition (Perl code):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>print\n$socket &quot;P 135 10\\n&quot;;</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">or:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>print\n$socket &quot;\\\\set_pos 135 10\\n&quot;;</b> # escape leading\n&rsquo;\\&rsquo;</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A one line\nresponse will be sent as a reply to <b>set</b> commands,\n&ldquo;RPRT <i>x</i>\\n&rdquo; where <i>x</i> is the Hamlib\nerror code with &rsquo;0&rsquo; indicating success of the\ncommand.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Responses from\n<b>rotctld get</b> commands are text values and match the\nsame tokens used in the <b>set</b> commands. Each value is\nreturned on its own line. On error the string &ldquo;RPRT\n<i>x</i>\\n&rdquo; is returned where <i>x</i> is the Hamlib\nerror code.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Example get\nposition (Perl code):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\"><b>print\n$socket &quot;p\\n&quot;;</b> <br>\n&quot;135&quot; <br>\n&quot;10&quot;</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Most <b>get</b>\nfunctions return one to three values. A notable exception is\nthe <b>dump_caps</b> command which returns many lines of\n<b>key</b>:<i>value</i> pairs.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This protocol\nis primarily used by the &ldquo;NET rotctl&rdquo; (rotctl\nmodel 2) backend which allows applications already written\nfor Hamlib&rsquo;s C API to take advantage of <b>rotctld</b>\nwithout the need of rewriting application code. An\napplication&rsquo;s user can select rotator model 2\n(&ldquo;NET rotctl&rdquo;) and then set <b>rot_pathname</b>\nto &ldquo;localhost:4533&rdquo; or other network\n<i>host</i>:<i>port</i> (set by the <b>-T</b>/<b>-t</b>\noptions, respectively, above).</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Extended\nResponse Protocol</b> <br>\nThe Extended Response protocol adds several rules to the\nstrings returned by <b>rotctld</b> and adds a rule for the\ncommand syntax.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">1. The command\nreceived by <b>rotctld</b> is echoed with its long command\nname followed by the value(s) (if any) received from the\nclient terminated by the specified response separator as the\nfirst record of the response.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">2. The last\nrecord of each block is the string &ldquo;RPRT\n<i>x</i>\\n&rdquo; where <i>x</i> is the numeric return value\nof the Hamlib backend function that was called by the\ncommand.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">3. Any records\nconsisting of data values returned by the rotator backend\nare prepended by a string immediately followed by a colon\nthen a space and then the value terminated by the response\nseparator, e.g. &ldquo;Azimuth: 90.000000\\n&rdquo; when the\ncommand was prepended by &rsquo;+&rsquo;.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">4. All commands\nreceived will be acknowledged by <b>rotctld</b> with records\nfrom rules 1 and 2. Records from rule 3 are only returned\nwhen data values must be returned to the client.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">An example\nresponse to a <b>P</b> command sent from the shell prompt\n(note the prepended &rsquo;+&rsquo;):</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>echo\n&quot;+P 90 45&quot; | nc -w 1 localhost 4533</b> <br>\nset_pos: 90 45 <br>\nRPRT 0</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">In this case\nthe long command name and values are returned on the first\nline and the second line contains the end of block marker\nand the numeric rotor backend return value indicating\nsuccess.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">An example\nresponse to a <b>get_pos</b> query:</p>\n\n<p style=\"margin-left:15%; margin-top: 1em\">$ <b>echo\n&quot;+\\get_pos&quot; | nc -w 1 localhost 4533</b> <br>\nget_pos: <br>\nAzimuth: 90.000000 <br>\nElevation: 45.000000 <br>\nRPRT 0</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nThe &rsquo;\\&rsquo; is still required for the long command\nname even with the ERP character.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">In this case,\nas no value is passed to <b>rotctld</b>, the first line\nconsists only of the long command name. The final line shows\nthat the command was processed successfully by the rotor\nbackend.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Invoking the\nExtended Response Protocol requires prepending a command\nwith a punctuation character. As shown in the examples\nabove, prepending a &rsquo;+&rsquo; character to the command\nresults in the responses being separated by a newline\ncharacter (&rsquo;\\n&rsquo;). Any other punctuation\ncharacter recognized by the C <b>ispunct</b>() function\nexcept &rsquo;\\&rsquo;, &rsquo;?&rsquo;, or &rsquo;_&rsquo;\nwill cause that character to become the response separator\nand the entire response will be on one line.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Separator\ncharacter summary:</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"4%\">\n\n\n<p>&rsquo;<b>+</b>&rsquo;</p></td>\n<td width=\"7%\"></td>\n<td width=\"78%\">\n\n\n<p>Each record of the response is appended with a newline\n(&rsquo;\\n&rsquo;).</p> </td></tr>\n</table>\n\n<p style=\"margin-left:11%;\">&rsquo;<b>;</b>&rsquo;,\n&rsquo;<b>|</b>&rsquo;, or, &rsquo;<b>,</b>&rsquo;</p>\n\n<p style=\"margin-left:22%;\">Each record of the response is\nappended by the given character resulting in entire response\non one line.</p>\n\n<p style=\"margin-left:22%; margin-top: 1em\">These are\ncommon record separators for text representations of\nspreadsheet data, etc.</p>\n\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\"\n       cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"4%\">\n\n\n<p>&rsquo;<b>?</b>&rsquo;</p></td>\n<td width=\"7%\"></td>\n<td width=\"78%\">\n\n\n<p>Reserved for help in <b>rotctl</b>.</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"4%\">\n\n\n<p>&rsquo;<b>_</b>&rsquo;</p></td>\n<td width=\"7%\"></td>\n<td width=\"78%\">\n\n\n<p>Reserved for <b>get_info</b> short command</p></td></tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"></td>\n<td width=\"4%\">\n\n\n<p>&rsquo;<b>#</b>&rsquo;</p></td>\n<td width=\"7%\"></td>\n<td width=\"78%\">\n\n\n<p>Reserved for comments when reading a command file\nscript.</p> </td></tr>\n</table>\n\n<p style=\"margin-left:22%; margin-top: 1em\"><b>Note</b>:\nOther punctuation characters have not been tested! Use at\nyour own risk.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">For example,\ninvoking a <b>get_pos</b> query with a leading\n&rsquo;;&rsquo; returns:</p>\n\n\n<p style=\"margin-left:17%; margin-top: 1em\">get_pos:;Azimuth:\n90.000000;Elevation: 45.000000;RPRT 0</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Or, using the\npipe character &rsquo;|&rsquo; returns:</p>\n\n\n<p style=\"margin-left:17%; margin-top: 1em\">get_pos:|Azimuth:\n90.000000|Elevation: 45.000000|RPRT 0</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">And a\n<b>set_pos</b> command prepended with a &rsquo;|&rsquo;\nreturns:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">set_pos: 135\n22.5|RPRT 0</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Such a format\nwill allow reading a response as a single event using a\npreferred response separator. Other punctuation characters\nhave not been tested!</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">All commands\nwith the exception of <b>set_conf</b> have been tested with\nthe Extended Response protocol and the included\n<b>testrotctld.pl</b> Perl script.</p>\n\n<h2>DIAGNOSTICS\n<a name=\"DIAGNOSTICS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The <b>-v</b>,\n<b>--verbose</b> option allows different levels of\ndiagnostics to be output to <b>stderr</b> and correspond to\n-v for <b>BUG</b>, -vv for <b>ERR</b>, -vvv for <b>WARN</b>,\n-vvvv for <b>VERBOSE</b>, or -vvvvv for <b>TRACE</b>.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">A given verbose\nlevel is useful for providing needed debugging information\nto the email address below. For example, TRACE output shows\nall of the values sent to and received from the radio which\nis very useful for radio backend library development and may\nbe requested by the developers.</p>\n\n<h2>EXAMPLES\n<a name=\"EXAMPLES\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>rotctld</b> for a Hy-Gain Ham IV rotor with the Idiom\nPress RotorEZ board installed using a USB-to-serial adapter\nand backgrounding:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rotctld -m\n401 -r /dev/ttyUSB1 &amp;</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Start\n<b>rotctld</b> for RotorEZ using COM2 on Win32:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">&gt; <b>rotctl\n-m 401 -r COM2</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Connect to the\nalready running <b>rotctld</b>, and set position to 135.0\ndegrees azimuth and 30.0 degrees elevation with a 1 second\nread timeout from the shell prompt:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>echo\n&quot;\\set_pos 135.0 30.0&quot; | nc -w 1 localhost\n4533</b></p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Connect to a\nrunning <b>rotctld</b> with <b>rotctl</b> on the local\nhost:</p>\n\n<p style=\"margin-left:17%; margin-top: 1em\">$ <b>rotctl -m\n2</b></p>\n\n<h2>SECURITY\n<a name=\"SECURITY\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">No\nauthentication whatsoever; DO NOT leave this TCP port open\nwide to the Internet. Please ask if stronger security is\nneeded or consider using a Secure Shell (<b>ssh</b>(1))\ntunnel.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">As\n<b>rotctld</b> does not need any greater permissions than\n<b>rotctl</b>, it is advisable to not start <b>rotctld</b>\nas &ldquo;root&rdquo; or another system user account in\norder to limit any vulnerability.</p>\n\n<h2>BUGS\n<a name=\"BUGS\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">The daemon is\nnot detaching and backgrounding itself.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">No method to\nexit the daemon so the <b>kill</b>(1) command must be used\nto terminate it.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Multiple\nclients using the daemon may experience contention with the\nconnected rotator.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Report bugs\nto:</p>\n\n\n<p style=\"margin-left:22%;\"><a href=\"mailto:hamlib-developer@lists.sourceforge.net\">Hamlib\nDeveloper mailing list </a></p>\n\n<h2>COPYING\n<a name=\"COPYING\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">This file is\npart of Hamlib, a project to develop a library that\nsimplifies radio, rotator, and amplifier control functions\nfor developers of software primarily of interest to radio\namateurs and those interested in radio communications.</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">Copyright\n&copy; 2000-2009 Stephane Fillod <br>\nCopyright &copy; 2000-2018 the Hamlib Group (various\ncontributors) <br>\nCopyright &copy; 2011-2020 Nate Bargmann</p>\n\n<p style=\"margin-left:11%; margin-top: 1em\">This is free\nsoftware; see the file COPYING for copying conditions. There\nis NO warranty; not even for MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.</p>\n\n<h2>SEE ALSO\n<a name=\"SEE ALSO\"></a>\n</h2>\n\n\n\n<p style=\"margin-left:11%; margin-top: 1em\"><b>kill</b>(1),\n<b>rotctl</b>(1), <b>ssh</b>(1), <b>hamlib</b>(7)</p>\n\n<h2>COLOPHON\n<a name=\"COLOPHON\"></a>\n</h2>\n\n\n<p style=\"margin-left:11%; margin-top: 1em\">Links to the\nHamlib Wiki, Git repository, release archives, and daily\nsnapshot archives are available via\n<a href=\"http://www.hamlib.org\">hamlib.org</a>.</p>\n<hr>\n</body>\n</html>\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/include/hamlib/amplifier.h",
    "content": "/*\n *  Hamlib Interface - Amplifier API header\n *  Copyright (c) 2000-2005 by Stephane Fillod\n *\n *\n *   This library is free software; you can redistribute it and/or\n *   modify it under the terms of the GNU Lesser General Public\n *   License as published by the Free Software Foundation; either\n *   version 2.1 of the License, or (at your option) any later version.\n *\n *   This library is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n *   Lesser General Public License for more details.\n *\n *   You should have received a copy of the GNU Lesser General Public\n *   License along with this library; if not, write to the Free Software\n *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n *\n */\n\n#ifndef _AMPLIFIER_H\n#define _AMPLIFIER_H 1\n\n#include <hamlib/rig.h>\n#include <hamlib/amplist.h>\n\n/**\n * \\addtogroup amplifier\n * @{\n */\n\n/**\n * \\brief Hamlib amplifier data structures.\n *\n * \\file amplifier.h\n *\n * This file contains the data structures and declarations for the Hamlib\n * amplifier Application Programming Interface (API).\n *\n * See the amplifier.c file for details on the amplifier API functions.\n */\n\n\n\n__BEGIN_DECLS\n\n/* Forward struct references */\n\nstruct amp;\nstruct amp_state;\n\n\n/**\n * \\brief Main amplifier handle type definition.\n *\n * \\typedef typedef struct amp AMP\n *\n * The #AMP handle is returned by amp_init() and is passed as a parameter to\n * every amplifier specific API call.\n *\n * amp_cleanup() must be called when this handle is no longer needed.\n */\ntypedef struct amp AMP;\n\n\n/**\n * \\brief Type definition for\n * <a href=\"https://en.wikipedia.org/wiki/Standing_wave_ratio\" >SWR (Standing Wave Ratio)</a>.\n *\n * \\typedef typedef float swr_t\n *\n * The \\a swr_t type is used as a parameter for the amp_get_swr() function.\n *\n * The unit of \\a swr_t is 1.0 to the maximum value reported by the amplifier's\n * internal antenna system tuner, i.e.\n * <a href=\"http://www.arrl.org/transmatch-antenna-tuner\" >transmatch</a>,\n * representing the ratio of 1.0:1 to Maximum:1.\n */\ntypedef float swr_t;\n\n\n/**\n * \\brief Type definition for the\n * <a href=\"http://www.arrl.org/transmatch-antenna-tuner\" >transmatch</a>\n * tuning values of\n * <a href=\"https://en.wikipedia.org/wiki/Capacitance\" >capacitance</a>\n * and\n * <a href=\"https://en.wikipedia.org/wiki/Inductance\" >inductance</a>.\n *\n * \\typedef typedef float tune_value_t\n *\n * The \\a tune_value_t type is used as a parameter for amp_get_level().\n *\n * The unit of \\a tune_value_t is\n * <a href=\"https://en.wikipedia.org/wiki/Farad\" >picoFarads (pF)</a>\n * or\n * <a href=\"https://en.wikipedia.org/wiki/Henry_(unit)\" >nanoHenrys (nH)</a>.\n */\ntypedef int tune_value_t;\n\n\n/**\n * \\brief The token in the netampctl protocol for returning an error condition code.\n */\n#define NETAMPCTL_RET \"RPRT \"\n\n\n//! @cond Doxygen_Suppress\ntypedef enum\n{\n  AMP_RESET_MEM,    // erase tuner memory\n  AMP_RESET_FAULT,  // reset any fault\n  AMP_RESET_AMP     // for kpa1500\n} amp_reset_t;\n//! @endcond\n\n/**\n * \\brief Amplifier type flags\n */\ntypedef enum\n{\n  AMP_FLAG_1 = (1 << 1),      /*!< TBD */\n  AMP_FLAG_2 = (1 << 2)       /*!< TBD */\n} amp_type_t;\n\n//! @cond Doxygen_Suppress\n// TBD AMP_TYPE\n#define AMP_TYPE_MASK  (AMP_FLAG_1|AMP_FLAG_2)\n\n#define AMP_TYPE_OTHER 0\n#define AMP_TYPE_1     AMP_FLAG_1\n#define AMP_TYPE_2     AMP_FLAG_2\n#define AMP_TYPE_ALL   (AMP_FLAG_1|AMP_FLAG_2)\n//! @endcond\n\n\n//! @cond Doxygen_Suppress\nenum amp_level_e\n{\n  AMP_LEVEL_NONE          = 0,        /*!< '' -- No Level. */\n  AMP_LEVEL_SWR           = (1 << 0), /*!< \\c SWR 1.0 or greater. */\n  AMP_LEVEL_NH            = (1 << 1), /*!< \\c Tune setting in nanohenries. */\n  AMP_LEVEL_PF            = (1 << 2), /*!< \\c Tune setting in picofarads. */\n  AMP_LEVEL_PWR_INPUT     = (1 << 3), /*!< \\c Power reading from amplifier. */\n  AMP_LEVEL_PWR_FWD       = (1 << 4), /*!< \\c Power reading forward. */\n  AMP_LEVEL_PWR_REFLECTED = (1 << 5), /*!< \\c Power reading reverse. */\n  AMP_LEVEL_PWR_PEAK      = (1 << 6), /*!< \\c Power reading peak. */\n  AMP_LEVEL_FAULT         = (1 << 7)  /*!< \\c Fault code. */\n};\n//! @endcond\n\n//! @cond Doxygen_Suppress\n#define AMP_LEVEL_FLOAT_LIST  (AMP_LEVEL_SWR)\n#define AMP_LEVEL_STRING_LIST  (AMP_LEVEL_FAULT)\n#define AMP_LEVEL_IS_FLOAT(l) ((l)&AMP_LEVEL_FLOAT_LIST)\n#define AMP_LEVEL_IS_STRING(l) ((l)&AMP_LEVEL_STRING_LIST)\n//! @endcond\n\n/* Basic amp type, can store some useful info about different amplifiers. Each\n * lib must be able to populate this structure, so we can make useful\n * enquiries about capabilities.\n */\n\n//! @cond Doxygen_Suppress\n#define AMP_MODEL(arg) .amp_model=arg,.macro_name=#arg\n//! @endcond\n\n/**\n * \\brief Amplifier capabilities.\n *\n * \\struct amp_caps\n *\n * The main idea of this struct is that it will be defined by the backend\n * amplifier driver and will remain read-only for the application.  Fields\n * that need to be modifiable by the application are copied into the\n * amp_state structure, which is the private memory area of the #AMP instance.\n *\n * This way you can have several amplifiers running within the same\n * application, sharing the amp_caps structure of the backend, while keeping\n * their own customized data.\n *\n * \\b Note: Don't move fields around and only add new fields at the end of the\n * amp_caps structure.  Shared libraries and DLLs depend on a constant\n * structure to maintain compatibility.\n */\nstruct amp_caps\n{\n  amp_model_t amp_model;                      /*!< Amplifier model as defined in amplist.h. */\n  const char *model_name;                     /*!< Model name, e.g. MM-5k. */\n  const char *mfg_name;                       /*!< Manufacturer, e.g. Moonbeam. */\n  const char *version;                        /*!< Driver version, typically in YYYYMMDD.x format. */\n  const char *copyright;                      /*!< Copyright info (should be LGPL). */\n  enum rig_status_e status;                   /*!< Driver status. */\n\n  int amp_type;                               /*!< Amplifier type. */\n  enum rig_port_e port_type;                  /*!< Type of communication port (serial, ethernet, etc.). */\n\n  int serial_rate_min;                        /*!< Minimal serial speed. */\n  int serial_rate_max;                        /*!< Maximal serial speed. */\n  int serial_data_bits;                       /*!< Number of data bits. */\n  int serial_stop_bits;                       /*!< Number of stop bits. */\n  enum serial_parity_e serial_parity;         /*!< Parity. */\n  enum serial_handshake_e serial_handshake;   /*!< Handshake. */\n\n  int write_delay;                            /*!< Write delay. */\n  int post_write_delay;                       /*!< Post-write delay. */\n  int timeout;                                /*!< Timeout. */\n  int retry;                                  /*!< Number of retries if a command fails. */\n\n  const struct confparams *cfgparams;         /*!< Configuration parameters. */\n  const rig_ptr_t priv;                       /*!< Private data. */\n  const char *amp_model_macro_name;           /*!< Model macro name. */\n\n  setting_t has_get_level;                    /*!< List of get levels. */\n  setting_t has_set_level;                    /*!< List of set levels.  */\n\n  gran_t level_gran[RIG_SETTING_MAX];         /*!< Level granularity. */\n  gran_t parm_gran[RIG_SETTING_MAX];          /*!< Parameter granularity. */\n\n  /*\n   * Amp Admin API\n   *\n   */\n\n  int (*amp_init)(AMP *amp);    /*!< Pointer to backend implementation of ::amp_init(). */\n  int (*amp_cleanup)(AMP *amp); /*!< Pointer to backend implementation of ::amp_cleanup(). */\n  int (*amp_open)(AMP *amp);    /*!< Pointer to backend implementation of ::amp_open(). */\n  int (*amp_close)(AMP *amp);   /*!< Pointer to backend implementation of ::amp_close(). */\n\n  int (*set_freq)(AMP *amp, freq_t val);  /*!< Pointer to backend implementation of ::amp_set_freq(). */\n  int (*get_freq)(AMP *amp, freq_t *val); /*!< Pointer to backend implementation of ::amp_get_freq(). */\n\n  int (*set_conf)(AMP *amp, token_t token, const char *val); /*!< Pointer to backend implementation of ::amp_set_conf(). */\n  int (*get_conf2)(AMP *amp, token_t token, char *val, int val_len);       /*!< Pointer to backend implementation of ::amp_get_conf(). */\n  int (*get_conf)(AMP *amp, token_t token, char *val);       /*!< Pointer to backend implementation of ::amp_get_conf(). */\n\n  /*\n   *  General API commands, from most primitive to least.. :()\n   *  List Set/Get functions pairs\n   */\n\n  int (*reset)(AMP *amp, amp_reset_t reset);                   /*!< Pointer to backend implementation of ::amp_reset(). */\n  int (*get_level)(AMP *amp, setting_t level, value_t *val);   /*!< Pointer to backend implementation of ::amp_get_level(). */\n  int (*get_ext_level)(AMP *amp, token_t level, value_t *val); /*!< Pointer to backend implementation of ::amp_get_ext_level(). */\n  int (*set_powerstat)(AMP *amp, powerstat_t status);          /*!< Pointer to backend implementation of ::amp_set_powerstat(). */\n  int (*get_powerstat)(AMP *amp, powerstat_t *status);         /*!< Pointer to backend implementation of ::amp_get_powerstat(). */\n\n\n  /* get firmware info, etc. */\n  const char *(*get_info)(AMP *amp); /*!< Pointer to backend implementation of ::amp_get_info(). */\n\n//! @cond Doxygen_Suppress\n  setting_t levels;\n  unsigned ext_levels;\n//! @endcond\n  const struct confparams *extlevels;         /*!< Extension levels list.  \\sa extamp.c */\n  const struct confparams *extparms;          /*!< Extension parameters list.  \\sa extamp.c */\n\n  const char *macro_name;                     /*!< Amplifier model macro name. */\n};\n\n\n/**\n * \\brief Amplifier state structure.\n *\n * \\struct amp_state\n *\n * This structure contains live data, as well as a copy of capability fields\n * that may be updated, i.e. customized while the #AMP handle is instantiated.\n *\n * It is fine to move fields around, as this kind of struct should not be\n * initialized like amp_caps are.\n */\nstruct amp_state\n{\n  /*\n   * overridable fields\n   */\n\n  /*\n   * non overridable fields, internal use\n   */\n  hamlib_port_t_deprecated ampport_deprecated;  /*!< Amplifier port (internal use). Deprecated */\n\n  int comm_state;         /*!< Comm port state, opened/closed. */\n  rig_ptr_t priv;         /*!< Pointer to private amplifier state data. */\n  rig_ptr_t obj;          /*!< Internal use by hamlib++ for event handling. */\n\n  setting_t has_get_level; /*!< List of get levels. */\n\n  gran_t level_gran[RIG_SETTING_MAX]; /*!< Level granularity. */\n  gran_t parm_gran[RIG_SETTING_MAX];  /*!< Parameter granularity. */\n  hamlib_port_t ampport;  /*!< Amplifier port (internal use). */\n};\n\n\n/**\n * \\brief Master amplifier structure.\n *\n * \\struct amp\n *\n * Master amplifier data structure acting as the #AMP handle for the\n * controlled amplifier.  A pointer to this structure is returned by the\n * amp_init() API function and is passed as a parameter to every amplifier\n * specific API call.\n *\n * \\sa amp_init(), amp_caps, amp_state\n */\nstruct amp\n{\n  struct amp_caps *caps;      /*!< Amplifier caps. */\n  struct amp_state state;     /*!< Amplifier state. */\n};\n\n\n//! @cond Doxygen_Suppress\n/* --------------- API function prototypes -----------------*/\n\nextern HAMLIB_EXPORT(AMP *)\namp_init HAMLIB_PARAMS((amp_model_t amp_model));\n\nextern HAMLIB_EXPORT(int)\namp_open HAMLIB_PARAMS((AMP *amp));\n\nextern HAMLIB_EXPORT(int)\namp_close HAMLIB_PARAMS((AMP *amp));\n\nextern HAMLIB_EXPORT(int)\namp_cleanup HAMLIB_PARAMS((AMP *amp));\n\nextern HAMLIB_EXPORT(int)\namp_set_conf HAMLIB_PARAMS((AMP *amp,\n                            token_t token,\n                            const char *val));\nextern HAMLIB_EXPORT(int)\namp_get_conf HAMLIB_PARAMS((AMP *amp,\n                            token_t token,\n                            char *val));\nextern HAMLIB_EXPORT(int)\namp_set_powerstat HAMLIB_PARAMS((AMP *amp,\n                                 powerstat_t status));\nextern HAMLIB_EXPORT(int)\namp_get_powerstat HAMLIB_PARAMS((AMP *amp,\n                                 powerstat_t *status));\n\n\n/*\n *  General API commands, from most primitive to least.. )\n *  List Set/Get functions pairs\n */\nextern HAMLIB_EXPORT(int)\namp_get_freq HAMLIB_PARAMS((AMP *amp,\n                            freq_t *freq));\nextern HAMLIB_EXPORT(int)\namp_set_freq HAMLIB_PARAMS((AMP *amp,\n                            freq_t freq));\n\nextern HAMLIB_EXPORT(int)\namp_reset HAMLIB_PARAMS((AMP *amp,\n                         amp_reset_t reset));\n\nextern HAMLIB_EXPORT(const char *)\namp_get_info HAMLIB_PARAMS((AMP *amp));\n\nextern HAMLIB_EXPORT(int)\namp_get_level HAMLIB_PARAMS((AMP *amp, setting_t level, value_t *val));\n\nextern HAMLIB_EXPORT(int)\namp_register HAMLIB_PARAMS((const struct amp_caps *caps));\n\nextern HAMLIB_EXPORT(int)\namp_unregister HAMLIB_PARAMS((amp_model_t amp_model));\n\nextern HAMLIB_EXPORT(int)\namp_list_foreach HAMLIB_PARAMS((int (*cfunc)(const struct amp_caps *,\n                                rig_ptr_t),\n                                rig_ptr_t data));\n\nextern HAMLIB_EXPORT(int)\namp_load_backend HAMLIB_PARAMS((const char *be_name));\n\nextern HAMLIB_EXPORT(int)\namp_check_backend HAMLIB_PARAMS((amp_model_t amp_model));\n\nextern HAMLIB_EXPORT(int)\namp_load_all_backends HAMLIB_PARAMS((void));\n\nextern HAMLIB_EXPORT(amp_model_t)\namp_probe_all HAMLIB_PARAMS((hamlib_port_t *p));\n\nextern HAMLIB_EXPORT(int)\namp_token_foreach HAMLIB_PARAMS((AMP *amp,\n                                 int (*cfunc)(const struct confparams *,\n                                     rig_ptr_t),\n                                 rig_ptr_t data));\n\nextern HAMLIB_EXPORT(const struct confparams *)\namp_confparam_lookup HAMLIB_PARAMS((AMP *amp,\n                                    const char *name));\n\nextern HAMLIB_EXPORT(token_t)\namp_token_lookup HAMLIB_PARAMS((AMP *amp,\n                                const char *name));\n\nextern HAMLIB_EXPORT(const struct amp_caps *)\namp_get_caps HAMLIB_PARAMS((amp_model_t amp_model));\n\nextern HAMLIB_EXPORT(setting_t)\namp_has_get_level HAMLIB_PARAMS((AMP *amp,\n                                 setting_t level));\n\nextern HAMLIB_EXPORT(const struct confparams *)\namp_ext_lookup HAMLIB_PARAMS((AMP *amp,\n                              const char *name));\n\nextern HAMLIB_EXPORT(int)\namp_get_ext_level HAMLIB_PARAMS((AMP *amp,\n                                 token_t token,\n                                 value_t *val));\n\nextern HAMLIB_EXPORT(const char *) amp_strlevel(setting_t);\n\nextern HAMLIB_EXPORT(const struct confparams *)\nrig_ext_lookup HAMLIB_PARAMS((RIG *rig,\n                              const char *name));\n\nextern HAMLIB_EXPORT(setting_t) amp_parse_level(const char *s);\nextern HAMLIB_EXPORT(const char *) amp_strlevel(setting_t);\n\n//! @endcond\n\n\n/**\n * \\brief Convenience macro for generating debugging messages.\n *\n * \\def amp_debug\n *\n * This is an alias of the rig_debug() function call and is used in the same\n * manner.\n */\n#define amp_debug rig_debug\n\n__END_DECLS\n\n#endif /* _AMPLIFIER_H */\n\n/** @} */\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/include/hamlib/amplist.h",
    "content": "/*\n *  Hamlib Interface - list of known amplifiers\n *  Copyright (c) 2000-2011 by Stephane Fillod\n *  Copyright (c) 2000-2002 by Frank Singleton\n *  Copyright (C) 2019 by Michael Black W9MDB. Derived from rotlist.h\n *\n *\n *   This library is free software; you can redistribute it and/or\n *   modify it under the terms of the GNU Lesser General Public\n *   License as published by the Free Software Foundation; either\n *   version 2.1 of the License, or (at your option) any later version.\n *\n *   This library is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n *   Lesser General Public License for more details.\n *\n *   You should have received a copy of the GNU Lesser General Public\n *   License along with this library; if not, write to the Free Software\n *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n *\n */\n\n#ifndef _AMPLIST_H\n#define _AMPLIST_H 1\n\n//! @cond Doxygen_Suppress\n#define AMP_MAKE_MODEL(a,b) ((a)*100+(b))\n#define AMP_BACKEND_NUM(a) ((a)/100)\n//! @endcond\n\n\n/**\n * \\addtogroup amplifier\n * @{\n */\n\n/**\n * \\brief Hamlib amplifier model definitions.\n *\n * \\file amplist.h\n *\n * This file contains amplifier model definitions for the Hamlib amplifier\n * Application Programming Interface (API).  Each distinct amplifier type has\n * a unique model number (ID) and is used by Hamlib to identify and\n * distinguish between the different hardware drivers.  The exact model\n * numbers can be acquired using the macros in this file. To obtain a list of\n * supported amplifier branches, one can use the statically defined\n * AMP_BACKEND_LIST macro (defined in configure.ac). To obtain a full list of\n * supported amplifiers (including each model in every branch), the\n * foreach_opened_amp() API function can be used.\n *\n * The model number, or ID, is used to tell Hamlib which amplifier the client\n * wishes to use which is done with the amp_init() API call.\n */\n\n\n/**\n * \\brief A macro that returns the model number for an unknown model.\n *\n * \\def AMP_MODEL_NONE\n *\n * The none backend, as the name suggests, does nothing.  It is mainly for\n * internal use.\n */\n#define AMP_MODEL_NONE 0\n\n\n/**\n * \\brief A macro that returns the model number for the DUMMY backend.\n *\n * \\def AMP_MODEL_DUMMY\n *\n * The DUMMY backend, as the name suggests, is a backend which performs no\n * hardware operations and always behaves as one would expect.  It can be\n * thought of as a hardware simulator and is very useful for testing client\n * applications.\n */\n/**\n * \\brief A macro that returns the model number for the NETAMPCTL backend.\n *\n * \\def AMP_MODEL_NETAMPCTL\n *\n * The NETAMPCTL backend allows use of the `ampctld` daemon through the normal\n * Hamlib API.\n */\n//! @cond Doxygen_Suppress\n#define AMP_DUMMY 0\n#define AMP_BACKEND_DUMMY \"dummy\"\n//! @endcond\n#define AMP_MODEL_DUMMY AMP_MAKE_MODEL(AMP_DUMMY, 1)\n#define AMP_MODEL_NETAMPCTL AMP_MAKE_MODEL(AMP_DUMMY, 2)\n\n\n/**\n * \\brief A macro that returns the model number of the KPA1500 backend.\n *\n * \\def AMP_MODEL_ELECRAFT_KPA1500\n *\n * The KPA1500 backend can be used with amplifiers that support the Elecraft\n * KPA-1500 protocol.\n */\n//! @cond Doxygen_Suppress\n#define AMP_ELECRAFT 2\n#define AMP_BACKEND_ELECRAFT \"elecraft\"\n//! @endcond\n#define AMP_MODEL_ELECRAFT_KPA1500 AMP_MAKE_MODEL(AMP_ELECRAFT, 1)\n//#define AMP_MODEL_ELECRAFT_KPA500 AMP_MAKE_MODEL(AMP_ELECRAFT, 2)\n\n/**\n * \\brief Convenience type definition for an amplifier model.\n *\n * \\typedef typedef int amp_model_t\n */\ntypedef int amp_model_t;\n\n\n#endif /* _AMPLIST_H */\n\n/** @} */\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/include/hamlib/config.h",
    "content": "/* include/hamlib/config.h.  Generated from config.h.in by configure.  */\n/* include/hamlib/config.h.in.  Generated from configure.ac by autoheader.  */\n\n/* Frontend ABI age */\n#define ABI_AGE 0\n\n/* Frontend ABI revision */\n#define ABI_REVISION 5\n\n/* Frontend ABI version */\n#define ABI_VERSION 4\n\n/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP\n   systems. This function is required for `alloca.c' support on those systems.\n   */\n/* #undef CRAY_STACKSEG_END */\n\n/* Define to 1 if using `alloca.c'. */\n/* #undef C_ALLOCA */\n\n/* Define to 1 if you have `alloca', as a function or macro. */\n#define HAVE_ALLOCA 1\n\n/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).\n   */\n/* #undef HAVE_ALLOCA_H */\n\n/* Define to 1 if you have the <arpa/inet.h> header file. */\n/* #undef HAVE_ARPA_INET_H */\n\n/* Define to 1 if you have the `cfmakeraw' function. */\n/* #undef HAVE_CFMAKERAW */\n\n/* define if the compiler supports basic C++11 syntax */\n#define HAVE_CXX11 1\n\n/* Define to 1 if you have the declaration of `gai_strerror', and to 0 if you\n   don't. */\n#define HAVE_DECL_GAI_STRERROR 1\n\n/* Define to 1 if you have the <dev/ppbus/ppbconf.hdev/ppbus/ppi.h> header\n   file. */\n/* #undef HAVE_DEV_PPBUS_PPBCONF_HDEV_PPBUS_PPI_H */\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n/* #undef HAVE_DLFCN_H */\n\n/* Define to 1 if you have the <errno.h> header file. */\n#define HAVE_ERRNO_H 1\n\n/* Define to 1 if you have the <fcntl.h> header file. */\n#define HAVE_FCNTL_H 1\n\n/* Define to 1 if you have the `floor' function. */\n#define HAVE_FLOOR 1\n\n/* Define to 1 if you have the <gd.h> header file. */\n/* #undef HAVE_GD_H */\n\n/* Define to 1 if you have the `getaddrinfo' function. */\n#define HAVE_GETADDRINFO 1\n\n/* Define to 1 if you have the `getopt' function. */\n#define HAVE_GETOPT 1\n\n/* Define to 1 if you have the <getopt.h> header file. */\n#define HAVE_GETOPT_H 1\n\n/* Define to 1 if you have the `getopt_long' function. */\n#define HAVE_GETOPT_LONG 1\n\n/* Define to 1 if you have the `getpagesize' function. */\n#define HAVE_GETPAGESIZE 1\n\n/* Define to 1 if you have the `gettimeofday' function. */\n#define HAVE_GETTIMEOFDAY 1\n\n/* Define to 1 if you have the `glob' function. */\n/* #undef HAVE_GLOB */\n\n/* Define to 1 if you have the <glob.h> header file. */\n/* #undef HAVE_GLOB_H */\n\n/* Define to 1 if you have the <history.h> header file. */\n/* #undef HAVE_HISTORY_H */\n\n/* Define to 1 if you have the `inet_ntoa' function. */\n/* #undef HAVE_INET_NTOA */\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#define HAVE_INTTYPES_H 1\n\n/* Define to 1 if you have the `ioctl' function. */\n/* #undef HAVE_IOCTL */\n\n/* Define to 1 if you have the <lauxlib.h> header file. */\n/* #undef HAVE_LAUXLIB_H */\n\n/* Define if you have an INDI compatible library */\n/* #undef HAVE_LIBINDI */\n\n/* Define if you have a nova compatible library */\n/* #undef HAVE_LIBNOVA */\n\n/* Define if you have a readline compatible library */\n/* #undef HAVE_LIBREADLINE */\n\n/* Define if libusb-1.0 is available */\n#define HAVE_LIBUSB 1\n\n/* Define to 1 if you have the <libusb-1.0/libusb.h> header file. */\n#define HAVE_LIBUSB_1_0_LIBUSB_H 1\n\n/* Define to 1 if you have the <libusb.h> header file. */\n/* #undef HAVE_LIBUSB_H */\n\n/* Define to 1 if you have the <limits.h> header file. */\n#define HAVE_LIMITS_H 1\n\n/* Define to 1 if you have the <linux/hidraw.h> header file. */\n/* #undef HAVE_LINUX_HIDRAW_H */\n\n/* Define to 1 if you have the <linux/ioctl.h> header file. */\n/* #undef HAVE_LINUX_IOCTL_H */\n\n/* Define to 1 if you have the <linux/parport.h> header file. */\n/* #undef HAVE_LINUX_PARPORT_H */\n\n/* Define to 1 if you have the <linux/ppdev.h> header file. */\n/* #undef HAVE_LINUX_PPDEV_H */\n\n/* Define to 1 if you have the <locale.h> header file. */\n#define HAVE_LOCALE_H 1\n\n/* Define to 1 if you have the <luaconf.h> header file. */\n/* #undef HAVE_LUACONF_H */\n\n/* Define to 1 if you have the <lualib.h> header file. */\n/* #undef HAVE_LUALIB_H */\n\n/* Define to 1 if you have the <lua.h> header file. */\n/* #undef HAVE_LUA_H */\n\n/* Define to 1 if you have the <malloc.h> header file. */\n#define HAVE_MALLOC_H 1\n\n/* Define to 1 if you have the `memchr' function. */\n#define HAVE_MEMCHR 1\n\n/* Define to 1 if you have the `memmove' function. */\n#define HAVE_MEMMOVE 1\n\n/* Define to 1 if you have the <memory.h> header file. */\n#define HAVE_MEMORY_H 1\n\n/* Define to 1 if you have the `memset' function. */\n#define HAVE_MEMSET 1\n\n/* Define to 1 if you have the `nanosleep' function. */\n#define HAVE_NANOSLEEP 1\n\n/* Define to 1 if you have the <netdb.h> header file. */\n/* #undef HAVE_NETDB_H */\n\n/* Define to 1 if you have the <netinet/in.h> header file. */\n/* #undef HAVE_NETINET_IN_H */\n\n/* Define to 1 if you have the `pow' function. */\n#define HAVE_POW 1\n\n/* Define if you have POSIX threads libraries and header files. */\n#define HAVE_PTHREAD 1\n\n/* Define to 1 if you have the <pthread.h> header file. */\n#define HAVE_PTHREAD_H 1\n\n/* Have PTHREAD_PRIO_INHERIT. */\n#define HAVE_PTHREAD_PRIO_INHERIT 1\n\n/* If available, contains the Python version number currently in use. */\n/* #undef HAVE_PYTHON */\n\n/* Define to 1 if you have the <readline.h> header file. */\n/* #undef HAVE_READLINE_H */\n\n/* Define if your readline library has \\`add_history' */\n/* #undef HAVE_READLINE_HISTORY */\n\n/* Define to 1 if you have the <readline/history.h> header file. */\n/* #undef HAVE_READLINE_HISTORY_H */\n\n/* Define to 1 if you have the <readline/readline.h> header file. */\n/* #undef HAVE_READLINE_READLINE_H */\n\n/* Define to 1 if you have the `rint' function. */\n#define HAVE_RINT 1\n\n/* Define to 1 if you have the `select' function. */\n/* #undef HAVE_SELECT */\n\n/* Define to 1 if you have the `setitimer' function. */\n/* #undef HAVE_SETITIMER */\n\n/* Define to 1 if you have the `setlocale' function. */\n#define HAVE_SETLOCALE 1\n\n/* Define to 1 if you have the <sgtty.h> header file. */\n/* #undef HAVE_SGTTY_H */\n\n/* Define to 1 if you have the `sigaction' function. */\n/* #undef HAVE_SIGACTION */\n\n/* Define to 1 if the system has the type `siginfo_t'. */\n/* #undef HAVE_SIGINFO_T */\n\n/* Define to 1 if you have the `signal' function. */\n#define HAVE_SIGNAL 1\n\n/* Define to 1 if the system has the type `sig_atomic_t'. */\n#define HAVE_SIG_ATOMIC_T 1\n\n/* Define to 1 if you have the `sleep' function. */\n#define HAVE_SLEEP 1\n\n/* Define to 1 if you have the `snprintf' function. */\n#define HAVE_SNPRINTF 1\n\n/* Define to 1 if you have the `socket' function. */\n/* #undef HAVE_SOCKET */\n\n/* Define to 1 if you have the `socketpair' function. */\n/* #undef HAVE_SOCKETPAIR */\n\n/* Define to 1 if you have the `sqrt' function. */\n#define HAVE_SQRT 1\n\n/* Define to 1 if the system has the type `ssize_t'. */\n#define HAVE_SSIZE_T 1\n\n/* Define to 1 if you have Windows Sleep */\n#define HAVE_SSLEEP 1\n\n/* Define to 1 if you have the <stddef.h> header file. */\n#define HAVE_STDDEF_H 1\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#define HAVE_STDINT_H 1\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#define HAVE_STDLIB_H 1\n\n/* Define to 1 if you have the `strchr' function. */\n#define HAVE_STRCHR 1\n\n/* Define to 1 if you have the `strdup' function. */\n#define HAVE_STRDUP 1\n\n/* Define to 1 if you have the `strerror' function. */\n#define HAVE_STRERROR 1\n\n/* Define to 1 if you have the <strings.h> header file. */\n#define HAVE_STRINGS_H 1\n\n/* Define to 1 if you have the <string.h> header file. */\n#define HAVE_STRING_H 1\n\n/* Define to 1 if you have the `strncasecmp' function. */\n#define HAVE_STRNCASECMP 1\n\n/* Define to 1 if you have the `strrchr' function. */\n#define HAVE_STRRCHR 1\n\n/* Define to 1 if you have the `strstr' function. */\n#define HAVE_STRSTR 1\n\n/* Define to 1 if you have the `strtol' function. */\n#define HAVE_STRTOL 1\n\n/* Define to 1 if the system has the type `struct addrinfo'. */\n#define HAVE_STRUCT_ADDRINFO 1\n\n/* Define to 1 if the system has the type `struct timezone'. */\n#define HAVE_STRUCT_TIMEZONE 1\n\n/* Define to 1 if you have the <sys/ioccom.h> header file. */\n/* #undef HAVE_SYS_IOCCOM_H */\n\n/* Define to 1 if you have the <sys/ioctl.h> header file. */\n/* #undef HAVE_SYS_IOCTL_H */\n\n/* Define to 1 if you have the <sys/param.h> header file. */\n#define HAVE_SYS_PARAM_H 1\n\n/* Define to 1 if you have the <sys/select.h> header file. */\n/* #undef HAVE_SYS_SELECT_H */\n\n/* Define to 1 if you have the <sys/socket.h> header file. */\n/* #undef HAVE_SYS_SOCKET_H */\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#define HAVE_SYS_STAT_H 1\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n#define HAVE_SYS_TIME_H 1\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#define HAVE_SYS_TYPES_H 1\n\n/* Define to 1 if you have the <tcl.h> header file. */\n/* #undef HAVE_TCL_H */\n\n/* Define to 1 if you have the <termios.h> header file. */\n/* #undef HAVE_TERMIOS_H */\n\n/* Define to 1 if you have the <termio.h> header file. */\n/* #undef HAVE_TERMIO_H */\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#define HAVE_UNISTD_H 1\n\n/* Define to 1 if you have the `usleep' function. */\n#define HAVE_USLEEP 1\n\n/* Define to 1 if you have the <values.h> header file. */\n/* #undef HAVE_VALUES_H */\n\n/* Define to 1 if you have the <winbase.h> header file. */\n#define HAVE_WINBASE_H 1\n\n/* Define to 1 if you have the <windows.h> header file. */\n#define HAVE_WINDOWS_H 1\n\n/* Define to 1 if you have the <winioctl.h> header file. */\n#define HAVE_WINIOCTL_H 1\n\n/* Define if winradio backend is built */\n#define HAVE_WINRADIO 1\n\n/* Define to 1 if you have the <ws2tcpip.h> header file. */\n#define HAVE_WS2TCPIP_H 1\n\n/* Define to 1 if you have the <wspiapi.h> header file. */\n#define HAVE_WSPIAPI_H 1\n\n/* Define to the sub-directory where libtool stores uninstalled libraries. */\n#define LT_OBJDIR \".libs/\"\n\n/* Compilation on POSIX other than Linux */\n/* #undef OTHER_POSIX */\n\n/* Name of package */\n#define PACKAGE \"hamlib\"\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"hamlib-developer@lists.sourceforge.net\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"Hamlib\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"Hamlib 4.5~git\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"hamlib\"\n\n/* Define to the home page for this package. */\n#define PACKAGE_URL \"http://www.hamlib.org\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"4.5~git\"\n\n/* Define to necessary symbol if this constant uses a non-standard name on\n   your system. */\n/* #undef PTHREAD_CREATE_JOINABLE */\n\n/* If using the C implementation of alloca, define if you know the\n   direction of stack growth for your system; otherwise it will be\n   automatically deduced at runtime.\n\tSTACK_DIRECTION > 0 => grows toward higher addresses\n\tSTACK_DIRECTION < 0 => grows toward lower addresses\n\tSTACK_DIRECTION = 0 => direction of growth unknown */\n/* #undef STACK_DIRECTION */\n\n/* Define to 1 if you have the ANSI C header files. */\n#define STDC_HEADERS 1\n\n/* Enable extensions on AIX 3, Interix.  */\n#ifndef _ALL_SOURCE\n# define _ALL_SOURCE 1\n#endif\n/* Enable GNU extensions on systems that have them.  */\n#ifndef _GNU_SOURCE\n# define _GNU_SOURCE 1\n#endif\n/* Enable threading extensions on Solaris.  */\n#ifndef _POSIX_PTHREAD_SEMANTICS\n# define _POSIX_PTHREAD_SEMANTICS 1\n#endif\n/* Enable extensions on HP NonStop.  */\n#ifndef _TANDEM_SOURCE\n# define _TANDEM_SOURCE 1\n#endif\n/* Enable general extensions on Solaris.  */\n#ifndef __EXTENSIONS__\n# define __EXTENSIONS__ 1\n#endif\n\n\n/* Version number of package */\n#define VERSION \"4.5~git\"\n\n/* Define to 1 if on MINIX. */\n/* #undef _MINIX */\n\n/* Define to 2 if the system does not provide POSIX.1 features except with\n   this defined. */\n/* #undef _POSIX_1_SOURCE */\n\n/* Define to 1 if you need to in order for `stat' and other things to work. */\n/* #undef _POSIX_SOURCE */\n\n/* Define to `__inline__' or `__inline' if that's what the C compiler\n   calls it, or to nothing if 'inline' is not supported under any name.  */\n#ifndef __cplusplus\n/* #undef inline */\n#endif\n\n/* Define to `unsigned int' if <sys/types.h> does not define. */\n/* #undef size_t */\n\n\n/* Define missing prototypes, implemented in replacement lib */\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef HAVE_GETOPT\nint getopt (int argc, char * const argv[], const char * optstring);\nextern char * optarg;\nextern int optind, opterr, optopt;\n#endif\n\n#ifndef HAVE_GETOPT_LONG\nstruct option;\nint getopt_long (int argc, char * const argv[], const char * optstring,\n\t\t\tconst struct option * longopts, int * longindex);\n#endif\n\n#ifndef HAVE_USLEEP\nint usleep(unsigned long usec);\t/* SUSv2 */\n#endif\n\n#ifndef HAVE_GETTIMEOFDAY\n#ifdef HAVE_SYS_TIME_H\n#include <sys/time.h>\n#endif\n#ifndef HAVE_STRUCT_TIMEZONE\nstruct timezone {\n        int  tz_minuteswest;\n\tint  tz_dsttime;\n};\n#endif\nint gettimeofday(struct timeval *tv, struct timezone *tz);\n#endif\n\n#ifndef timersub\n# define timersub(a, b, result) \\\n    do { \\\n        (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \\\n        (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \\\n        if ((result)->tv_usec < 0) { \\\n            --(result)->tv_sec; \\\n            (result)->tv_usec += 1000000; \\\n        } \\\n    } while (0)\n#endif\n\n#ifndef HAVE_SSIZE_T\ntypedef size_t ssize_t;\n#endif\n\n#ifdef  __cplusplus\n}\n#endif\n\n\n\n/* Define missing prototypes, implemented in replacement lib */\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef HAVE_STRUCT_ADDRINFO\n#ifdef HAVE_NETINET_IN_H\n#include <netinet/in.h>\n#endif\n#if HAVE_NETDB_H\n#include <netdb.h>\n#endif\n#ifdef HAVE_ARPA_INET_H\n#include <arpa/inet.h>\n#endif\n#ifdef HAVE_SYS_SOCKET_H\n#include <sys/socket.h>\n#elif HAVE_WS2TCPIP_H\n#include <ws2tcpip.h>\n#endif\nstruct addrinfo {\n    int ai_flags;\n    int ai_family;\n    int ai_socktype;\n    int ai_protocol;\n    socklen_t ai_addrlen;\n    struct sockaddr *ai_addr;\n};\n#endif\n\n#ifndef HAVE_GETADDRINFO\n\n#ifdef HAVE_NETINET_IN_H\n#include <netinet/in.h>\n#endif\n#if HAVE_NETDB_H\n#include <netdb.h>\n#endif\n#ifdef HAVE_ARPA_INET_H\n#include <arpa/inet.h>\n#endif\n#ifdef HAVE_SYS_SOCKET_H\n#include <sys/socket.h>\n#elif HAVE_WS2TCPIP_H\n#include <ws2tcpip.h>\n#endif\n\n#ifndef AI_PASSIVE\n#define AI_PASSIVE 0x0001\n#endif\n\nint getaddrinfo(const char *node, const char *service,\n    const struct addrinfo *hints, struct addrinfo **res);\nvoid freeaddrinfo(struct addrinfo *res);\n#endif\n\n#if !defined(HAVE_DECL_GAI_STRERROR) && !defined(gai_strerror)\nconst char *gai_strerror(int errcode);\n#endif /* !HAVE_DECL_GAI_STRERROR */\n\n#ifdef  __cplusplus\n}\n#endif\n\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/include/hamlib/rig.h",
    "content": "/*\n *  Hamlib Interface - API header\n *  Copyright (c) 2000-2003 by Frank Singleton\n *  Copyright (c) 2000-2012 by Stephane Fillod\n *\n *\n *   This library is free software; you can redistribute it and/or\n *   modify it under the terms of the GNU Lesser General Public\n *   License as published by the Free Software Foundation; either\n *   version 2.1 of the License, or (at your option) any later version.\n *\n *   This library is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n *   Lesser General Public License for more details.\n *\n *   You should have received a copy of the GNU Lesser General Public\n *   License along with this library; if not, write to the Free Software\n *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n *\n */\n\n\n#ifndef _RIG_H\n#define _RIG_H 1\n\n#define BUILTINFUNC 0\n\n// Our shared secret password \n#define HAMLIB_SECRET_LENGTH 32\n\n#define TRACE rig_debug(RIG_DEBUG_TRACE,\"%s(%d) trace\\n\", __FILE__, __LINE__)\n#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)\n\n#include <stdio.h>\n#include <stdarg.h>\n#include <string.h>\n#include <inttypes.h>\n#include <time.h>\n#include <hamlib/config.h>\n#ifdef HAVE_PTHREAD\n#include <pthread.h>\n#endif\n\n/* Rig list is in a separate file so as not to mess up w/ this one */\n#include <hamlib/riglist.h>\n\n/**\n * \\addtogroup rig\n * @{\n */\n\n/*! \\file rig.h\n *  \\brief Hamlib rig data structures.\n *\n *  This file contains the data structures and definitions for the Hamlib rig API.\n *  see the rig.c file for more details on the rig API.\n */\n\n\n/* __BEGIN_DECLS should be used at the beginning of your declarations,\n * so that C++ compilers don't mangle their names.  Use __END_DECLS at\n * the end of C declarations. */\n//! @cond Doxygen_Suppress\n#undef __BEGIN_DECLS\n#undef __END_DECLS\n#ifdef __cplusplus\n#  define __BEGIN_DECLS extern \"C\" {\n#  define __END_DECLS }\n#else\n#  define __BEGIN_DECLS      /* empty */\n#  define __END_DECLS        /* empty */\n#endif\n//! @endcond\n\n/* HAMLIB_PARAMS is a macro used to wrap function prototypes, so that compilers\n * that don't understand ANSI C prototypes still work, and ANSI C\n * compilers can issue warnings about type mismatches. */\n//! @cond Doxygen_Suppress\n#undef HAMLIB_PARAMS\n#if defined (__STDC__)                                                  \\\n    || defined (_AIX)                                                   \\\n    || (defined (__mips) && defined (_SYSTYPE_SVR4))                    \\\n    || defined(__CYGWIN__)                                              \\\n    || defined(_WIN32)                                                  \\\n    || defined(__cplusplus)\n#  define HAMLIB_PARAMS(protos) protos\n#  define rig_ptr_t     void *\n#  define amp_ptr_t     void *\n#else\n#  define HAMLIB_PARAMS(protos) ()\n#  define rig_ptr_t     char *\n#  define amp_ptr_t     char *\n#endif\n//! @endcond\n\n#include <hamlib/rig_dll.h>\n\n#ifndef SWIGLUA\n//! @cond Doxygen_Suppress\n#define CONSTANT_64BIT_FLAG(BIT) (1ull << (BIT))\n//! @endcond\n#else\n/* SWIG's older Lua generator doesn't grok ull due to Lua using a\n   double-precision floating point type internally for number\n   representations (max 53 bits of precision) so makes a string\n   constant from a constant number literal using ull */\n// #define CONSTANT_64BIT_FLAG(BIT) (1 << (BIT))\n// #define SWIGLUAHIDE\n/* But this appears to have been fixed so we'll use the correct one now\n   If you have the older version of SWIG comment out this line and use\n   the two above */\n// This 1ul definition works on swig 4.0.1 and lua 5.3.5\n#define CONSTANT_64BIT_FLAG(BIT) (1ul << (BIT))\n#endif\n\n__BEGIN_DECLS\n\n/**\n * \\brief size of cookie request buffer\n * Minimum size of cookie buffer to pass to rig_cookie\n */\n// cookie is 26-char time code plus 10-char (2^31-1) random number\n#define HAMLIB_COOKIE_SIZE 37\nextern int cookie_use;  // this is global as once one client requests it everybody needs to honor it\n\n//! @cond Doxygen_Suppress\nextern HAMLIB_EXPORT_VAR(const char) hamlib_version[];\nextern HAMLIB_EXPORT_VAR(const char) hamlib_copyright[];\nextern HAMLIB_EXPORT_VAR(const char *) hamlib_version2;\nextern HAMLIB_EXPORT_VAR(const char *) hamlib_copyright2;\n//! @endcond\n\n/**\n * \\brief Hamlib error codes\n * Error code definition that can be returned by the Hamlib functions.\n * Unless stated otherwise, Hamlib functions return the negative value\n * of rig_errcode_e definitions in case of error, or 0 when successful.\n */\nenum rig_errcode_e {\n    RIG_OK = 0,     /*!< 0 No error, operation completed successfully */\n    RIG_EINVAL,     /*!< 1 invalid parameter */\n    RIG_ECONF,      /*!< 2 invalid configuration (serial,..) */\n    RIG_ENOMEM,     /*!< 3 memory shortage */\n    RIG_ENIMPL,     /*!< 4 function not implemented, but will be */\n    RIG_ETIMEOUT,   /*!< 5 communication timed out */\n    RIG_EIO,        /*!< 6 IO error, including open failed */\n    RIG_EINTERNAL,  /*!< 7 Internal Hamlib error, huh! */\n    RIG_EPROTO,     /*!< 8 Protocol error */\n    RIG_ERJCTED,    /*!< 9 Command rejected by the rig */\n    RIG_ETRUNC,     /*!< 10 Command performed, but arg truncated */\n    RIG_ENAVAIL,    /*!< 11 Function not available */\n    RIG_ENTARGET,   /*!< 12 VFO not targetable */\n    RIG_BUSERROR,   /*!< 13 Error talking on the bus */\n    RIG_BUSBUSY,    /*!< 14 Collision on the bus */\n    RIG_EARG,       /*!< 15 NULL RIG handle or any invalid pointer parameter in get arg */\n    RIG_EVFO,       /*!< 16 Invalid VFO */\n    RIG_EDOM,       /*!< 17 Argument out of domain of func */\n    RIG_EDEPRECATED,/*!< 18 Function deprecated */\n    RIG_ESECURITY   /*!< 19 Security error */\n};\n\n/**\n * \\brief Determines if the given error code indicates a \"soft\" error\n * Soft errors are caused by invalid parameters and software/hardware features\n * and cannot be fixed by retries or by re-initializing hardware.\n */\n#define RIG_IS_SOFT_ERRCODE(errcode) (errcode == RIG_EINVAL || errcode == RIG_ENIMPL || errcode == RIG_ERJCTED \\\n    || errcode == RIG_ETRUNC || errcode == RIG_ENAVAIL || errcode == RIG_ENTARGET \\\n    || errcode == RIG_EVFO || errcode == RIG_EDOM || errcode == RIG_ESECURITY)\n\n/**\n * \\brief Token in the netrigctl protocol for returning error code\n */\n#define NETRIGCTL_RET \"RPRT \"\n\n\n/**\n *\\brief Hamlib debug levels\n *\n * NOTE: Numeric order matters for debug level\n *\n * \\sa rig_set_debug()\n */\nenum rig_debug_level_e {\n    RIG_DEBUG_NONE = 0, /*!< no bug reporting */\n    RIG_DEBUG_BUG,      /*!< serious bug */\n    RIG_DEBUG_ERR,      /*!< error case (e.g. protocol, memory allocation) */\n    RIG_DEBUG_WARN,     /*!< warning */\n    RIG_DEBUG_VERBOSE,  /*!< verbose */\n    RIG_DEBUG_TRACE,    /*!< tracing */\n    RIG_DEBUG_CACHE     /*!< caching */\n};\n\n\n/* --------------- Rig capabilities -----------------*/\n\n/* Forward struct references */\n\nstruct rig;\nstruct rig_state;\n\n/**\n * \\brief Rig structure definition (see rig for details).\n */\ntypedef struct s_rig RIG;\n\n//! @cond Doxygen_Suppress\n#define HAMLIB_RIGNAMSIZ 30\n#define HAMLIB_RIGVERSIZ 8\n#define HAMLIB_FILPATHLEN 512\n#define HAMLIB_FRQRANGESIZ 30\n#define HAMLIB_MAXCHANDESC 30      /* describe channel eg: \"WWV 5Mhz\" */\n#define HAMLIB_TSLSTSIZ 20         /* max tuning step list size, zero ended */\n#define HAMLIB_FLTLSTSIZ 60        /* max mode/filter list size, zero ended */\n#define HAMLIB_MAXDBLSTSIZ 8       /* max preamp/att levels supported, zero ended */\n#define HAMLIB_CHANLSTSIZ 16       /* max mem_list size, zero ended */\n#define HAMLIB_MAX_AGC_LEVELS 8       /* max AGC levels supported */\n#define HAMLIB_MAX_SPECTRUM_SCOPES 4 /* max number of spectrum scopes supported */\n#define HAMLIB_MAX_SPECTRUM_MODES 5 /* max number of spectrum modes supported */\n#define HAMLIB_MAX_SPECTRUM_AVG_MODES 12 /* max number of spectrum averaging modes supported */\n#define HAMLIB_MAX_SPECTRUM_SPANS 20 /* max number of spectrum modes supported */\n#define HAMLIB_MAX_SPECTRUM_DATA 2048 /* max number of data bytes in a single spectrum line */\n#define HAMLIB_MAX_CAL_LENGTH 32   /* max calibration plots in cal_table_t */\n#define HAMLIB_MAX_MODES 63\n#define HAMLIB_MAX_VFOS 31\n#define HAMLIB_MAX_ROTORS 63\n#define HAMLIB_MAX_VFO_OPS 31\n#define HAMLIB_MAX_RSCANS 31\n#define HAMLIB_MAX_SNAPSHOT_PACKET_SIZE 16384 /* maximum number of bytes in a UDP snapshot packet */\n//! @endcond\n\n\n/**\n * \\brief CTCSS and DCS type definition.\n *\n * Continuous Tone Controlled Squelch System (CTCSS)\n * sub-audible tone frequency are expressed in \\em tenth of Hz.\n * For example, the subaudible tone of 88.5 Hz is represented within\n * Hamlib by 885.\n *\n * Digitally-Coded Squelch codes are simple direct integers.\n */\n#define CTCSS_LIST_SIZE 60\n#define DCS_LIST_SIZE 128\ntypedef unsigned int tone_t;\n\n\n/**\n * \\brief Port type\n */\ntypedef enum rig_port_e {\n    RIG_PORT_NONE = 0,      /*!< No port */\n    RIG_PORT_SERIAL,        /*!< Serial */\n    RIG_PORT_NETWORK,       /*!< Network socket type */\n    RIG_PORT_DEVICE,        /*!< Device driver, like the WiNRADiO */\n    RIG_PORT_PACKET,        /*!< AX.25 network type, e.g. SV8CS protocol */\n    RIG_PORT_DTMF,          /*!< DTMF protocol bridge via another rig, eg. Kenwood Sky Cmd System */\n    RIG_PORT_ULTRA,         /*!< IrDA Ultra protocol! */\n    RIG_PORT_RPC,           /*!< RPC wrapper */\n    RIG_PORT_PARALLEL,      /*!< Parallel port */\n    RIG_PORT_USB,           /*!< USB port */\n    RIG_PORT_UDP_NETWORK,   /*!< UDP Network socket type */\n    RIG_PORT_CM108,         /*!< CM108 GPIO */\n    RIG_PORT_GPIO,          /*!< GPIO */\n    RIG_PORT_GPION,         /*!< GPIO inverted */\n} rig_port_t;\n\n\n/**\n * \\brief Serial parity\n */\nenum serial_parity_e {\n    RIG_PARITY_NONE = 0,    /*!< No parity */\n    RIG_PARITY_ODD,         /*!< Odd */\n    RIG_PARITY_EVEN,        /*!< Even */\n    RIG_PARITY_MARK,        /*!< Mark */\n    RIG_PARITY_SPACE        /*!< Space */\n};\n\n\n/**\n * \\brief Serial handshake\n */\nenum serial_handshake_e {\n    RIG_HANDSHAKE_NONE = 0, /*!< No handshake */\n    RIG_HANDSHAKE_XONXOFF,  /*!< Software XON/XOFF */\n    RIG_HANDSHAKE_HARDWARE  /*!< Hardware CTS/RTS */\n};\n\n\n/**\n * \\brief Serial control state\n */\nenum serial_control_state_e {\n    RIG_SIGNAL_UNSET = 0,   /*!< Unset or tri-state */\n    RIG_SIGNAL_ON,          /*!< ON */\n    RIG_SIGNAL_OFF          /*!< OFF */\n};\n\n\n/**\n * \\brief Rig type flags\n */\ntypedef enum {\n    RIG_FLAG_RECEIVER = (1 << 1),       /*!< Receiver */\n    RIG_FLAG_TRANSMITTER = (1 << 2),    /*!< Transmitter */\n    RIG_FLAG_SCANNER = (1 << 3),        /*!< Scanner */\n    RIG_FLAG_MOBILE = (1 << 4),         /*!< mobile sized */\n    RIG_FLAG_HANDHELD = (1 << 5),       /*!< handheld sized */\n    RIG_FLAG_COMPUTER = (1 << 6),       /*!< \"Computer\" rig */\n    RIG_FLAG_TRUNKING = (1 << 7),       /*!< has trunking */\n    RIG_FLAG_APRS = (1 << 8),           /*!< has APRS */\n    RIG_FLAG_TNC = (1 << 9),            /*!< has TNC */\n    RIG_FLAG_DXCLUSTER = (1 << 10),     /*!< has DXCluster */\n    RIG_FLAG_TUNER = (1 << 11)          /*!< dumb tuner */\n} rig_type_t;\n\n/**\n * \\brief AGC delay settings\n */\n/* TODO: kill me, and replace by real AGC delay */\nenum agc_level_e {\n    RIG_AGC_OFF =       0,\n    RIG_AGC_SUPERFAST,\n    RIG_AGC_FAST,\n    RIG_AGC_SLOW,\n    RIG_AGC_USER,           /*!< user selectable */\n    RIG_AGC_MEDIUM,\n    RIG_AGC_AUTO\n};\n\n\n//! @cond Doxygen_Suppress\n#define RIG_FLAG_TRANSCEIVER (RIG_FLAG_RECEIVER|RIG_FLAG_TRANSMITTER)\n#define RIG_TYPE_MASK (RIG_FLAG_TRANSCEIVER|RIG_FLAG_SCANNER|RIG_FLAG_MOBILE|RIG_FLAG_HANDHELD|RIG_FLAG_COMPUTER|RIG_FLAG_TRUNKING|RIG_FLAG_TUNER)\n\n#define RIG_TYPE_OTHER      0\n#define RIG_TYPE_TRANSCEIVER    RIG_FLAG_TRANSCEIVER\n#define RIG_TYPE_HANDHELD       (RIG_FLAG_TRANSCEIVER|RIG_FLAG_HANDHELD)\n#define RIG_TYPE_MOBILE         (RIG_FLAG_TRANSCEIVER|RIG_FLAG_MOBILE)\n#define RIG_TYPE_RECEIVER       RIG_FLAG_RECEIVER\n#define RIG_TYPE_PCRECEIVER     (RIG_FLAG_COMPUTER|RIG_FLAG_RECEIVER)\n#define RIG_TYPE_SCANNER        (RIG_FLAG_SCANNER|RIG_FLAG_RECEIVER)\n#define RIG_TYPE_TRUNKSCANNER   (RIG_TYPE_SCANNER|RIG_FLAG_TRUNKING)\n#define RIG_TYPE_COMPUTER       (RIG_FLAG_TRANSCEIVER|RIG_FLAG_COMPUTER)\n#define RIG_TYPE_TUNER          RIG_FLAG_TUNER\n//! @endcond\n\n\n/**\n * \\brief Development status of the backend\n */\nenum rig_status_e {\n    RIG_STATUS_ALPHA = 0,   /*!< Alpha quality, i.e. development */\n    RIG_STATUS_UNTESTED,    /*!< Written from available specs, rig unavailable for test, feedback wanted! */\n    RIG_STATUS_BETA,        /*!< Beta quality */\n    RIG_STATUS_STABLE,      /*!< Stable */\n    RIG_STATUS_BUGGY        /*!< Was stable, but something broke it! */\n    /* RIG_STATUS_NEW  *     *!< Initial release of code\n     * !! Use of RIG_STATUS_NEW is deprecated. Do not use it anymore */\n};\n\n/**\n * \\brief Map all deprecated RIG_STATUS_NEW references to\n *        RIG_STATUS_UNTESTED for backward compatibility\n */\n#define RIG_STATUS_NEW  RIG_STATUS_UNTESTED\n\n\n/**\n * \\brief Repeater shift type\n */\ntypedef enum {\n    RIG_RPT_SHIFT_NONE = 0, /*!< No repeater shift */\n    RIG_RPT_SHIFT_MINUS,    /*!< \"-\" shift */\n    RIG_RPT_SHIFT_PLUS      /*!< \"+\" shift */\n} rptr_shift_t;\n\n\n/**\n * \\brief Split mode\n */\ntypedef enum {\n    RIG_SPLIT_OFF = 0,  /*!< Split mode disabled */\n    RIG_SPLIT_ON        /*!< Split mode enabled */\n} split_t;\n\n\n/**\n * \\brief Frequency type,\n *\n * Frequency type unit in Hz, able to hold SHF frequencies.\n */\ntypedef double freq_t;\n\n/**\n * \\brief printf(3) format to be used for freq_t type\n */\n#define PRIfreq \".0f\"\n\n/**\n * \\brief scanf(3) format to be used for freq_t type\n */\n#define SCNfreq \"lf\"\n/**\n * \\brief printf(3) format to be used for freq_t type\n */\n#define FREQFMT SCNfreq\n\n\n/**\n * \\brief Short frequency type\n *\n * Frequency in Hz restricted to 31bits, suitable for offsets, shifts, etc..\n */\ntypedef signed long shortfreq_t;\n\n/** \\brief \\c Macro to return Hz when f=Hz  */\n#define Hz(f)   ((freq_t)(f))\n/** \\brief \\c Macro to return Hz when f=kHz  */\n#define kHz(f)  ((freq_t)((f)*(freq_t)1000))\n/** \\brief \\c Macro to return Hz when f=MHz  */\n#define MHz(f)  ((freq_t)((f)*(freq_t)1000000))\n/** \\brief \\c Macro to return Hz when f=GHz  */\n#define GHz(f)  ((freq_t)((f)*(freq_t)1000000000))\n\n/** \\brief \\c Macro to return short Hz when f=Hz  */\n#define s_Hz(f)     ((shortfreq_t)(f))\n/** \\brief \\c Macro to return short Hz when f=kHz  */\n#define s_kHz(f)    ((shortfreq_t)((f)*(shortfreq_t)1000))\n/** \\brief \\c Macro to return short Hz when f=MHz  */\n#define s_MHz(f)    ((shortfreq_t)((f)*(shortfreq_t)1000000))\n/** \\brief \\c Macro to return short Hz when f=GHz  */\n#define s_GHz(f)    ((shortfreq_t)((f)*(shortfreq_t)1000000000))\n\n/** \\brief \\c Frequency none -- used as default value for checking  */\n#define RIG_FREQ_NONE Hz(0)\n\n\n/**\n * \\brief VFO definition\n *\n * There are several ways of using a vfo_t. For most cases, using RIG_VFO_A,\n * RIG_VFO_B, RIG_VFO_CURR, etc., as opaque macros should suffice.\n *\n * Strictly speaking a VFO is Variable Frequency Oscillator.\n * Here, it is referred as a tunable channel, from the radio operator's\n * point of view. The channel can be designated individually by its real\n * number, or by using an alias.\n *\n * Aliases may or may not be honored by a backend and are defined using\n * high significant bits, i.e. RIG_VFO_MEM, RIG_VFO_MAIN, etc.\n */\ntypedef unsigned int vfo_t;\n\n/** \\brief '' -- used in caps */\n\n#define RIG_VFO_N(n)        (1u<<(n))\n\n/** \\brief \\c VFONone -- vfo unknown */\n#define RIG_VFO_NONE        0\n\n/** \\brief \\c VFOA -- VFO A */\n#define RIG_VFO_A           RIG_VFO_N(0)\n\n/** \\brief \\c VFOB -- VFO B */\n#define RIG_VFO_B           RIG_VFO_N(1)\n\n/** \\brief \\c VFOC -- VFO C */\n#define RIG_VFO_C           RIG_VFO_N(2)\n\n// Any addition VFOS need to go from 3-20\n// To maintain backward compatibility these values cannot change\n\n/** \\brief \\c SubA -- alias for SUB_A */\n#define RIG_VFO_SUB_A       RIG_VFO_N(21)\n\n/** \\brief \\c SubB -- alias for SUB_B */\n#define RIG_VFO_SUB_B       RIG_VFO_N(22)\n\n/** \\brief \\c SubC -- alias for SUB_B */\n#define RIG_VFO_SUB_C       RIG_VFO_N(3)\n\n/** \\brief \\c MainA -- alias for MAIN_A */\n#define RIG_VFO_MAIN_A      RIG_VFO_N(23)\n\n/** \\brief \\c MainB -- alias for MAIN_B */\n#define RIG_VFO_MAIN_B      RIG_VFO_N(24)\n\n/** \\brief \\c MainC -- alias for MAIN_C */\n#define RIG_VFO_MAIN_C      RIG_VFO_N(4)\n\n/** \\brief \\c Other -- alias for OTHER -- e.g. Icom rigs without get_vfo capability */\n#define RIG_VFO_OTHER       RIG_VFO_N(5)\n\n/** \\brief \\c Sub -- alias for SUB */\n#define RIG_VFO_SUB         RIG_VFO_N(25)\n\n/** \\brief \\c Main -- alias for MAIN */\n#define RIG_VFO_MAIN        RIG_VFO_N(26)\n\n/** \\brief \\c VFO -- means (last or any)VFO mode, with set_vfo */\n#define RIG_VFO_VFO         RIG_VFO_N(27)\n\n/** \\brief \\c MEM -- means Memory mode, to be used with set_vfo */\n#define RIG_VFO_MEM         RIG_VFO_N(28)\n\n/** \\brief \\c currVFO -- current \"tunable channel\"/VFO */\n#define RIG_VFO_CURR        RIG_VFO_N(29)\n\n/** \\brief \\c Flag to set if VFO can transmit */\n#define RIG_VFO_TX_FLAG     RIG_VFO_N(30)\n\n/** \\brief \\c Flag to set all VFOS */\n#define RIG_VFO_ALL     RIG_VFO_N(31)\n\n// we can also use RIG_VFO_N(31) if needed\n\n// Misc VFO Macros\n\n/** \\brief \\c Macro to tell you if VFO can transmit */\n#define RIG_VFO_TX_VFO(v)   ((v)|RIG_VFO_TX_FLAG)\n\n/** \\brief \\c TX -- alias for split tx or uplink, of VFO_CURR  */\n#define RIG_VFO_TX          RIG_VFO_TX_VFO(RIG_VFO_CURR)\n\n/** \\brief \\c RX -- alias for split rx or downlink */\n#define RIG_VFO_RX          RIG_VFO_CURR\n\n\n/*\n * targetable bitfields, for internal use.\n * In rig.c lack of a flag will case a VFO change if needed\n * So setting this flag will mean the backend handles any VFO needs\n * For many rigs RITXIT, PTT, MEM, and BANK are non-VFO commands so need these flags to avoid unnecessary VFO swapping\n */\n//! @cond Doxygen_Suppress\n#define RIG_TARGETABLE_NONE 0\n#define RIG_TARGETABLE_FREQ (1<<0)\n#define RIG_TARGETABLE_MODE (1<<1) // mode by vfo or same mode on both vfos\n#define RIG_TARGETABLE_PURE (1<<2) // deprecated -- not used -- reuse it\n#define RIG_TARGETABLE_TONE (1<<3)\n#define RIG_TARGETABLE_FUNC (1<<4)\n#define RIG_TARGETABLE_LEVEL (1<<5)\n#define RIG_TARGETABLE_RITXIT (1<<6)\n#define RIG_TARGETABLE_PTT (1<<7)\n#define RIG_TARGETABLE_MEM (1<<8)\n#define RIG_TARGETABLE_BANK (1<<9)\n#define RIG_TARGETABLE_ANT (1<<10)\n#define RIG_TARGETABLE_ROOFING (1<<11) // roofing filter targetable by VFO\n#define RIG_TARGETABLE_SPECTRUM (1<<12) // spectrum scope targetable by VFO\n#define RIG_TARGETABLE_BAND (1<<13) // Band select -- e.g. Yaeus BS command\n#define RIG_TARGETABLE_COMMON (RIG_TARGETABLE_RITXIT | RIG_TARGETABLE_PTT | RIG_TARGETABLE_MEM | RIG_TARGETABLE_BANK)\n#define RIG_TARGETABLE_ALL  0x7fffffff\n//! @endcond\n//\n//\n// Newer Icoms like the 9700 and 910 have VFOA/B on both Main & Sub\n// Compared to older rigs which have one or the other\n// So we need to distinguish between them\n//! @cond Doxygen_Suppress\n#define VFO_HAS_A_B ((rig->state.vfo_list & (RIG_VFO_A|RIG_VFO_B)) == (RIG_VFO_A|RIG_VFO_B))\n#define VFO_HAS_MAIN_SUB ((rig->state.vfo_list & (RIG_VFO_MAIN|RIG_VFO_SUB)) == (RIG_VFO_MAIN|RIG_VFO_SUB))\n#define VFO_HAS_MAIN_SUB_ONLY ((!VFO_HAS_A_B) & VFO_HAS_MAIN_SUB)\n#define VFO_HAS_MAIN_SUB_A_B_ONLY (VFO_HAS_A_B & VFO_HAS_MAIN_SUB)\n#define VFO_HAS_A_B_ONLY (VFO_HAS_A_B & (!VFO_HAS_MAIN_SUB))\n#define VFO_DUAL (RIG_VFO_MAIN_A|RIG_VFO_MAIN_B|RIG_VFO_SUB_A|RIG_VFO_SUB_B)\n#define VFO_HAS_DUAL ((rig->state.vfo_list & VFO_DUAL) == VFO_DUAL)\n//! @endcond\n\n/**\n * \\brief Macro for bandpass to be set to normal\n * \\def RIG_PASSBAND_NORMAL\n */\n#define RIG_PASSBAND_NORMAL     s_Hz(0)\n\n/**\n * \\brief Macro for bandpass to be left alone\n */\n#define RIG_PASSBAND_NOCHANGE   s_Hz(-1)\n\n/**\n *\n * \\sa rig_passband_normal(), rig_passband_narrow(), rig_passband_wide()\n */\ntypedef shortfreq_t pbwidth_t;\n\n\n/**\n * \\brief DCD status\n */\ntypedef enum dcd_e {\n    RIG_DCD_OFF = 0,    /*!< Squelch closed */\n    RIG_DCD_ON          /*!< Squelch open */\n} dcd_t;\n\n\n/**\n * \\brief DCD type\n *\n * \\sa rig_get_dcd()\n */\ntypedef enum {\n    RIG_DCD_NONE = 0,   /*!< No DCD available */\n    RIG_DCD_RIG,        /*!< Rig has DCD status support, i.e. rig has get_dcd cap */\n    RIG_DCD_SERIAL_DSR, /*!< DCD status from serial DSR signal */\n    RIG_DCD_SERIAL_CTS, /*!< DCD status from serial CTS signal */\n    RIG_DCD_SERIAL_CAR, /*!< DCD status from serial CD signal */\n    RIG_DCD_PARALLEL,   /*!< DCD status from parallel port pin */\n    RIG_DCD_CM108,      /*!< DCD status from CM108 vol dn pin */\n    RIG_DCD_GPIO,       /*!< DCD status from GPIO pin */\n    RIG_DCD_GPION,      /*!< DCD status from inverted GPIO pin */\n} dcd_type_t;\n\n\n/**\n * \\brief PTT status\n */\ntypedef enum {\n    RIG_PTT_OFF = 0,    /*!< PTT deactivated */\n    RIG_PTT_ON,         /*!< PTT activated */\n    RIG_PTT_ON_MIC,     /*!< PTT Mic only, fallbacks on RIG_PTT_ON if unavailable */\n    RIG_PTT_ON_DATA     /*!< PTT Data (Mic-muted), fallbacks on RIG_PTT_ON if unavailable */\n} ptt_t;\n\n\n/**\n * \\brief PTT type\n *\n * \\sa rig_get_ptt()\n */\ntypedef enum {\n    RIG_PTT_NONE = 0,       /*!< No PTT available */\n    RIG_PTT_RIG,            /*!< Legacy PTT (CAT PTT) */\n    RIG_PTT_SERIAL_DTR,     /*!< PTT control through serial DTR signal */\n    RIG_PTT_SERIAL_RTS,     /*!< PTT control through serial RTS signal */\n    RIG_PTT_PARALLEL,       /*!< PTT control through parallel port */\n    RIG_PTT_RIG_MICDATA,    /*!< Legacy PTT (CAT PTT), supports RIG_PTT_ON_MIC/RIG_PTT_ON_DATA */\n    RIG_PTT_CM108,          /*!< PTT control through CM108 GPIO pin */\n    RIG_PTT_GPIO,           /*!< PTT control through GPIO pin */\n    RIG_PTT_GPION,          /*!< PTT control through inverted GPIO pin */\n} ptt_type_t;\n\n\n/**\n * \\brief Radio power state\n */\ntypedef enum {\n    RIG_POWER_OFF =     0,          /*!< Power off */\n    RIG_POWER_ON =      (1 << 0),   /*!< Power on */\n    RIG_POWER_STANDBY = (1 << 1),   /*!< Standby */\n    RIG_POWER_OPERATE = (1 << 2),   /*!< Operate (from Standby) */\n    RIG_POWER_UNKNOWN = (1 << 3)    /*!< Unknown power status */\n} powerstat_t;\n\n\n/**\n * \\brief Reset operation\n */\ntypedef enum {\n    RIG_RESET_NONE =    0,          /*!< No reset */\n    RIG_RESET_SOFT =    (1 << 0),   /*!< Software reset */\n    RIG_RESET_VFO =     (1 << 1),   /*!< VFO reset */\n    RIG_RESET_MCALL =   (1 << 2),   /*!< Memory clear */\n    RIG_RESET_MASTER =  (1 << 3)    /*!< Master reset */\n} reset_t;\n\n\n/**\n * \\brief VFO operation\n *\n * A VFO operation is an action on a VFO (or tunable memory).\n * The difference with a function is that an action has no on/off\n * status, it is performed at once.\n *\n * NOTE: the vfo argument for some vfo operation may be irrelevant,\n * and thus will be ignored.\n *\n * The VFO/MEM \"mode\" is set by rig_set_vfo.\\n\n * \\c STRING used in rigctl\n *\n * \\sa rig_parse_vfo_op(), rig_strvfop()\n */\ntypedef enum {\n    RIG_OP_NONE =       0,          /*!< '' No VFO_OP */\n    RIG_OP_CPY =        (1 << 0),   /*!< \\c CPY -- VFO A = VFO B */\n    RIG_OP_XCHG =       (1 << 1),   /*!< \\c XCHG -- Exchange VFO A/B */\n    RIG_OP_FROM_VFO =   (1 << 2),   /*!< \\c FROM_VFO -- VFO->MEM */\n    RIG_OP_TO_VFO =     (1 << 3),   /*!< \\c TO_VFO -- MEM->VFO */\n    RIG_OP_MCL =        (1 << 4),   /*!< \\c MCL -- Memory clear */\n    RIG_OP_UP =         (1 << 5),   /*!< \\c UP -- UP increment VFO freq by tuning step*/\n    RIG_OP_DOWN =       (1 << 6),   /*!< \\c DOWN -- DOWN decrement VFO freq by tuning step*/\n    RIG_OP_BAND_UP =    (1 << 7),   /*!< \\c BAND_UP -- Band UP */\n    RIG_OP_BAND_DOWN =  (1 << 8),   /*!< \\c BAND_DOWN -- Band DOWN */\n    RIG_OP_LEFT =       (1 << 9),   /*!< \\c LEFT -- LEFT */\n    RIG_OP_RIGHT =      (1 << 10),  /*!< \\c RIGHT -- RIGHT */\n    RIG_OP_TUNE =       (1 << 11),  /*!< \\c TUNE -- Start tune */\n    RIG_OP_TOGGLE =     (1 << 12)   /*!< \\c TOGGLE -- Toggle VFOA and VFOB */\n} vfo_op_t;\n\n/**\n * \\brief Band enumeration\n *\n * Some rig commands like Yaesu band select know about bands\n *\n * \\sa rig_set_level()\n */\ntypedef enum { // numbers here reflect the Yaesu values\n    RIG_BAND_160M = 0,      /*!< \\c 160M */\n    RIG_BAND_80M  = 1,      /*!< \\c 80M */\n    RIG_BAND_60M  = 2,      /*!< \\c 60M */\n    RIG_BAND_40M  = 3,      /*!< \\c 40M */\n    RIG_BAND_30M  = 4,      /*!< \\c 30M */\n    RIG_BAND_20M  = 5,      /*!< \\c 20M */\n    RIG_BAND_17M  = 6,      /*!< \\c 17M */\n    RIG_BAND_15M  = 7,      /*!< \\c 15M */\n    RIG_BAND_12M  = 8,      /*!< \\c 12M */\n    RIG_BAND_10M  = 9,      /*!< \\c 10M */\n    RIG_BAND_6M   = 10,     /*!< \\c 6M */\n    RIG_BAND_GEN = 11,      /*!< \\c 60M */\n    RIG_BAND_MW  = 12,      /*!< \\c Medium Wave */\n    RIG_BAND_UNUSED  = 13,  /*!< \\c Medium Wave */\n    RIG_BAND_AIR = 14,      /*!< \\c Air band */\n    RIG_BAND_144MHZ = 15,   /*!< \\c 144MHz */\n    RIG_BAND_430MHZ = 16,   /*!< \\c 430MHz */\n} hamlib_band_t;\n\n\n/**\n * \\brief Rig Scan operation\n *\n * Various scan operations supported by a rig.\\n\n * \\c STRING used in rigctl\n *\n * \\sa rig_parse_scan(), rig_strscan()\n */\ntypedef enum {\n    RIG_SCAN_NONE =     0,          /*!< '' No-op value */\n    RIG_SCAN_MEM =      (1 << 0),   /*!< \\c MEM -- Scan all memory channels */\n    RIG_SCAN_SLCT =     (1 << 1),   /*!< \\c SLCT -- Scan all selected memory channels */\n    RIG_SCAN_PRIO =     (1 << 2),   /*!< \\c PRIO -- Priority watch (mem or call channel) */\n    RIG_SCAN_PROG =     (1 << 3),   /*!< \\c PROG -- Programmed(edge) scan */\n    RIG_SCAN_DELTA =    (1 << 4),   /*!< \\c DELTA -- delta-f scan */\n    RIG_SCAN_VFO =      (1 << 5),   /*!< \\c VFO -- most basic scan */\n    RIG_SCAN_PLT =      (1 << 6),   /*!< \\c PLT -- Scan using pipelined tuning */\n    RIG_SCAN_STOP =     (1 << 7)    /*!< \\c STOP -- Stop scanning */\n} scan_t;\n\n\n/**\n * \\brief configuration token\n */\ntypedef long token_t;\n\n\n//! @cond Doxygen_Suppress\n#define RIG_CONF_END 0\n//! @endcond\n\n\n/**\n * \\brief parameter types\n *\n *   Used with configuration, parameter and extra-parm tables.\n *\n *   Current internal implementation\n *   NUMERIC: val.f or val.i\n *   COMBO: val.i, starting from 0.  Points to a table of strings or asci stored values.\n *   STRING: val.s or val.cs\n *   CHECKBUTTON: val.i 0/1\n *   BINARY: val.b\n */\n\n/* strongly inspired from soundmodem. Thanks Thomas! */\nenum rig_conf_e {\n    RIG_CONF_STRING,        /*!<    String type */\n    RIG_CONF_COMBO,         /*!<    Combo type */\n    RIG_CONF_NUMERIC,       /*!<    Numeric type integer or real */\n    RIG_CONF_CHECKBUTTON,   /*!<    on/off type */\n    RIG_CONF_BUTTON,        /*!<    Button type */\n    RIG_CONF_BINARY         /*!<    Binary buffer type */\n};\n\n//! @cond Doxygen_Suppress\n#define RIG_COMBO_MAX   16\n#define RIG_BIN_MAX  80\n//! @endcond\n\n/**\n * \\brief Configuration parameter structure.\n */\nstruct confparams {\n    token_t token;          /*!< Conf param token ID */\n    const char *name;       /*!< Param name, no spaces allowed */\n    const char *label;      /*!< Human readable label */\n    const char *tooltip;    /*!< Hint on the parameter */\n    const char *dflt;       /*!< Default value */\n    enum rig_conf_e type;   /*!< Type of the parameter */\n    union {                 /*!< */\n        struct {            /*!< */\n            float min;      /*!< Minimum value */\n            float max;      /*!< Maximum value */\n            float step;     /*!< Step */\n        } n;                /*!< Numeric type */\n        struct {            /*!< */\n            const char *combostr[RIG_COMBO_MAX];    /*!< Combo list */\n        } c;                /*!< Combo type */\n    } u;                    /*!< Type union */\n};\n\n\n/**\n * \\brief Announce\n *\n * Designate optional speech synthesizer.\n */\ntypedef enum {\n    RIG_ANN_NONE =      0,              /*!< None */\n    RIG_ANN_OFF =       RIG_ANN_NONE,   /*!< disable announces */\n    RIG_ANN_FREQ =      (1 << 0),       /*!< Announce frequency */\n    RIG_ANN_RXMODE =    (1 << 1),       /*!< Announce receive mode */\n    RIG_ANN_CW =        (1 << 2),       /*!< CW */\n    RIG_ANN_ENG =       (1 << 3),       /*!< English */\n    RIG_ANN_JAP =       (1 << 4)        /*!< Japan */\n} ann_t;\n\n\n/**\n * \\brief Antenna typedef\n * \\typedef ant_t\n */\n/**\n * \\brief Antenna number\n * \\def RIG_ANT_NONE\n * No antenna set yet or unknown\n */\n/**\n * \\brief Antenna conversion macro\n * \\def RIG_ANT_N\n * Convert antenna number to bit mask\n */\n/**\n * \\brief Macro for Ant#1\n * \\def RIG_ANT_1\n */\n/**\n * \\brief Macro for Ant#2\n * \\def RIG_ANT_2\n */\n/**\n * \\brief Macro for Ant#3\n * \\def RIG_ANT_3\n */\n/**\n * \\brief Macro for Ant#4\n * \\def RIG_ANT_4\n */\n/**\n * \\brief Macro for Ant#5\n * \\def RIG_ANT_5\n */\n/**\n * \\brief Antenna is on whatever \"current\" means\n * \\def RIG_ANT_CURR\n */\n/**\n * \\brief Macro for unknown antenna\n * \\def RIG_ANT_UNKNOWN\n */\n/**\n * \\brief Maximum antenna#\n * \\def RIG_ANT_MAX\n */\ntypedef unsigned int ant_t;\n\n#define RIG_ANT_NONE    0\n#define RIG_ANT_N(n)    ((ant_t)1<<(n))\n#define RIG_ANT_1       RIG_ANT_N(0)\n#define RIG_ANT_2       RIG_ANT_N(1)\n#define RIG_ANT_3       RIG_ANT_N(2)\n#define RIG_ANT_4       RIG_ANT_N(3)\n#define RIG_ANT_5       RIG_ANT_N(4)\n\n#define RIG_ANT_UNKNOWN RIG_ANT_N(30)\n#define RIG_ANT_CURR    RIG_ANT_N(31)\n\n#define RIG_ANT_MAX 32\n\n\n//! @cond Doxygen_Suppress\n#define RIG_AGC_LAST RIG_AGC_AUTO\n//! @endcond\n\n#if 1 // deprecated\n/**\n * \\brief Level display meters\n */\nenum meter_level_e {\n    RIG_METER_NONE =    0,          /*< No display meter */\n    RIG_METER_SWR =     (1 << 0),   /*< Stationary Wave Ratio */\n    RIG_METER_COMP =    (1 << 1),   /*< Compression level */\n    RIG_METER_ALC =     (1 << 2),   /*< ALC */\n    RIG_METER_IC =      (1 << 3),   /*< IC */\n    RIG_METER_DB =      (1 << 4),   /*< DB */\n    RIG_METER_PO =      (1 << 5),   /*< Power Out */\n    RIG_METER_VDD =     (1 << 6),   /*< Final Amp Voltage */\n    RIG_METER_TEMP =    (1 << 7)    /*< Final Amp Temperature */\n};\n#endif\n\n\n/**\n * \\brief Universal approach for passing values\n *\n * \\sa rig_set_level(), rig_get_level(), rig_set_parm(), rig_get_parm()\n */\ntypedef union {\n    signed int i;       /*!< Signed integer */\n    float f;            /*!< Single precision float */\n    char *s;            /*!< Pointer to char string */\n    const char *cs;     /*!< Pointer to constant char string */\n//! @cond Doxygen_Suppress\n    struct {\n        int l;          /*!< Length of data */\n        unsigned char *d; /* Pointer to data buffer */\n    } b;\n//! @endcond\n} value_t;\n\n\n/**\n * \\brief Rig Level Settings\n *\n * Various operating levels supported by a rig.\\n\n * \\c STRING used in rigctl\n *\n * \\sa rig_parse_level(), rig_strlevel()\n */\ntypedef uint64_t rig_level_e;\n#define RIG_LEVEL_NONE       0              /*!< '' -- No Level */\n#define RIG_LEVEL_PREAMP     CONSTANT_64BIT_FLAG(0)       /*!< \\c PREAMP -- Preamp, arg int (dB) */\n#define RIG_LEVEL_ATT        CONSTANT_64BIT_FLAG(1)       /*!< \\c ATT -- Attenuator, arg int (dB) */\n#define RIG_LEVEL_VOXDELAY   CONSTANT_64BIT_FLAG(2)       /*!< \\c VOXDELAY -- VOX delay, arg int (tenth of seconds) */\n#define RIG_LEVEL_AF         CONSTANT_64BIT_FLAG(3)       /*!< \\c AF -- Volume, arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_RF         CONSTANT_64BIT_FLAG(4)       /*!< \\c RF -- RF gain (not TX power) arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_SQL        CONSTANT_64BIT_FLAG(5)       /*!< \\c SQL -- Squelch, arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_IF         CONSTANT_64BIT_FLAG(6)       /*!< \\c IF shift -- IF, arg int (+/-Hz) */\n#define RIG_LEVEL_APF        CONSTANT_64BIT_FLAG(7)       /*!< \\c APF -- Audio Peak Filter, arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_NR         CONSTANT_64BIT_FLAG(8)       /*!< \\c NR -- Noise Reduction, arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_PBT_IN     CONSTANT_64BIT_FLAG(9)       /*!< \\c PBT_IN -- Twin PBT (inside) arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_PBT_OUT    CONSTANT_64BIT_FLAG(10)      /*!< \\c PBT_OUT -- Twin PBT (outside) arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_CWPITCH    CONSTANT_64BIT_FLAG(11)      /*!< \\c CWPITCH -- CW pitch, arg int (Hz) */\n#define RIG_LEVEL_RFPOWER    CONSTANT_64BIT_FLAG(12)      /*!< \\c RFPOWER -- RF Power, arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_MICGAIN    CONSTANT_64BIT_FLAG(13)      /*!< \\c MICGAIN -- MIC Gain, arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_KEYSPD     CONSTANT_64BIT_FLAG(14)      /*!< \\c KEYSPD -- Key Speed, arg int (WPM) */\n#define RIG_LEVEL_NOTCHF     CONSTANT_64BIT_FLAG(15)      /*!< \\c NOTCHF -- Notch Freq., arg int (Hz) */\n#define RIG_LEVEL_COMP       CONSTANT_64BIT_FLAG(16)      /*!< \\c COMP -- Compressor, arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_AGC        CONSTANT_64BIT_FLAG(17)      /*!< \\c AGC -- AGC, arg int (see enum agc_level_e) */\n#define RIG_LEVEL_BKINDL     CONSTANT_64BIT_FLAG(18)      /*!< \\c BKINDL -- BKin Delay, arg int (tenth of dots) */\n#define RIG_LEVEL_BALANCE    CONSTANT_64BIT_FLAG(19)      /*!< \\c BAL -- Balance (Dual Watch) arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_METER      CONSTANT_64BIT_FLAG(20)      /*!< \\c METER -- Display meter, arg int (see enum meter_level_e) */\n#define RIG_LEVEL_VOXGAIN    CONSTANT_64BIT_FLAG(21)      /*!< \\c VOXGAIN -- VOX gain level, arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_ANTIVOX    CONSTANT_64BIT_FLAG(22)      /*!< \\c ANTIVOX -- anti-VOX level, arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_SLOPE_LOW  CONSTANT_64BIT_FLAG(23)      /*!< \\c SLOPE_LOW -- Slope tune, low frequency cut, arg int (Hz) */\n#define RIG_LEVEL_SLOPE_HIGH CONSTANT_64BIT_FLAG(24)      /*!< \\c SLOPE_HIGH -- Slope tune, high frequency cut, arg int (Hz) */\n#define RIG_LEVEL_BKIN_DLYMS CONSTANT_64BIT_FLAG(25)      /*!< \\c BKIN_DLYMS -- BKin Delay, arg int Milliseconds */\n\n    /*!< These are not settable */\n#define RIG_LEVEL_RAWSTR     CONSTANT_64BIT_FLAG(26)      /*!< \\c RAWSTR -- Raw (A/D) value for signal strength, specific to each rig, arg int */\n//#define RIG_LEVEL_SQLSTAT    CONSTANT_64BIT_FLAG(27)      /*!< \\c SQLSTAT -- SQL status, arg int (open=1/closed=0). Deprecated, use get_dcd instead */\n#define RIG_LEVEL_SWR        CONSTANT_64BIT_FLAG(28)      /*!< \\c SWR -- SWR, arg float [0.0 ... infinite] */\n#define RIG_LEVEL_ALC        CONSTANT_64BIT_FLAG(29)      /*!< \\c ALC -- ALC, arg float */\n#define RIG_LEVEL_STRENGTH   CONSTANT_64BIT_FLAG(30)      /*!< \\c STRENGTH -- Effective (calibrated) signal strength relative to S9, arg int (dB) */\n    /* RIG_LEVEL_BWC        (1<<31) */        /*!< Bandwidth Control, arg int (Hz) */\n#define RIG_LEVEL_RFPOWER_METER  CONSTANT_64BIT_FLAG(32)      /*!< \\c RFPOWER_METER -- RF power output meter, arg float [0.0 ... 1.0] (percentage of maximum power) */\n#define RIG_LEVEL_COMP_METER   CONSTANT_64BIT_FLAG(33)      /*!< \\c COMP_METER -- Audio output level compression meter, arg float (dB) */\n#define RIG_LEVEL_VD_METER     CONSTANT_64BIT_FLAG(34)      /*!< \\c VD_METER -- Input voltage level meter, arg float (V, volts) */\n#define RIG_LEVEL_ID_METER     CONSTANT_64BIT_FLAG(35)      /*!< \\c ID_METER -- Current draw meter, arg float (A, amperes) */\n\n#define RIG_LEVEL_NOTCHF_RAW   CONSTANT_64BIT_FLAG(36)      /*!< \\c NOTCHF_RAW -- Notch Freq., arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_MONITOR_GAIN CONSTANT_64BIT_FLAG(37)      /*!< \\c MONITOR_GAIN -- Monitor gain (level for monitoring of transmitted audio) arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_NB           CONSTANT_64BIT_FLAG(38)      /*!< \\c NB -- Noise Blanker level, arg float [0.0 ... 1.0] */\n#define RIG_LEVEL_RFPOWER_METER_WATTS  CONSTANT_64BIT_FLAG(39)      /*!< \\c RFPOWER_METER_WATTS -- RF power output meter, arg float [0.0 ... MAX] (output power in watts) */\n#define RIG_LEVEL_SPECTRUM_MODE        CONSTANT_64BIT_FLAG(40)      /*!< \\c SPECTRUM_MODE -- Spectrum scope mode, arg int (see enum rig_spectrum_mode_e). Supported modes defined in rig caps. */\n#define RIG_LEVEL_SPECTRUM_SPAN        CONSTANT_64BIT_FLAG(41)      /*!< \\c SPECTRUM_SPAN -- Spectrum scope span in center mode, arg int (Hz). Supported spans defined in rig caps. */\n#define RIG_LEVEL_SPECTRUM_EDGE_LOW    CONSTANT_64BIT_FLAG(42)      /*!< \\c SPECTRUM_EDGE_LOW -- Spectrum scope low edge in fixed mode, arg int (Hz) */\n#define RIG_LEVEL_SPECTRUM_EDGE_HIGH   CONSTANT_64BIT_FLAG(43)      /*!< \\c SPECTRUM_EDGE_HIGH -- Spectrum scope high edge in fixed mode, arg int (Hz) */\n#define RIG_LEVEL_SPECTRUM_SPEED       CONSTANT_64BIT_FLAG(44)      /*!< \\c SPECTRUM_SPEED -- Spectrum scope update speed, arg int (highest is fastest, define rig-specific granularity) */\n#define RIG_LEVEL_SPECTRUM_REF         CONSTANT_64BIT_FLAG(45)      /*!< \\c SPECTRUM_REF -- Spectrum scope reference display level, arg float (dB, define rig-specific granularity) */\n#define RIG_LEVEL_SPECTRUM_AVG         CONSTANT_64BIT_FLAG(46)      /*!< \\c SPECTRUM_AVG -- Spectrum scope averaging mode, arg int (see struct rig_spectrum_avg_mode). Supported averaging modes defined in rig caps. */\n#define RIG_LEVEL_SPECTRUM_ATT         CONSTANT_64BIT_FLAG(47)      /*!< \\c SPECTRUM_ATT -- Spectrum scope attenuator, arg int (dB). Supported attenuator values defined in rig caps. */\n#define RIG_LEVEL_TEMP_METER           CONSTANT_64BIT_FLAG(48)      /*!< \\c TEMP_METER -- arg float (C, centigrade) */\n#define RIG_LEVEL_BAND_SELECT          CONSTANT_64BIT_FLAG(49)      /*!< \\c BAND_SELECT -- arg enum BAND_ENUM */\n#define RIG_LEVEL_50           CONSTANT_64BIT_FLAG(50)      /*!< \\c Future use */\n#define RIG_LEVEL_51           CONSTANT_64BIT_FLAG(51)      /*!< \\c Future use */\n#define RIG_LEVEL_52           CONSTANT_64BIT_FLAG(52)      /*!< \\c Future use */\n#define RIG_LEVEL_53           CONSTANT_64BIT_FLAG(53)      /*!< \\c Future use */\n#define RIG_LEVEL_54           CONSTANT_64BIT_FLAG(54)      /*!< \\c Future use */\n#define RIG_LEVEL_55           CONSTANT_64BIT_FLAG(55)      /*!< \\c Future use */\n#define RIG_LEVEL_56           CONSTANT_64BIT_FLAG(56)      /*!< \\c Future use */\n#define RIG_LEVEL_57           CONSTANT_64BIT_FLAG(57)      /*!< \\c Future use */\n#define RIG_LEVEL_58           CONSTANT_64BIT_FLAG(58)      /*!< \\c Future use */\n#define RIG_LEVEL_59           CONSTANT_64BIT_FLAG(59)      /*!< \\c Future use */\n#define RIG_LEVEL_60           CONSTANT_64BIT_FLAG(60)      /*!< \\c Future use */\n#define RIG_LEVEL_61           CONSTANT_64BIT_FLAG(61)      /*!< \\c Future use */\n#define RIG_LEVEL_62           CONSTANT_64BIT_FLAG(62)      /*!< \\c Future use */\n#define RIG_LEVEL_63           CONSTANT_64BIT_FLAG(63)      /*!< \\c Future use */\n\n//! @cond Doxygen_Suppress\n#define RIG_LEVEL_FLOAT_LIST (RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_APF|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_COMP|RIG_LEVEL_BALANCE|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB|RIG_LEVEL_SPECTRUM_REF|RIG_LEVEL_TEMP_METER)\n\n#define RIG_LEVEL_READONLY_LIST (RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_STRENGTH|RIG_LEVEL_RAWSTR|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER)\n\n#define RIG_LEVEL_IS_FLOAT(l) ((l)&RIG_LEVEL_FLOAT_LIST)\n#define RIG_LEVEL_SET(l) ((l)&~RIG_LEVEL_READONLY_LIST)\n//! @endcond\n\n\n/**\n * \\brief Rig Parameters\n *\n * Parameters are settings that are not VFO specific.\\n\n * \\c STRING used in rigctl\n *\n * \\sa rig_parse_parm(), rig_strparm()\n */\nenum rig_parm_e {\n    RIG_PARM_NONE =         0,          /*!< '' -- No Parm */\n    RIG_PARM_ANN =          (1 << 0),   /*!< \\c ANN -- \"Announce\" level, see ann_t */\n    RIG_PARM_APO =          (1 << 1),   /*!< \\c APO -- Auto power off, int in minute */\n    RIG_PARM_BACKLIGHT =    (1 << 2),   /*!< \\c BACKLIGHT -- LCD light, float [0.0 ... 1.0] */\n    RIG_PARM_BEEP =         (1 << 4),   /*!< \\c BEEP -- Beep on keypressed, int (0,1) */\n    RIG_PARM_TIME =         (1 << 5),   /*!< \\c TIME -- hh:mm:ss, int in seconds from 00:00:00 */\n    RIG_PARM_BAT =          (1 << 6),   /*!< \\c BAT -- battery level, float [0.0 ... 1.0] */\n    RIG_PARM_KEYLIGHT =     (1 << 7),   /*!< \\c KEYLIGHT -- Button backlight, on/off */\n    RIG_PARM_SCREENSAVER =  (1 << 8),   /*!< \\c SCREENSAVER -- rig specific timeouts */\n    RIG_PARM_AFIF =         (1 << 9)    /*!< \\c AFIF -- 0=AF audio, 1=IF audio -- see IC-7300/9700/705 */\n};\n\n/**\n * \\brief Rig Cookie enumerations\n *\n * Cookies are used for a client to request exclusive control of the rig until the client releases the cookie\n * Cookies will expire after 1 second unless renewed\n * Normal flow would be cookie=rig_cookie(NULL, RIG_COOKIE_GET), rig op, rig_cookie(cookie, RIG_COOKIE_RENEW), rig op, etc....\n *\n */\nenum cookie_e {\n    RIG_COOKIE_GET,     /*!< Setup a cookie */\n    RIG_COOKIE_RELEASE, /*!< Release a cookie */\n    RIG_COOKIE_RENEW,   /*!< Renew a cookie */\n};\n\n/**\n * \\brief Multicast data items\n * 3 different data item can be included in the multicast JSON\n */\nenum multicast_item_e {\n    RIG_MULTICAST_POLL,         // hamlib will be polling the rig for all rig items\n    RIG_MULTICAST_TRANSCEIVE,   // transceive will be turned on and processed\n    RIG_MULTICAST_SPECTRUM      // spectrum data will be included\n};\n\n//! @cond Doxygen_Suppress\n#define RIG_PARM_FLOAT_LIST (RIG_PARM_BACKLIGHT|RIG_PARM_BAT|RIG_PARM_KEYLIGHT)\n#define RIG_PARM_READONLY_LIST (RIG_PARM_BAT)\n\n#define RIG_PARM_IS_FLOAT(l) ((l)&RIG_PARM_FLOAT_LIST)\n#define RIG_PARM_SET(l) ((l)&~RIG_PARM_READONLY_LIST)\n//! @endcond\n\n/**\n * \\brief Setting\n *\n * This can be a func, a level or a parm.\n * Each bit designates one of them.\n */\ntypedef uint64_t setting_t;\n\n/**\n * \\brief Maximum # of rig settings\n *\n */\n#define RIG_SETTING_MAX 64\n\n/**\n * \\brief Transceive mode\n * The rig notifies the host of any event, like freq changed, mode changed, etc.\n * \\def RIG_TRN_OFF\n * \\deprecated\n * Turn it off\n * \\brief Transceive mode\n * \\def RIG_TRN_RIG\n * \\deprecated\n * RIG_TRN_RIG means the rig acts asynchronously\n * \\brief Transceive mode\n * \\def RIG_TRN_POLL\n * \\deprecated\n * RIG_TRN_POLL means we have to poll the rig\n *\n */\n#define RIG_TRN_OFF 0\n#define RIG_TRN_RIG 1\n#define RIG_TRN_POLL 2\n\n\n/**\n * \\brief Rig Function Settings\n *\n * Various operating functions supported by a rig.\\n\n * \\c STRING used in rigctl/rigctld\n *\n * \\sa rig_parse_func(), rig_strfunc()\n */\n/*\n * The C standard dictates that an enum constant is a 32 bit signed integer.\n * Setting a constant's bit 31 created a negative value that on amd64 had the\n * upper 32 bits set as well when assigned to the misc.c:rig_func_str structure.\n * This caused misc.c:rig_strfunc() to fail its comparison for RIG_FUNC_XIT\n * on amd64 (x86_64).  To use bit 31 as an unsigned long, preprocessor macros\n * have been used instead as a 'const unsigned long' which cannot be used to\n * initialize the rig_func_str.func members.  TNX KA6MAL, AC6SL.  - N0NB\n */\n#define RIG_FUNC_NONE       0                          /*!< '' -- No Function */\n#define RIG_FUNC_FAGC       CONSTANT_64BIT_FLAG (0)    /*!< \\c FAGC -- Fast AGC */\n#define RIG_FUNC_NB         CONSTANT_64BIT_FLAG (1)    /*!< \\c NB -- Noise Blanker */\n#define RIG_FUNC_COMP       CONSTANT_64BIT_FLAG (2)    /*!< \\c COMP -- Speech Compression */\n#define RIG_FUNC_VOX        CONSTANT_64BIT_FLAG (3)    /*!< \\c VOX -- Voice Operated Relay */\n#define RIG_FUNC_TONE       CONSTANT_64BIT_FLAG (4)    /*!< \\c TONE -- CTCSS Tone TX */\n#define RIG_FUNC_TSQL       CONSTANT_64BIT_FLAG (5)    /*!< \\c TSQL -- CTCSS Activate/De-activate RX */\n#define RIG_FUNC_SBKIN      CONSTANT_64BIT_FLAG (6)    /*!< \\c SBKIN -- Semi Break-in (CW mode) */\n#define RIG_FUNC_FBKIN      CONSTANT_64BIT_FLAG (7)    /*!< \\c FBKIN -- Full Break-in (CW mode) */\n#define RIG_FUNC_ANF        CONSTANT_64BIT_FLAG (8)    /*!< \\c ANF -- Automatic Notch Filter (DSP) */\n#define RIG_FUNC_NR         CONSTANT_64BIT_FLAG (9)    /*!< \\c NR -- Noise Reduction (DSP) */\n#define RIG_FUNC_AIP        CONSTANT_64BIT_FLAG (10)   /*!< \\c AIP -- RF pre-amp (AIP on Kenwood, IPO on Yaesu, etc.) */\n#define RIG_FUNC_APF        CONSTANT_64BIT_FLAG (11)   /*!< \\c APF -- Audio Peak Filter */\n#define RIG_FUNC_MON        CONSTANT_64BIT_FLAG (12)   /*!< \\c MON -- Monitor transmitted signal */\n#define RIG_FUNC_MN         CONSTANT_64BIT_FLAG (13)   /*!< \\c MN -- Manual Notch */\n#define RIG_FUNC_RF         CONSTANT_64BIT_FLAG (14)   /*!< \\c RF -- RTTY Filter */\n#define RIG_FUNC_ARO        CONSTANT_64BIT_FLAG (15)   /*!< \\c ARO -- Auto Repeater Offset */\n#define RIG_FUNC_LOCK       CONSTANT_64BIT_FLAG (16)   /*!< \\c LOCK -- Lock */\n#define RIG_FUNC_MUTE       CONSTANT_64BIT_FLAG (17)   /*!< \\c MUTE -- Mute */\n#define RIG_FUNC_VSC        CONSTANT_64BIT_FLAG (18)   /*!< \\c VSC -- Voice Scan Control */\n#define RIG_FUNC_REV        CONSTANT_64BIT_FLAG (19)   /*!< \\c REV -- Reverse transmit and receive frequencies */\n#define RIG_FUNC_SQL        CONSTANT_64BIT_FLAG (20)   /*!< \\c SQL -- Turn Squelch Monitor on/off */\n#define RIG_FUNC_ABM        CONSTANT_64BIT_FLAG (21)   /*!< \\c ABM -- Auto Band Mode */\n#define RIG_FUNC_BC         CONSTANT_64BIT_FLAG (22)   /*!< \\c BC -- Beat Canceller */\n#define RIG_FUNC_MBC        CONSTANT_64BIT_FLAG (23)   /*!< \\c MBC -- Manual Beat Canceller */\n#define RIG_FUNC_RIT        CONSTANT_64BIT_FLAG (24)   /*!< \\c RIT -- Receiver Incremental Tuning */\n#define RIG_FUNC_AFC        CONSTANT_64BIT_FLAG (25)   /*!< \\c AFC -- Auto Frequency Control ON/OFF */\n#define RIG_FUNC_SATMODE    CONSTANT_64BIT_FLAG (26)   /*!< \\c SATMODE -- Satellite mode ON/OFF */\n#define RIG_FUNC_SCOPE      CONSTANT_64BIT_FLAG (27)   /*!< \\c SCOPE -- Simple bandscope ON/OFF */\n#define RIG_FUNC_RESUME     CONSTANT_64BIT_FLAG (28)   /*!< \\c RESUME -- Scan auto-resume */\n#define RIG_FUNC_TBURST     CONSTANT_64BIT_FLAG (29)   /*!< \\c TBURST -- 1750 Hz tone burst */\n#define RIG_FUNC_TUNER      CONSTANT_64BIT_FLAG (30)   /*!< \\c TUNER -- Enable automatic tuner */\n#define RIG_FUNC_XIT        CONSTANT_64BIT_FLAG (31)   /*!< \\c XIT -- Transmitter Incremental Tuning */\n#ifndef SWIGLUAHIDE\n/* Hide the top 32 bits from the old Lua binding as they can't be represented */\n#define RIG_FUNC_NB2        CONSTANT_64BIT_FLAG (32)   /*!< \\c NB2 -- 2nd Noise Blanker */\n#define RIG_FUNC_CSQL       CONSTANT_64BIT_FLAG (33)   /*!< \\c CSQL -- DCS Squelch setting */\n#define RIG_FUNC_AFLT       CONSTANT_64BIT_FLAG (34)   /*!< \\c AFLT -- AF Filter setting */\n#define RIG_FUNC_ANL        CONSTANT_64BIT_FLAG (35)   /*!< \\c ANL -- Noise limiter setting */\n#define RIG_FUNC_BC2        CONSTANT_64BIT_FLAG (36)   /*!< \\c BC2 -- 2nd Beat Cancel */\n#define RIG_FUNC_DUAL_WATCH CONSTANT_64BIT_FLAG (37)   /*!< \\c DUAL_WATCH -- Dual Watch / Sub Receiver */\n#define RIG_FUNC_DIVERSITY  CONSTANT_64BIT_FLAG (38)   /*!< \\c DIVERSITY -- Diversity receive */\n#define RIG_FUNC_DSQL       CONSTANT_64BIT_FLAG (39)   /*!< \\c DSQL -- Digital modes squelch */\n#define RIG_FUNC_SCEN       CONSTANT_64BIT_FLAG (40)   /*!< \\c SCEN -- scrambler/encryption */\n#define RIG_FUNC_SLICE      CONSTANT_64BIT_FLAG (41)   /*!< \\c Rig slice selection -- Flex */\n#define RIG_FUNC_TRANSCEIVE CONSTANT_64BIT_FLAG (42)   /*!< \\c TRANSCEIVE -- Send radio state changes automatically ON/OFF */\n#define RIG_FUNC_SPECTRUM   CONSTANT_64BIT_FLAG (43)   /*!< \\c SPECTRUM -- Spectrum scope data output ON/OFF */\n#define RIG_FUNC_SPECTRUM_HOLD CONSTANT_64BIT_FLAG (44)   /*!< \\c SPECTRUM_HOLD -- Pause spectrum scope updates ON/OFF */\n#define RIG_FUNC_SEND_MORSE      CONSTANT_64BIT_FLAG (45)   /*!< \\c SEND_MORSE -- Send specified characters using CW */\n#define RIG_FUNC_SEND_VOICE_MEM      CONSTANT_64BIT_FLAG (46)   /*!< \\c SEND_VOICE_MEM -- Transmit in SSB message stored in memory */\n#define RIG_FUNC_BIT47      CONSTANT_64BIT_FLAG (47)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT48      CONSTANT_64BIT_FLAG (48)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT49      CONSTANT_64BIT_FLAG (49)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT50      CONSTANT_64BIT_FLAG (50)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT51      CONSTANT_64BIT_FLAG (51)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT52      CONSTANT_64BIT_FLAG (52)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT53      CONSTANT_64BIT_FLAG (53)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT54      CONSTANT_64BIT_FLAG (54)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT55      CONSTANT_64BIT_FLAG (55)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT56      CONSTANT_64BIT_FLAG (56)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT57      CONSTANT_64BIT_FLAG (57)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT58      CONSTANT_64BIT_FLAG (58)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT59      CONSTANT_64BIT_FLAG (59)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT60      CONSTANT_64BIT_FLAG (60)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT61      CONSTANT_64BIT_FLAG (61)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT62      CONSTANT_64BIT_FLAG (62)   /*!< \\c available for future RIG_FUNC items */\n#define RIG_FUNC_BIT63      CONSTANT_64BIT_FLAG (63)   /*!< \\c available for future RIG_FUNC items */\n/* 63 is this highest bit number that can be used */\n#endif\n\n/**\n * \\brief power unit macros\n * \\def mW\n * Converts a power level integer to milliwatts.  This is limited to 2\n * megawatts on 32 bit systems.\n */\n#define mW(p)       ((int)(p))\n/**\n * \\brief power unit macros\n * \\def Watts\n *\n * Converts a power level integer to watts.  This is limited to 2\n * gigawatts on 32 bit systems.\n */\n#define Watts(p)    ((int)((p)*1000))\n/**\n * \\brief power unit macros\n * \\def W\n *\n * Same as Watts for the person who is too lazy to type Watts :-)\n */\n#define W(p)        Watts(p)\n#if 0 // deprecating kW macro as this doesn't make sense\n/**\n * \\brief power unit macros\n * \\def kW\n *\n * Same as Watts for the person who is too lazy to type Watts :-)\n */\n#define kW(p)       ((int)((p)*1000000L))\n#endif\n\n\n/**\n * \\brief Radio mode\n *\n * Various modes supported by a rig.\\n\n * \\c STRING used in rigctl\n *\n * \\sa rig_parse_mode(), rig_strrmode()\n * TODO: Add new 8600 modes to rig2icom_mode() and icom2rig_mode() in frame.c\n */\ntypedef uint64_t rmode_t;\n\n#define    RIG_MODE_NONE      0                         /*!< '' -- None */\n#define    RIG_MODE_AM        CONSTANT_64BIT_FLAG (0)   /*!< \\c AM -- Amplitude Modulation */\n#define    RIG_MODE_CW        CONSTANT_64BIT_FLAG (1)   /*!< \\c CW -- CW \"normal\" sideband */\n#define    RIG_MODE_USB       CONSTANT_64BIT_FLAG (2)   /*!< \\c USB -- Upper Side Band */\n#define    RIG_MODE_LSB       CONSTANT_64BIT_FLAG (3)   /*!< \\c LSB -- Lower Side Band */\n#define    RIG_MODE_RTTY      CONSTANT_64BIT_FLAG (4)   /*!< \\c RTTY -- Radio Teletype */\n#define    RIG_MODE_FM        CONSTANT_64BIT_FLAG (5)   /*!< \\c FM -- \"narrow\" band FM */\n#define    RIG_MODE_WFM       CONSTANT_64BIT_FLAG (6)   /*!< \\c WFM -- broadcast wide FM */\n#define    RIG_MODE_CWR       CONSTANT_64BIT_FLAG (7)   /*!< \\c CWR -- CW \"reverse\" sideband */\n#define    RIG_MODE_RTTYR     CONSTANT_64BIT_FLAG (8)   /*!< \\c RTTYR -- RTTY \"reverse\" sideband */\n#define    RIG_MODE_AMS       CONSTANT_64BIT_FLAG (9)   /*!< \\c AMS -- Amplitude Modulation Synchronous */\n#define    RIG_MODE_PKTLSB    CONSTANT_64BIT_FLAG (10)  /*!< \\c PKTLSB -- Packet/Digital LSB mode (dedicated port) */\n#define    RIG_MODE_PKTUSB    CONSTANT_64BIT_FLAG (11)  /*!< \\c PKTUSB -- Packet/Digital USB mode (dedicated port) */\n#define    RIG_MODE_PKTFM     CONSTANT_64BIT_FLAG (12)  /*!< \\c PKTFM -- Packet/Digital FM mode (dedicated port) */\n#define    RIG_MODE_ECSSUSB   CONSTANT_64BIT_FLAG (13)  /*!< \\c ECSSUSB -- Exalted Carrier Single Sideband USB */\n#define    RIG_MODE_ECSSLSB   CONSTANT_64BIT_FLAG (14)  /*!< \\c ECSSLSB -- Exalted Carrier Single Sideband LSB */\n#define    RIG_MODE_FAX       CONSTANT_64BIT_FLAG (15)  /*!< \\c FAX -- Facsimile Mode */\n#define    RIG_MODE_SAM       CONSTANT_64BIT_FLAG (16)  /*!< \\c SAM -- Synchronous AM double sideband */\n#define    RIG_MODE_SAL       CONSTANT_64BIT_FLAG (17)  /*!< \\c SAL -- Synchronous AM lower sideband */\n#define    RIG_MODE_SAH       CONSTANT_64BIT_FLAG (18)  /*!< \\c SAH -- Synchronous AM upper (higher) sideband */\n#define    RIG_MODE_DSB       CONSTANT_64BIT_FLAG (19)  /*!< \\c DSB -- Double sideband suppressed carrier */\n#define    RIG_MODE_FMN       CONSTANT_64BIT_FLAG (21)  /*!< \\c FMN -- FM Narrow Kenwood ts990s */\n#define    RIG_MODE_PKTAM     CONSTANT_64BIT_FLAG (22)  /*!< \\c PKTAM -- Packet/Digital AM mode e.g. IC7300 */\n#define    RIG_MODE_P25       CONSTANT_64BIT_FLAG (23)  /*!< \\c P25 -- APCO/P25 VHF,UHF digital mode IC-R8600 */\n#define    RIG_MODE_DSTAR     CONSTANT_64BIT_FLAG (24)  /*!< \\c D-Star -- VHF,UHF digital mode IC-R8600 */\n#define    RIG_MODE_DPMR      CONSTANT_64BIT_FLAG (25)  /*!< \\c dPMR -- digital PMR, VHF,UHF digital mode IC-R8600 */\n#define    RIG_MODE_NXDNVN    CONSTANT_64BIT_FLAG (26)  /*!< \\c NXDN-VN -- VHF,UHF digital mode IC-R8600 */\n#define    RIG_MODE_NXDN_N    CONSTANT_64BIT_FLAG (27)  /*!< \\c NXDN-N -- VHF,UHF digital mode IC-R8600 */\n#define    RIG_MODE_DCR       CONSTANT_64BIT_FLAG (28)  /*!< \\c DCR -- VHF,UHF digital mode IC-R8600 */\n#define    RIG_MODE_AMN       CONSTANT_64BIT_FLAG (29)  /*!< \\c AM-N -- Narrow band AM mode IC-R30 */\n#define    RIG_MODE_PSK       CONSTANT_64BIT_FLAG (30)  /*!< \\c PSK - Kenwood PSK and others */\n#define    RIG_MODE_PSKR      CONSTANT_64BIT_FLAG (31)  /*!< \\c PSKR - Kenwood PSKR and others */\n#ifndef SWIGLUAHIDE\n/* hide the top 32 bits from the Lua binding as they will not work */\n#define    RIG_MODE_DD        CONSTANT_64BIT_FLAG (32)  /*!< \\c DD Mode IC-9700 */\n#define    RIG_MODE_C4FM      CONSTANT_64BIT_FLAG (33)  /*!< \\c Yaesu C4FM mode */\n#define    RIG_MODE_PKTFMN    CONSTANT_64BIT_FLAG (34)  /*!< \\c Yaesu DATA-FM-N */\n#define    RIG_MODE_SPEC      CONSTANT_64BIT_FLAG (35)  /*!< \\c Unfiltered as in PowerSDR */\n#define    RIG_MODE_CWN       CONSTANT_64BIT_FLAG (36)  /*!< \\c CWN -- Narrow band CW (FT-736R) */\n#define    RIG_MODE_IQ        CONSTANT_64BIT_FLAG (37)  /*!< \\c IQ mode for a couple of kit rigs */\n#define    RIG_MODE_BIT38     CONSTANT_64BIT_FLAG (38)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT39     CONSTANT_64BIT_FLAG (39)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT40     CONSTANT_64BIT_FLAG (40)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT41     CONSTANT_64BIT_FLAG (41)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT42     CONSTANT_64BIT_FLAG (42)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT43     CONSTANT_64BIT_FLAG (43)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT44     CONSTANT_64BIT_FLAG (44)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT45     CONSTANT_64BIT_FLAG (45)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT46     CONSTANT_64BIT_FLAG (46)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT47     CONSTANT_64BIT_FLAG (47)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT48     CONSTANT_64BIT_FLAG (48)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT49     CONSTANT_64BIT_FLAG (49)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT50     CONSTANT_64BIT_FLAG (50)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT51     CONSTANT_64BIT_FLAG (51)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT52     CONSTANT_64BIT_FLAG (52)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT53     CONSTANT_64BIT_FLAG (53)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT54     CONSTANT_64BIT_FLAG (54)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT55     CONSTANT_64BIT_FLAG (55)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT56     CONSTANT_64BIT_FLAG (56)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT57     CONSTANT_64BIT_FLAG (57)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT58     CONSTANT_64BIT_FLAG (58)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT59     CONSTANT_64BIT_FLAG (59)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT60     CONSTANT_64BIT_FLAG (60)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT61     CONSTANT_64BIT_FLAG (61)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_BIT62     CONSTANT_64BIT_FLAG (62)  /*!< \\c reserved for future expansion */\n#define    RIG_MODE_TESTS_MAX CONSTANT_64BIT_FLAG (63)  /*!< \\c last bit available for 64-bit enum MUST ALWAYS BE LAST, Max Count for dumpcaps.c */\n#endif\n\n/**\n * \\brief macro for backends, not to be used by rig_set_mode et al.\n */\n#define RIG_MODE_SSB    (RIG_MODE_USB|RIG_MODE_LSB)\n\n/**\n * \\brief macro for backends, not to be used by rig_set_mode et al.\n */\n#define RIG_MODE_ECSS   (RIG_MODE_ECSSUSB|RIG_MODE_ECSSLSB)\n\n//! @cond Doxygen_Suppress\n#define RIG_DBLST_END 0     /* end marker in a preamp/att level list */\n#define RIG_IS_DBLST_END(d) ((d)==0)\n//! @endcond\n\n\n/**\n * \\brief Frequency range\n *\n * Put together a group of this struct in an array to define\n * what frequencies your rig has access to.\n */\ntypedef struct freq_range_list {\n    freq_t startf;      /*!< Start frequency */\n    freq_t endf;        /*!< End frequency */\n    rmode_t modes;      /*!< Bit field of RIG_MODE's */\n    int low_power;      /*!< Lower RF power in mW, -1 for no power (ie. rx list) */\n    int high_power;     /*!< Higher RF power in mW, -1 for no power (ie. rx list) */\n    vfo_t vfo;          /*!< VFO list equipped with this range */\n    ant_t ant;          /*!< Antenna list equipped with this range, 0 means all, RIG_ANT_CURR means dedicated to certain bands and automatically switches, no set_ant command */\n    char *label;        /*!< Label for this range that explains why.  e.g. Icom rigs USA, EUR, ITR, TPE, KOR */\n} freq_range_t;\n\n//! @cond Doxygen_Suppress\n#define RIG_FRNG_END        {Hz(0),Hz(0),RIG_MODE_NONE,0,0,RIG_VFO_NONE}\n#define RIG_IS_FRNG_END(r)  ((r).startf == Hz(0) && (r).endf == Hz(0))\n//! @endcond\n\n/**\n * \\brief Tuning step definition\n *\n * Lists the tuning steps available for each mode.\n *\n * If a ts field in the list has RIG_TS_ANY value, this means the rig allows\n * its tuning step to be set to any value ranging from the lowest to the\n * highest (if any) value in the list for that mode.  The tuning step must be\n * sorted in the ascending order, and the RIG_TS_ANY value, if present, must\n * be the last one in the list.\n *\n * Note also that the minimum frequency resolution of the rig is determined by\n * the lowest value in the Tuning step list.\n *\n * \\sa rig_set_ts(), rig_get_resolution()\n */\nstruct tuning_step_list {\n    rmode_t modes;      /*!< Bit field of RIG_MODE's */\n    shortfreq_t ts;     /*!< Tuning step in Hz */\n};\n\n//! @cond Doxygen_Suppress\n#define RIG_TS_ANY          0\n#define RIG_TS_END          {RIG_MODE_NONE, 0}\n#define RIG_IS_TS_END(t)    ((t).modes == RIG_MODE_NONE && (t).ts == 0)\n//! @endcond\n\n\n/**\n * \\brief Filter definition\n *\n * Lists the filters available for each mode.\n *\n * If more than one filter is available for a given mode, the first entry in\n * the array will be the default filter to use for the normal passband of this\n * mode.  The first entry in the array below the default normal passband is\n * the default narrow passband and the first entry in the array above the\n * default normal passband is the default wide passband.  Note: if there's no\n * lower width or upper width, then narrow or respectively wide passband is\n * equal to the default normal passband.\n *\n * If a width field in the list has RIG_FLT_ANY value, this means the rig\n * allows its passband width to be set to any value ranging from the lowest to\n * the highest value (if any) in the list for that mode.  The RIG_FLT_ANY\n * value, if present, must be the last one in the list.\n *\n * The width field is the narrowest passband in a transmit/receive chain with\n * regard to different IF.\n *\n * \\sa rig_set_mode(), rig_passband_normal(), rig_passband_narrow(), rig_passband_wide()\n */\nstruct filter_list {\n    rmode_t modes;      /*!< Bit field of RIG_MODE's */\n    pbwidth_t width;    /*!< Passband width in Hz */\n};\n//! @cond Doxygen_Suppress\n#define RIG_FLT_ANY         0\n#define RIG_FLT_END         {RIG_MODE_NONE, 0}\n#define RIG_IS_FLT_END(f)   ((f).modes == RIG_MODE_NONE)\n//! @endcond\n\n\n/**\n * \\brief Empty channel_t.flags field\n */\n#define RIG_CHFLAG_NONE     0\n/**\n * \\brief skip memory channel during scan (lock out), channel_t.flags\n */\n#define RIG_CHFLAG_SKIP     (1<<0)\n/**\n * \\brief DATA port mode flag\n */\n#define RIG_CHFLAG_DATA     (1<<1)\n/**\n * \\brief programmed skip (PSKIP) memory channel during scan (lock out), channel_t.flags\n */\n#define RIG_CHFLAG_PSKIP    (1<<2)\n\n/**\n * \\brief Extension attribute definition\n *\n */\nstruct ext_list {\n    token_t token;      /*!< Token ID */\n    value_t val;        /*!< Value */\n};\n\n//! @cond Doxygen_Suppress\n#define RIG_EXT_END     {0, {.i=0}}\n#define RIG_IS_EXT_END(x)   ((x).token == 0)\n//! @endcond\n\n/**\n * \\brief Channel structure\n *\n * The channel struct stores all the attributes peculiar to a VFO.\n *\n * \\sa rig_set_channel(), rig_get_channel()\n */\nstruct channel {\n    int channel_num;                    /*!< Channel number */\n    int bank_num;                       /*!< Bank number */\n    vfo_t vfo;                          /*!< VFO */\n    ant_t ant;                            /*!< Selected antenna */\n    freq_t freq;                        /*!< Receive frequency */\n    rmode_t mode;                       /*!< Receive mode */\n    pbwidth_t width;                    /*!< Receive passband width associated with mode */\n\n    freq_t tx_freq;                     /*!< Transmit frequency */\n    rmode_t tx_mode;                    /*!< Transmit mode */\n    pbwidth_t tx_width;                 /*!< Transmit passband width associated with mode */\n\n    split_t split;                      /*!< Split mode */\n    vfo_t tx_vfo;                       /*!< Split transmit VFO */\n\n    rptr_shift_t rptr_shift;            /*!< Repeater shift */\n    shortfreq_t rptr_offs;              /*!< Repeater offset */\n    shortfreq_t tuning_step;            /*!< Tuning step */\n    shortfreq_t rit;                    /*!< RIT */\n    shortfreq_t xit;                    /*!< XIT */\n    setting_t funcs;                    /*!< Function status */\n    value_t levels[RIG_SETTING_MAX];    /*!< Level values */\n    tone_t ctcss_tone;                  /*!< CTCSS tone */\n    tone_t ctcss_sql;                   /*!< CTCSS squelch tone */\n    tone_t dcs_code;                    /*!< DCS code */\n    tone_t dcs_sql;                     /*!< DCS squelch code */\n    int scan_group;                     /*!< Scan group */\n    unsigned int flags;                 /*!< Channel flags, see RIG_CHFLAG's */\n    char channel_desc[HAMLIB_MAXCHANDESC];     /*!< Name */\n    struct ext_list\n            *ext_levels;                /*!< Extension level value list, NULL ended. ext_levels can be NULL */\n};\n\n/**\n * \\brief Channel structure typedef\n */\ntypedef struct channel channel_t;\n\n/**\n * \\brief Channel capability definition\n *\n * Definition of the attributes that can be stored/retrieved in/from memory\n */\nstruct channel_cap {\n    unsigned bank_num:      1;  /*!< Bank number */\n    unsigned vfo:           1;  /*!< VFO */\n    unsigned ant:           1;  /*!< Selected antenna */\n    unsigned freq:          1;  /*!< Receive frequency */\n    unsigned mode:          1;  /*!< Receive mode */\n    unsigned width:         1;  /*!< Receive passband width associated with mode */\n\n    unsigned tx_freq:       1;  /*!< Transmit frequency */\n    unsigned tx_mode:       1;  /*!< Transmit mode */\n    unsigned tx_width:      1;  /*!< Transmit passband width associated with mode */\n\n    unsigned split:         1;  /*!< Split mode */\n    unsigned tx_vfo:        1;  /*!< Split transmit VFO */\n    unsigned rptr_shift:    1;  /*!< Repeater shift */\n    unsigned rptr_offs:     1;  /*!< Repeater offset */\n    unsigned tuning_step:   1;  /*!< Tuning step */\n    unsigned rit:           1;  /*!< RIT */\n    unsigned xit:           1;  /*!< XIT */\n    setting_t funcs;            /*!< Function status */\n    setting_t levels;           /*!< Level values */\n    unsigned ctcss_tone:    1;  /*!< CTCSS tone */\n    unsigned ctcss_sql:     1;  /*!< CTCSS squelch tone */\n    unsigned dcs_code:      1;  /*!< DCS code */\n    unsigned dcs_sql:       1;  /*!< DCS squelch code */\n    unsigned scan_group:    1;  /*!< Scan group */\n    unsigned flags:         1;  /*!< Channel flags */\n    unsigned channel_desc:  1;  /*!< Name */\n    unsigned ext_levels:    1;  /*!< Extension level value list */\n};\n\n/**\n * \\brief Channel cap\n */\ntypedef struct channel_cap channel_cap_t;\n\n\n/**\n * \\brief Memory channel type definition\n *\n * Definition of memory types. Depending on the type, the content\n * of the memory channel has to be interpreted accordingly.\n * For instance, a RIG_MTYPE_EDGE channel_t will hold only a start\n * or stop frequency.\n *\n * \\sa chan_list()\n */\ntypedef enum {\n    RIG_MTYPE_NONE =    0,  /*!< None */\n    RIG_MTYPE_MEM,          /*!< Regular */\n    RIG_MTYPE_EDGE,         /*!< Scan edge */\n    RIG_MTYPE_CALL,         /*!< Call channel */\n    RIG_MTYPE_MEMOPAD,      /*!< Memory pad */\n    RIG_MTYPE_SAT,          /*!< Satellite */\n    RIG_MTYPE_BAND,         /*!< VFO/Band channel */\n    RIG_MTYPE_PRIO          /*!< Priority channel */\n} chan_type_t;\n\n\n/**\n * \\brief Memory channel list definition\n *\n * Example for the Ic706MkIIG (99 memory channels, 2 scan edges, 2 call chans):\n\\code\n    chan_t chan_list[] = {\n        { 1, 99, RIG_MTYPE_MEM  },\n        { 100, 103, RIG_MTYPE_EDGE },\n        { 104, 105, RIG_MTYPE_CALL },\n        RIG_CHAN_END\n    }\n\\endcode\n */\nstruct chan_list {\n    int startc;          /*!< Starting memory channel \\b number */\n    int endc;            /*!< Ending memory channel \\b number */\n    chan_type_t type;   /*!< Memory type. see chan_type_t */\n    channel_cap_t\n    mem_caps;           /*!< Definition of attributes that can be stored/retrieved */\n};\n\n//! @cond Doxygen_Suppress\n#define RIG_CHAN_END        {0,0,RIG_MTYPE_NONE}\n#define RIG_IS_CHAN_END(c)  ((c).type == RIG_MTYPE_NONE)\n//! @endcond\n\n/**\n * \\brief Special memory channel value to tell rig_lookup_mem_caps() to retrieve all the ranges\n */\n#define RIG_MEM_CAPS_ALL    -1\n\n/**\n * \\brief chan_t type\n */\ntypedef struct chan_list chan_t;\n\n\n/**\n * \\brief level/parm granularity definition\n *\n * The granularity is undefined if min = 0, max = 0, and step = 0.\n *\n * For float settings, if min.f = 0 and max.f = 0 (and step.f! = 0), max.f is\n * assumed to be actually equal to 1.0.\n *\n * If step = 0 (and min and/or max are not null), then this means step can\n * have maximum resolution, depending on type (int or float).\n */\nstruct gran {\n    value_t min;        /*!< Minimum value */\n    value_t max;        /*!< Maximum value */\n    value_t step;       /*!< Step */\n};\n\n/**\n * \\brief gran_t type\n */\ntypedef struct gran gran_t;\n\n\n/**\n * \\brief Calibration table struct\n */\nstruct cal_table {\n    int size;                   /*!< number of plots in the table */\n    struct {\n        int raw;                /*!< raw (A/D) value, as returned by \\a RIG_LEVEL_RAWSTR */\n        int val;                /*!< associated value, basically the measured dB value */\n    } table[HAMLIB_MAX_CAL_LENGTH];    /*!< table of plots */\n};\n\n/**\n * \\brief calibration table type\n *\n * cal_table_t is a data type suited to hold linear calibration.\n * cal_table_t.size tells the number of plots cal_table_t.table contains.\n *\n * If a value is below or equal to cal_table_t.table[0].raw,\n * rig_raw2val() will return cal_table_t.table[0].val.\n *\n * If a value is greater or equal to cal_table_t.table[cal_table_t.size-1].raw,\n * rig_raw2val() will return cal_table_t.table[cal_table_t.size-1].val.\n */\ntypedef struct cal_table cal_table_t;\n\n//! @cond Doxygen_Suppress\n#define EMPTY_STR_CAL { 0, { { 0, 0 }, } }\n//! @endcond Doxygen_Suppress\n\n\n/**\n * \\brief Calibration table struct for float values\n */\nstruct cal_table_float {\n  int size;                   /*!< number of plots in the table */\n  struct {\n    int raw;                  /*!< raw (A/D) value */\n    float val;                /*!< associated value */\n  } table[HAMLIB_MAX_CAL_LENGTH];    /*!< table of plots */\n};\n\n/**\n * \\brief calibration table type for float values\n *\n * cal_table_float_t is a data type suited to hold linear calibration.\n * cal_table_float_t.size tells the number of plots cal_table_float_t.table contains.\n *\n * If a value is below or equal to cal_table_float_t.table[0].raw,\n * rig_raw2val_float() will return cal_table_float_t.table[0].val.\n *\n * If a value is greater or equal to cal_table_float_t.table[cal_table_float_t.size-1].raw,\n * rig_raw2val_float() will return cal_table_float_t.table[cal_table_float_t.size-1].val.\n */\ntypedef struct cal_table_float cal_table_float_t;\n\n//! @cond Doxygen_Suppress\n#define EMPTY_FLOAT_CAL { 0, { { 0, 0f }, } }\n\ntypedef int (* chan_cb_t)(RIG *, channel_t **, int, const chan_t *, rig_ptr_t);\ntypedef int (* confval_cb_t)(RIG *,\n                             const struct confparams *,\n                             value_t *,\n                             rig_ptr_t);\n//! @endcond\n\n/**\n * \\brief Spectrum scope\n */\nstruct rig_spectrum_scope\n{\n    int id;\n    char *name;\n};\n\n/**\n * \\brief Spectrum scope modes\n */\nenum rig_spectrum_mode_e {\n    RIG_SPECTRUM_MODE_NONE = 0,\n    RIG_SPECTRUM_MODE_CENTER,            /*!< Spectrum scope centered around the VFO frequency */\n    RIG_SPECTRUM_MODE_FIXED,             /*!< Spectrum scope edge frequencies are fixed */\n    RIG_SPECTRUM_MODE_CENTER_SCROLL,     /*!< Spectrum scope edge frequencies are fixed, but identical to what the center mode would use. Scrolling is enabled. */\n    RIG_SPECTRUM_MODE_FIXED_SCROLL,      /*!< Spectrum scope edge frequencies are fixed with scrolling enabled */\n};\n\n/**\n * \\brief Spectrum scope averaging modes\n */\nstruct rig_spectrum_avg_mode\n{\n    int id;\n    char *name;\n};\n\n/**\n * \\brief Represents a single line of rig spectrum scope FFT data.\n *\n * The data levels specify the range of the spectrum scope FFT data.\n * The minimum level should represent the lowest numeric value and the lowest signal level in dB.\n * The maximum level should represent the highest numeric value and the highest signal level in dB.\n * The data level values are assumed to represent the dB strength scale in a linear way.\n *\n * Note that the data level and signal strength ranges may change depending on the settings of the rig.\n * At least on Kenwood the sub-scope provides different kind of data compared to the main scope.\n */\nstruct rig_spectrum_line\n{\n    int id; /*!< Numeric ID of the spectrum scope data stream identifying the VFO/receiver. First ID is zero. Rigs with multiple scopes usually have identifiers, such as 0 = Main, 1 = Sub. */\n\n    int data_level_min; /*!< The numeric value that represents the minimum signal level. */\n    int data_level_max; /*!< The numeric value that represents the maximum signal level. */\n    double signal_strength_min; /*!< The strength of the minimum signal level in dB. */\n    double signal_strength_max; /*!< The strength of the maximum signal level in dB. */\n\n    enum rig_spectrum_mode_e spectrum_mode; /*!< Spectrum mode. */\n\n    freq_t center_freq; /*!< Center frequency of the spectrum scope in Hz in RIG_SPECTRUM_CENTER mode. */\n    freq_t span_freq;   /*!< Span of the spectrum scope in Hz in RIG_SPECTRUM_CENTER mode. */\n\n    freq_t low_edge_freq;  /*!< Low edge frequency of the spectrum scope in Hz in RIG_SPECTRUM_FIXED mode. */\n    freq_t high_edge_freq; /*!< High edge frequency of the spectrum scope in Hz in RIG_SPECTRUM_FIXED mode. */\n\n    size_t spectrum_data_length;     /*!< Number of bytes of 8-bit spectrum data in the data buffer. The amount of data may vary if the rig has multiple spectrum scopes, depending on the scope. */\n    unsigned char *spectrum_data; /*!< 8-bit spectrum data covering bandwidth of either the span_freq in center mode or from low edge to high edge in fixed mode. A higher value represents higher signal strength. */\n};\n\n/**\n * \\brief Rig data structure.\n *\n * Basic rig type, can store some useful info about different radios.  Each\n * backend must be able to populate this structure, so we can make useful\n * inquiries about capabilities.\n *\n * The main idea of this struct is that it will be defined by the backend rig\n * driver, and will remain readonly for the application.  Fields that need to\n * be modifiable by the application are copied into the struct rig_state,\n * which is a kind of private storage of the RIG instance.\n *\n * This way, you can have several rigs running within the same application,\n * sharing the struct rig_caps of the backend, while keeping their own\n * customized data.\n *\n * mdblack: Don't move or add fields around without bumping the version numbers\n *          DLL or shared library replacement depends on order\n */\n//! @cond Doxygen_Suppress\n#define RIG_MODEL(arg) .rig_model=arg,.macro_name=#arg\n#define HAMLIB_CHECK_RIG_CAPS \"HAMLIB_CHECK_RIG_CAPS\"\nstruct rig_caps {\n    rig_model_t rig_model;      /*!< Rig model. */\n    const char *model_name;     /*!< Model name. */\n    const char *mfg_name;       /*!< Manufacturer. */\n    const char *version;        /*!< Driver version. */\n    const char *copyright;      /*!< Copyright info. */\n    enum rig_status_e status;   /*!< Driver status. */\n\n    int rig_type;               /*!< Rig type. */\n    ptt_type_t ptt_type;        /*!< Type of the PTT port. */\n    dcd_type_t dcd_type;        /*!< Type of the DCD port. */\n    rig_port_t port_type;       /*!< Type of communication port. */\n\n    int serial_rate_min;        /*!< Minimum serial speed. */\n    int serial_rate_max;        /*!< Maximum serial speed. */\n    int serial_data_bits;       /*!< Number of data bits. */\n    int serial_stop_bits;       /*!< Number of stop bits. */\n    enum serial_parity_e serial_parity;         /*!< Parity. */\n    enum serial_handshake_e serial_handshake;   /*!< Handshake. */\n\n    int write_delay;            /*!< Delay between each byte sent out, in mS */\n    int post_write_delay;       /*!< Delay between each commands send out, in mS */\n    int timeout;                /*!< Timeout, in mS */\n    int retry;                  /*!< Maximum number of retries if command fails, 0 to disable */\n\n    setting_t has_get_func;     /*!< List of get functions */\n    setting_t has_set_func;     /*!< List of set functions */\n    setting_t has_get_level;    /*!< List of get level */\n    setting_t has_set_level;    /*!< List of set level */\n    setting_t has_get_parm;     /*!< List of get parm */\n    setting_t has_set_parm;     /*!< List of set parm */\n\n    gran_t level_gran[RIG_SETTING_MAX]; /*!< level granularity (i.e. steps) */\n    gran_t parm_gran[RIG_SETTING_MAX];  /*!< parm granularity (i.e. steps) */\n\n    const struct confparams *extparms;  /*!< Extension parm list, \\sa ext.c */\n    const struct confparams *extlevels; /*!< Extension level list, \\sa ext.c */\n    const struct confparams *extfuncs; /*!< Extension func list, \\sa ext.c */\n    int *ext_tokens;                    /*!< Extension token list */\n\n    tone_t *ctcss_list;   /*!< CTCSS tones list, zero ended */\n    tone_t *dcs_list;     /*!< DCS code list, zero ended */\n\n    int preamp[HAMLIB_MAXDBLSTSIZ];    /*!< Preamp list in dB, 0 terminated */\n    int attenuator[HAMLIB_MAXDBLSTSIZ];    /*!< Attenuator list in dB, 0 terminated */\n    shortfreq_t max_rit;        /*!< max absolute RIT */\n    shortfreq_t max_xit;        /*!< max absolute XIT */\n    shortfreq_t max_ifshift;    /*!< max absolute IF-SHIFT */\n\n    int agc_level_count; /*!< Number of supported AGC levels. Zero indicates all modes should be available (for backwards-compatibility). */\n    enum agc_level_e agc_levels[HAMLIB_MAX_AGC_LEVELS]; /*!< Supported AGC levels */\n\n    ann_t announces;            /*!< Announces bit field list */\n\n    vfo_op_t vfo_ops;           /*!< VFO op bit field list */\n    scan_t scan_ops;            /*!< Scan bit field list */\n    int targetable_vfo;         /*!< Bit field list of direct VFO access commands */\n    int transceive;             /*!< \\deprecated Use async_data_supported instead */\n\n    int bank_qty;               /*!< Number of banks */\n    int chan_desc_sz;           /*!< Max length of memory channel name */\n\n    chan_t chan_list[HAMLIB_CHANLSTSIZ];   /*!< Channel list, zero ended */\n\n    // As of 2020-02-12 we know of 5 models from Icom USA, EUR, ITR, TPE, KOR for the IC-9700\n    // So we currently have 5 ranges we need to deal with\n    // The backend for the model should fill in the label field to explain what model it is\n    // The the IC-9700 in ic7300.c for an example\n    freq_range_t rx_range_list1[HAMLIB_FRQRANGESIZ];   /*!< Receive frequency range list #1 */\n    freq_range_t tx_range_list1[HAMLIB_FRQRANGESIZ];   /*!< Transmit frequency range list #1 */\n    freq_range_t rx_range_list2[HAMLIB_FRQRANGESIZ];   /*!< Receive frequency range list #2 */\n    freq_range_t tx_range_list2[HAMLIB_FRQRANGESIZ];   /*!< Transmit frequency range list #2 */\n    freq_range_t rx_range_list3[HAMLIB_FRQRANGESIZ];   /*!< Receive frequency range list #3 */\n    freq_range_t tx_range_list3[HAMLIB_FRQRANGESIZ];   /*!< Transmit frequency range list #3 */\n    freq_range_t rx_range_list4[HAMLIB_FRQRANGESIZ];   /*!< Receive frequency range list #4 */\n    freq_range_t tx_range_list4[HAMLIB_FRQRANGESIZ];   /*!< Transmit frequency range list #4 */\n    freq_range_t rx_range_list5[HAMLIB_FRQRANGESIZ];   /*!< Receive frequency range list #5 */\n    freq_range_t tx_range_list5[HAMLIB_FRQRANGESIZ];   /*!< Transmit frequency range list #5 */\n\n    struct tuning_step_list tuning_steps[HAMLIB_TSLSTSIZ];     /*!< Tuning step list */\n    struct filter_list filters[HAMLIB_FLTLSTSIZ];              /*!< mode/filter table, at -6dB */\n\n    cal_table_t str_cal;                    /*!< S-meter calibration table */\n    cal_table_float_t swr_cal;              /*!< SWR meter calibration table */\n    cal_table_float_t alc_cal;              /*!< ALC meter calibration table */\n    cal_table_float_t rfpower_meter_cal;    /*!< RF power meter calibration table */\n    cal_table_float_t comp_meter_cal;       /*!< COMP meter calibration table */\n    cal_table_float_t vd_meter_cal;         /*!< Voltage meter calibration table */\n    cal_table_float_t id_meter_cal;         /*!< Current draw meter calibration table */\n\n    struct rig_spectrum_scope spectrum_scopes[HAMLIB_MAX_SPECTRUM_SCOPES]; /*!< Supported spectrum scopes. The array index must match the scope ID. Last entry must have NULL name. */\n    enum rig_spectrum_mode_e spectrum_modes[HAMLIB_MAX_SPECTRUM_MODES]; /*!< Supported spectrum scope modes. Last entry must be RIG_SPECTRUM_MODE_NONE. */\n    freq_t spectrum_spans[HAMLIB_MAX_SPECTRUM_SPANS];                   /*!< Supported spectrum scope frequency spans in Hz in center mode. Last entry must be 0. */\n    struct rig_spectrum_avg_mode spectrum_avg_modes[HAMLIB_MAX_SPECTRUM_AVG_MODES]; /*!< Supported spectrum scope averaging modes. Last entry must have NULL name. */\n    int spectrum_attenuator[HAMLIB_MAXDBLSTSIZ];    /*!< Spectrum attenuator list in dB, 0 terminated */\n\n    const struct confparams *cfgparams; /*!< Configuration parameters. */\n    const rig_ptr_t priv;               /*!< Private data. */\n\n    /*\n     * Rig API\n     *\n     */\n\n    int (*rig_init)(RIG *rig);\n    int (*rig_cleanup)(RIG *rig);\n    int (*rig_open)(RIG *rig);\n    int (*rig_close)(RIG *rig);\n\n    /*\n     *  General API commands, from most primitive to least.. :()\n     *  List Set/Get functions pairs\n     */\n\n    int (*set_freq)(RIG *rig, vfo_t vfo, freq_t freq);\n    int (*get_freq)(RIG *rig, vfo_t vfo, freq_t *freq);\n\n    int (*set_mode)(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width);\n    int (*get_mode)(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width);\n\n    int (*set_vfo)(RIG *rig, vfo_t vfo);\n    int (*get_vfo)(RIG *rig, vfo_t *vfo);\n\n    int (*set_ptt)(RIG *rig, vfo_t vfo, ptt_t ptt);\n    int (*get_ptt)(RIG *rig, vfo_t vfo, ptt_t *ptt);\n\n    int (*get_dcd)(RIG *rig, vfo_t vfo, dcd_t *dcd);\n\n    int (*set_rptr_shift)(RIG *rig, vfo_t vfo, rptr_shift_t rptr_shift);\n    int (*get_rptr_shift)(RIG *rig, vfo_t vfo, rptr_shift_t *rptr_shift);\n\n    int (*set_rptr_offs)(RIG *rig, vfo_t vfo, shortfreq_t offs);\n    int (*get_rptr_offs)(RIG *rig, vfo_t vfo, shortfreq_t *offs);\n\n    int (*set_split_freq)(RIG *rig, vfo_t vfo, freq_t tx_freq);\n    int (*get_split_freq)(RIG *rig, vfo_t vfo, freq_t *tx_freq);\n\n    int (*set_split_mode)(RIG *rig,\n                          vfo_t vfo,\n                          rmode_t tx_mode,\n                          pbwidth_t tx_width);\n    int (*get_split_mode)(RIG *rig,\n                          vfo_t vfo,\n                          rmode_t *tx_mode,\n                          pbwidth_t *tx_width);\n\n    int (*set_split_freq_mode)(RIG *rig,\n                               vfo_t vfo,\n                               freq_t tx_freq,\n                               rmode_t tx_mode,\n                               pbwidth_t tx_width);\n    int (*get_split_freq_mode)(RIG *rig,\n                               vfo_t vfo,\n                               freq_t *tx_freq,\n                               rmode_t *tx_mode,\n                               pbwidth_t *tx_width);\n\n    int (*set_split_vfo)(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo);\n    int (*get_split_vfo)(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo);\n\n    int (*set_rit)(RIG *rig, vfo_t vfo, shortfreq_t rit);\n    int (*get_rit)(RIG *rig, vfo_t vfo, shortfreq_t *rit);\n\n    int (*set_xit)(RIG *rig, vfo_t vfo, shortfreq_t xit);\n    int (*get_xit)(RIG *rig, vfo_t vfo, shortfreq_t *xit);\n\n    int (*set_ts)(RIG *rig, vfo_t vfo, shortfreq_t ts);\n    int (*get_ts)(RIG *rig, vfo_t vfo, shortfreq_t *ts);\n\n    int (*set_dcs_code)(RIG *rig, vfo_t vfo, tone_t code);\n    int (*get_dcs_code)(RIG *rig, vfo_t vfo, tone_t *code);\n\n    int (*set_tone)(RIG *rig, vfo_t vfo, tone_t tone);\n    int (*get_tone)(RIG *rig, vfo_t vfo, tone_t *tone);\n\n    int (*set_ctcss_tone)(RIG *rig, vfo_t vfo, tone_t tone);\n    int (*get_ctcss_tone)(RIG *rig, vfo_t vfo, tone_t *tone);\n\n    int (*set_dcs_sql)(RIG *rig, vfo_t vfo, tone_t code);\n    int (*get_dcs_sql)(RIG *rig, vfo_t vfo, tone_t *code);\n\n    int (*set_tone_sql)(RIG *rig, vfo_t vfo, tone_t tone);\n    int (*get_tone_sql)(RIG *rig, vfo_t vfo, tone_t *tone);\n\n    int (*set_ctcss_sql)(RIG *rig, vfo_t vfo, tone_t tone);\n    int (*get_ctcss_sql)(RIG *rig, vfo_t vfo, tone_t *tone);\n\n    int (*power2mW)(RIG *rig,\n                    unsigned int *mwpower,\n                    float power,\n                    freq_t freq,\n                    rmode_t mode);\n    int (*mW2power)(RIG *rig,\n                    float *power,\n                    unsigned int mwpower,\n                    freq_t freq,\n                    rmode_t mode);\n\n    int (*set_powerstat)(RIG *rig, powerstat_t status);\n    int (*get_powerstat)(RIG *rig, powerstat_t *status);\n\n    int (*reset)(RIG *rig, reset_t reset);\n\n    int (*set_ant)(RIG *rig, vfo_t vfo, ant_t ant, value_t option);\n    int (*get_ant)(RIG *rig, vfo_t vfo, ant_t ant, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx);\n\n    int (*set_level)(RIG *rig, vfo_t vfo, setting_t level, value_t val);\n    int (*get_level)(RIG *rig, vfo_t vfo, setting_t level, value_t *val);\n\n    int (*set_func)(RIG *rig, vfo_t vfo, setting_t func, int status);\n    int (*get_func)(RIG *rig, vfo_t vfo, setting_t func, int *status);\n\n    int (*set_parm)(RIG *rig, setting_t parm, value_t val);\n    int (*get_parm)(RIG *rig, setting_t parm, value_t *val);\n\n    int (*set_ext_level)(RIG *rig, vfo_t vfo, token_t token, value_t val);\n    int (*get_ext_level)(RIG *rig, vfo_t vfo, token_t token, value_t *val);\n\n    int (*set_ext_func)(RIG *rig, vfo_t vfo, token_t token, int status);\n    int (*get_ext_func)(RIG *rig, vfo_t vfo, token_t token, int *status);\n\n    int (*set_ext_parm)(RIG *rig, token_t token, value_t val);\n    int (*get_ext_parm)(RIG *rig, token_t token, value_t *val);\n\n    int (*set_conf)(RIG *rig, token_t token, const char *val);\n    int (*get_conf)(RIG *rig, token_t token, char *val);\n\n    int (*send_dtmf)(RIG *rig, vfo_t vfo, const char *digits);\n    int (*recv_dtmf)(RIG *rig, vfo_t vfo, char *digits, int *length);\n\n    int (*send_morse)(RIG *rig, vfo_t vfo, const char *msg);\n    int (*stop_morse)(RIG *rig, vfo_t vfo);\n    int (*wait_morse)(RIG *rig, vfo_t vfo);\n\n    int (*send_voice_mem)(RIG *rig, vfo_t vfo, int ch);\n\n    int (*set_bank)(RIG *rig, vfo_t vfo, int bank);\n\n    int (*set_mem)(RIG *rig, vfo_t vfo, int ch);\n    int (*get_mem)(RIG *rig, vfo_t vfo, int *ch);\n\n    int (*vfo_op)(RIG *rig, vfo_t vfo, vfo_op_t op);\n\n    int (*scan)(RIG *rig, vfo_t vfo, scan_t scan, int ch);\n\n    int (*set_trn)(RIG *rig, int trn);\n    int (*get_trn)(RIG *rig, int *trn);\n\n    int (*decode_event)(RIG *rig);\n\n    int (*set_channel)(RIG *rig, vfo_t vfo, const channel_t *chan);\n    int (*get_channel)(RIG *rig, vfo_t vfo, channel_t *chan, int read_only);\n\n    const char * (*get_info)(RIG *rig);\n\n    int (*set_chan_all_cb)(RIG *rig, vfo_t vfo, chan_cb_t chan_cb, rig_ptr_t);\n    int (*get_chan_all_cb)(RIG *rig, vfo_t vfo, chan_cb_t chan_cb, rig_ptr_t);\n\n    int (*set_mem_all_cb)(RIG *rig,\n                          chan_cb_t chan_cb,\n                          confval_cb_t parm_cb,\n                          rig_ptr_t);\n    int (*get_mem_all_cb)(RIG *rig,\n                          chan_cb_t chan_cb,\n                          confval_cb_t parm_cb,\n                          rig_ptr_t);\n\n    int (*set_vfo_opt)(RIG *rig, int status); // only for Net Rigctl device\n    int (*rig_get_vfo_info) (RIG *rig,\n                             vfo_t vfo,\n                             freq_t *freq,\n                             rmode_t *mode,\n                             pbwidth_t *width,\n                             split_t *split);\n    int(*set_clock) (RIG *rig, int year, int month, int day, int hour, int min, int sec, double msec, int utc_offset);\n    int(*get_clock) (RIG *rig, int *year, int *month, int *day, int *hour, int *min, int *sec, double *msec, int *utc_offset);\n\n    const char *clone_combo_set;    /*!< String describing key combination to enter load cloning mode */\n    const char *clone_combo_get;    /*!< String describing key combination to enter save cloning mode */\n    const char *macro_name;     /*!< Rig model macro name */\n\n    int async_data_supported;       /*!< Indicates that rig is capable of outputting asynchronous data updates, such as transceive state updates or spectrum data. 1 if true, 0 otherwise. */\n    int (*read_frame_direct)(RIG *rig,\n                             size_t buffer_length,\n                             const unsigned char *buffer);\n    int (*is_async_frame)(RIG *rig,\n                          size_t frame_length,\n                          const unsigned char *frame);\n    int (*process_async_frame)(RIG *rig,\n                               size_t frame_length,\n                               const unsigned char *frame);\n// this will be used to check rigcaps structure is compatible with client\n    char *hamlib_check_rig_caps;   // a constant value we can check for hamlib integrity\n    int (*get_conf2)(RIG *rig, token_t token, char *val, int val_len);\n    int (*password)(RIG *rig, const char *key1); /*< Send encrypted password if rigctld is secured with -A/--password */\n};\n//! @endcond\n\n/**\n * \\brief Enumeration of all rig_ functions\n *\n */\n//! @cond Doxygen_Suppress\n// all functions enumerated for rig_get_function_ptr\nenum rig_function_e {\n    RIG_FUNCTION_INIT,\n    RIG_FUNCTION_CLEANUP,\n    RIG_FUNCTION_OPEN,\n    RIG_FUNCTION_CLOSE,\n    RIG_FUNCTION_SET_FREQ,\n    RIG_FUNCTION_GET_FREQ,\n    RIG_FUNCTION_SET_MODE,\n    RIG_FUNCTION_GET_MODE,\n    RIG_FUNCTION_SET_VFO,\n    RIG_FUNCTION_GET_VFO,\n    RIG_FUNCTION_SET_PTT,\n    RIG_FUNCTION_GET_PTT,\n    RIG_FUNCTION_GET_DCD,\n    RIG_FUNCTION_SET_RPTR_SHIFT,\n    RIG_FUNCTION_GET_RPTR_SHIFT,\n    RIG_FUNCTION_SET_RPTR_OFFS,\n    RIG_FUNCTION_GET_RPTR_OFFS,\n    RIG_FUNCTION_SET_SPLIT_FREQ,\n    RIG_FUNCTION_GET_SPLIT_FREQ,\n    RIG_FUNCTION_SET_SPLIT_MODE,\n    RIG_FUNCTION_SET_SPLIT_FREQ_MODE,\n    RIG_FUNCTION_GET_SPLIT_FREQ_MODE,\n    RIG_FUNCTION_SET_SPLIT_VFO,\n    RIG_FUNCTION_GET_SPLIT_VFO,\n    RIG_FUNCTION_SET_RIT,\n    RIG_FUNCTION_GET_RIT,\n    RIG_FUNCTION_SET_XIT,\n    RIG_FUNCTION_GET_XIT,\n    RIG_FUNCTION_SET_TS,\n    RIG_FUNCTION_GET_TS,\n    RIG_FUNCTION_SET_DCS_CODE,\n    RIG_FUNCTION_GET_DCS_CODE,\n    RIG_FUNCTION_SET_TONE,\n    RIG_FUNCTION_GET_TONE,\n    RIG_FUNCTION_SET_CTCSS_TONE,\n    RIG_FUNCTION_GET_CTCSS_TONE,\n    RIG_FUNCTION_SET_DCS_SQL,\n    RIG_FUNCTION_GET_DCS_SQL,\n    RIG_FUNCTION_SET_TONE_SQL,\n    RIG_FUNCTION_GET_TONE_SQL,\n    RIG_FUNCTION_SET_CTCSS_SQL,\n    RIG_FUNCTION_GET_CTCSS_SQL,\n    RIG_FUNCTION_POWER2MW,\n    RIG_FUNCTION_MW2POWER,\n    RIG_FUNCTION_SET_POWERSTAT,\n    RIG_FUNCTION_GET_POWERSTAT,\n    RIG_FUNCTION_RESET,\n    RIG_FUNCTION_SET_ANT,\n    RIG_FUNCTION_GET_ANT,\n    RIG_FUNCTION_SET_LEVEL,\n    RIG_FUNCTION_GET_LEVEL,\n    RIG_FUNCTION_SET_FUNC,\n    RIG_FUNCTION_GET_FUNC,\n    RIG_FUNCTION_SET_PARM,\n    RIG_FUNCTION_GET_PARM,\n    RIG_FUNCTION_SET_EXT_LEVEL,\n    RIG_FUNCTION_GET_EXT_LEVEL,\n    RIG_FUNCTION_SET_EXT_FUNC,\n    RIG_FUNCTION_GET_EXT_FUNC,\n    RIG_FUNCTION_SET_EXT_PARM,\n    RIG_FUNCTION_GET_EXT_PARM,\n    RIG_FUNCTION_SET_CONF,\n    RIG_FUNCTION_GET_CONF,\n    RIG_FUNCTION_SEND_DTMF,\n    RIG_FUNCTION_SEND_MORSE,\n    RIG_FUNCTION_STOP_MORSE,\n    RIG_FUNCTION_WAIT_MORSE,\n    RIG_FUNCTION_SEND_VOICE_MEM,\n    RIG_FUNCTION_SET_BANK,\n    RIG_FUNCTION_SET_MEM,\n    RIG_FUNCTION_GET_MEM,\n    RIG_FUNCTION_VFO_OP,\n    RIG_FUNCTION_SCAN,\n    RIG_FUNCTION_SET_TRN,\n    RIG_FUNCTION_GET_TRN,\n    RIG_FUNCTION_DECODE_EVENT,\n    RIG_FUNCTION_SET_CHANNEL,\n    RIG_FUNCTION_GET_CHANNEL,\n    RIG_FUNCTION_GET_INFO,\n    RIG_FUNCTION_SET_CHAN_ALL_CB,\n    RIG_FUNCTION_GET_CHAN_ALL_CB,\n    RIG_FUNCTION_SET_MEM_ALL_CB,\n    RIG_FUNCTION_GET_MEM_ALL_CB,\n    RIG_FUNCTION_SET_VFO_OPT,\n    RIG_FUNCTION_READ_FRAME_DIRECT,\n    RIG_FUNCTION_IS_ASYNC_FRAME,\n    RIG_FUNCTION_PROCESS_ASYNC_FRAME,\n    RIG_FUNCTION_GET_CONF2,\n};\n\n/**\n * \\brief Function to return pointer to rig_* function\n *\n */\n//! @cond Doxygen_Suppress\nextern HAMLIB_EXPORT (void *) rig_get_function_ptr(rig_model_t rig_model, enum rig_function_e rig_function);\n\n/**\n * \\brief Enumeration of rig->caps values\n *\n */\n//! @cond Doxygen_Suppress\n// values enumerated for rig->caps values\nenum rig_caps_int_e {\n    RIG_CAPS_TARGETABLE_VFO,\n    RIG_CAPS_RIG_MODEL,\n    RIG_CAPS_PORT_TYPE,\n    RIG_CAPS_PTT_TYPE,\n    RIG_CAPS_HAS_GET_LEVEL\n};\n\nenum rig_caps_cptr_e {\n    RIG_CAPS_VERSION_CPTR,\n    RIG_CAPS_MFG_NAME_CPTR,\n    RIG_CAPS_MODEL_NAME_CPTR,\n    RIG_CAPS_STATUS_CPTR\n};\n\n/**\n * \\brief Function to return int value from rig->caps\n * Does not support > 32-bit rig_caps values\n */\n//! @cond Doxygen_Suppress\nextern HAMLIB_EXPORT (long long) rig_get_caps_int(rig_model_t rig_model, enum rig_caps_int_e rig_caps);\n\n/**\n * \\brief Function to return char pointer value from rig->caps\n *\n */\n//! @cond Doxygen_Suppress\nextern HAMLIB_EXPORT (const char *) rig_get_caps_cptr(rig_model_t rig_model, enum rig_caps_cptr_e rig_caps);\n\nstruct hamlib_async_pipe;\n\ntypedef struct hamlib_async_pipe hamlib_async_pipe_t;\n\n/**\n * \\brief Port definition\n *\n * Of course, looks like OO painstakingly programmed in C, sigh.\n */\n//! @cond Doxygen_Suppress\n// DO NOT CHANGE THIS STRUCTURE ALL UNTIL 5.0\n// Right now it is static inside rig structure\n// 5.0 will change it to a pointer which can then be added to\n// At that point only add to the end of the stucture\ntypedef struct hamlib_port {\n    union {\n        rig_port_t rig;     /*!< Communication port type */\n        ptt_type_t ptt;     /*!< PTT port type */\n        dcd_type_t dcd;     /*!< DCD port type */\n    } type;\n\n    int fd;                 /*!< File descriptor */\n    void *handle;           /*!< handle for USB */\n\n    int write_delay;        /*!< Delay between each byte sent out, in mS */\n    int post_write_delay;   /*!< Delay between each commands send out, in mS */\n\n    struct {\n        int tv_sec, tv_usec;\n    } post_write_date;      /*!< hamlib internal use */\n\n    int timeout;            /*!< Timeout, in mS */\n    short retry;            /*!< Maximum number of retries, 0 to disable */\n    short flushx;           /*!< If true flush is done with read instead of TCFLUSH - MicroHam */\n\n    char pathname[HAMLIB_FILPATHLEN];      /*!< Port pathname */\n\n    union {\n        struct {\n            int rate;       /*!< Serial baud rate */\n            int data_bits;  /*!< Number of data bits */\n            int stop_bits;  /*!< Number of stop bits */\n            enum serial_parity_e parity;        /*!< Serial parity */\n            enum serial_handshake_e handshake;  /*!< Serial handshake */\n            enum serial_control_state_e rts_state;    /*!< RTS set state */\n            enum serial_control_state_e dtr_state;    /*!< DTR set state */\n        } serial;           /*!< serial attributes */\n\n        struct {\n            int pin;        /*!< Parallel port pin number */\n        } parallel;         /*!< parallel attributes */\n\n        struct {\n            int ptt_bitnum; /*!< Bit number for CM108 GPIO PTT */\n        } cm108;            /*!< CM108 attributes */\n\n        struct {\n            int vid;        /*!< Vendor ID */\n            int pid;        /*!< Product ID */\n            int conf;       /*!< Configuration */\n            int iface;      /*!< interface */\n            int alt;        /*!< alternate */\n            char *vendor_name;  /*!< Vendor name (opt.) */\n            char *product;      /*!< Product (opt.) */\n        } usb;              /*!< USB attributes */\n\n        struct {\n            int on_value;   /*!< GPIO: 1 == normal, GPION: 0 == inverted */\n            int value;      /*!< Toggle PTT ON or OFF */\n        } gpio;             /*!< GPIO attributes */\n    } parm;                 /*!< Port parameter union */\n    int client_port;      /*!< client socket port for tcp connection */\n    RIG *rig;             /*!< our parent RIG device */\n    int asyncio;            /*!< enable asynchronous data handling if true -- async collides with python keyword so _async is used */\n#if defined(_WIN32)\n    hamlib_async_pipe_t *sync_data_pipe;         /*!< pipe data structure for synchronous data */\n    hamlib_async_pipe_t *sync_data_error_pipe;   /*!< pipe data structure for synchronous data error codes */\n#else\n    int fd_sync_write;          /*!< file descriptor for writing synchronous data */\n    int fd_sync_read;           /*!< file descriptor for reading synchronous data */\n    int fd_sync_error_write;    /*!< file descriptor for writing synchronous data error codes */\n    int fd_sync_error_read;     /*!< file descriptor for reading synchronous data error codes */\n#endif\n} hamlib_port_t;\n\n \n// DO NOT CHANGE THIS STRUCTURE AT ALL\n// Will be removed in 5.0\ntypedef struct hamlib_port_deprecated {\n    union {\n        rig_port_t rig;     /*!< Communication port type */\n        ptt_type_t ptt;     /*!< PTT port type */\n        dcd_type_t dcd;     /*!< DCD port type */\n    } type;\n\n    int fd;                 /*!< File descriptor */\n    void *handle;           /*!< handle for USB */\n\n    int write_delay;        /*!< Delay between each byte sent out, in mS */\n    int post_write_delay;   /*!< Delay between each commands send out, in mS */\n\n    struct {\n        int tv_sec, tv_usec;\n    } post_write_date;      /*!< hamlib internal use */\n\n    int timeout;            /*!< Timeout, in mS */\n    short retry;            /*!< Maximum number of retries, 0 to disable */\n    short flushx;           /*!< If true flush is done with read instead of TCFLUSH - MicroHam */\n\n    char pathname[HAMLIB_FILPATHLEN];      /*!< Port pathname */\n\n    union {\n        struct {\n            int rate;       /*!< Serial baud rate */\n            int data_bits;  /*!< Number of data bits */\n            int stop_bits;  /*!< Number of stop bits */\n            enum serial_parity_e parity;        /*!< Serial parity */\n            enum serial_handshake_e handshake;  /*!< Serial handshake */\n            enum serial_control_state_e rts_state;    /*!< RTS set state */\n            enum serial_control_state_e dtr_state;    /*!< DTR set state */\n        } serial;           /*!< serial attributes */\n\n        struct {\n            int pin;        /*!< Parallel port pin number */\n        } parallel;         /*!< parallel attributes */\n\n        struct {\n            int ptt_bitnum; /*!< Bit number for CM108 GPIO PTT */\n        } cm108;            /*!< CM108 attributes */\n\n        struct {\n            int vid;        /*!< Vendor ID */\n            int pid;        /*!< Product ID */\n            int conf;       /*!< Configuration */\n            int iface;      /*!< interface */\n            int alt;        /*!< alternate */\n            char *vendor_name;  /*!< Vendor name (opt.) */\n            char *product;      /*!< Product (opt.) */\n        } usb;              /*!< USB attributes */\n\n        struct {\n            int on_value;   /*!< GPIO: 1 == normal, GPION: 0 == inverted */\n            int value;      /*!< Toggle PTT ON or OFF */\n        } gpio;             /*!< GPIO attributes */\n    } parm;                 /*!< Port parameter union */\n    int client_port;      /*!< client socket port for tcp connection */\n    RIG *rig;             /*!< our parent RIG device */\n} hamlib_port_t_deprecated;\n//! @endcond\n\n#if !defined(__APPLE__) || !defined(__cplusplus)\ntypedef hamlib_port_t_deprecated port_t_deprecated;\ntypedef hamlib_port_t port_t;\n#endif\n\n#define HAMLIB_ELAPSED_GET 0\n#define HAMLIB_ELAPSED_SET 1\n#define HAMLIB_ELAPSED_INVALIDATE 2\n\n#define HAMLIB_CACHE_ALWAYS (-1) /*< value to set cache timeout to always use cache */\n\ntypedef enum {\n    HAMLIB_CACHE_ALL, // to set all cache timeouts at once\n    HAMLIB_CACHE_VFO,\n    HAMLIB_CACHE_FREQ,\n    HAMLIB_CACHE_MODE,\n    HAMLIB_CACHE_PTT,\n    HAMLIB_CACHE_SPLIT,\n    HAMLIB_CACHE_WIDTH\n} hamlib_cache_t;\n\ntypedef enum {\n    TWIDDLE_OFF,\n    TWIDDLE_ON\n} twiddle_state_t;\n\n/**\n * \\brief Rig cache data\n *\n * This struct contains all the items we cache at the highest level\n */\nstruct rig_cache {\n    int timeout_ms;  // the cache timeout for invalidating itself\n    vfo_t vfo;\n    //freq_t freq; // to be deprecated in 4.1 when full Main/Sub/A/B caching is implemented in 4.1\n    // other abstraction here is based on dual vfo rigs and mapped to all others\n    // So we have four possible states of rig\n    // MainA, MainB, SubA, SubB\n    // Main is the Main VFO and Sub is for the 2nd VFO\n    // Most rigs have MainA and MainB\n    // Dual VFO rigs can have SubA and SubB too\n    // For dual VFO rigs simplex operations are all done on MainA/MainB -- ergo this abstraction\n    freq_t freqCurr; // Other VFO\n    freq_t freqOther; // Other VFO\n    freq_t freqMainA; // VFO_A, VFO_MAIN, and VFO_MAINA\n    freq_t freqMainB; // VFO_B, VFO_SUB, and VFO_MAINB\n    freq_t freqMainC; // VFO_C, VFO_MAINC\n    freq_t freqSubA;  // VFO_SUBA -- only for rigs with dual Sub VFOs\n    freq_t freqSubB;  // VFO_SUBB -- only for rigs with dual Sub VFOs\n    freq_t freqSubC;  // VFO_SUBC -- only for rigs with 3 Sub VFOs\n    freq_t freqMem;   // VFO_MEM -- last MEM channel\n    rmode_t modeCurr;\n    rmode_t modeOther;\n    rmode_t modeMainA;\n    rmode_t modeMainB;\n    rmode_t modeMainC;\n    rmode_t modeSubA;\n    rmode_t modeSubB;\n    rmode_t modeSubC;\n    rmode_t modeMem;\n    pbwidth_t widthCurr; // if non-zero then rig has separate width for MainA\n    pbwidth_t widthOther; // if non-zero then rig has separate width for MainA\n    pbwidth_t widthMainA; // if non-zero then rig has separate width for MainA\n    pbwidth_t widthMainB; // if non-zero then rig has separate width for MainB\n    pbwidth_t widthMainC; // if non-zero then rig has separate width for MainC\n    pbwidth_t widthSubA;  // if non-zero then rig has separate width for SubA\n    pbwidth_t widthSubB;  // if non-zero then rig has separate width for SubB\n    pbwidth_t widthSubC;  // if non-zero then rig has separate width for SubC\n    pbwidth_t widthMem;  // if non-zero then rig has separate width for Mem\n    ptt_t ptt;\n    split_t split;\n    vfo_t split_vfo;  // split caches two values\n    struct timespec time_freqCurr;\n    struct timespec time_freqOther;\n    struct timespec time_freqMainA;\n    struct timespec time_freqMainB;\n    struct timespec time_freqMainC;\n    struct timespec time_freqSubA;\n    struct timespec time_freqSubB;\n    struct timespec time_freqSubC;\n    struct timespec time_freqMem;\n    struct timespec time_vfo;\n    struct timespec time_modeCurr;\n    struct timespec time_modeOther;\n    struct timespec time_modeMainA;\n    struct timespec time_modeMainB;\n    struct timespec time_modeMainC;\n    struct timespec time_modeSubA;\n    struct timespec time_modeSubB;\n    struct timespec time_modeSubC;\n    struct timespec time_modeMem;\n    struct timespec time_widthCurr;\n    struct timespec time_widthOther;\n    struct timespec time_widthMainA;\n    struct timespec time_widthMainB;\n    struct timespec time_widthMainC;\n    struct timespec time_widthSubA;\n    struct timespec time_widthSubB;\n    struct timespec time_widthSubC;\n    struct timespec time_widthMem;\n    struct timespec time_ptt;\n    struct timespec time_split;\n    int satmode; // if rig is in satellite mode\n};\n\n\n/**\n * \\brief Rig state containing live data and customized fields.\n *\n * This struct contains live data, as well as a copy of capability fields\n * that may be updated (ie. customized)\n *\n * It is NOT fine to move fields around as it can break share library offset\n * As of 2021-03-03  vfo_list is the last known item being reference externally\n * So any additions or changes to this structure must be at the end of the structure\n */\nstruct rig_state {\n    /********* ENSURE ANY NEW ITEMS ARE ADDED AT BOTTOM OF THIS STRUCTURE *********/\n    /*\n     * overridable fields\n     */\n    // moving the hamlib_port_t to the end of rig_state and making it a pointer\n    // this should allow changes to hamlib_port_t without breaking shared libraries\n    // these will maintain a copy of the new port_t for backwards compatiblity\n    // to these offsets -- note these must stay until a major version update is done like 5.0\n    hamlib_port_t_deprecated rigport_deprecated;  /*!< Rig port (internal use). */\n    hamlib_port_t_deprecated pttport_deprecated;  /*!< PTT port (internal use). */\n    hamlib_port_t_deprecated dcdport_deprecated;  /*!< DCD port (internal use). */\n\n    double vfo_comp;        /*!< VFO compensation in PPM, 0.0 to disable */\n\n    int deprecated_itu_region;         /*!< ITU region to select among freq_range_t */\n    freq_range_t rx_range_list[HAMLIB_FRQRANGESIZ];    /*!< Receive frequency range list */\n    freq_range_t tx_range_list[HAMLIB_FRQRANGESIZ];    /*!< Transmit frequency range list */\n\n    struct tuning_step_list tuning_steps[HAMLIB_TSLSTSIZ]; /*!< Tuning step list */\n\n    struct filter_list filters[HAMLIB_FLTLSTSIZ];      /*!< Mode/filter table, at -6dB */\n\n    cal_table_t str_cal;            /*!< S-meter calibration table */\n\n    chan_t chan_list[HAMLIB_CHANLSTSIZ];   /*!< Channel list, zero ended */\n\n    shortfreq_t max_rit;        /*!< max absolute RIT */\n    shortfreq_t max_xit;        /*!< max absolute XIT */\n    shortfreq_t max_ifshift;    /*!< max absolute IF-SHIFT */\n\n    ann_t announces;            /*!< Announces bit field list */\n\n    int preamp[HAMLIB_MAXDBLSTSIZ];    /*!< Preamp list in dB, 0 terminated */\n    int attenuator[HAMLIB_MAXDBLSTSIZ];    /*!< Preamp list in dB, 0 terminated */\n\n    setting_t has_get_func;     /*!< List of get functions */\n    setting_t has_set_func;     /*!< List of set functions */\n    setting_t has_get_level;    /*!< List of get level */\n    setting_t has_set_level;    /*!< List of set level */\n    setting_t has_get_parm;     /*!< List of get parm */\n    setting_t has_set_parm;     /*!< List of set parm */\n\n    gran_t level_gran[RIG_SETTING_MAX]; /*!< level granularity */\n    gran_t parm_gran[RIG_SETTING_MAX];  /*!< parm granularity */\n\n\n    /*\n     * non overridable fields, internal use\n     */\n\n    int transaction_active;    /*!< set to 1 to inform the async reader thread that a synchronous command transaction is waiting for a response, otherwise 0 */\n    vfo_t current_vfo;  /*!< VFO currently set */\n    int vfo_list;       /*!< Complete list of VFO for this rig */\n    int comm_state;     /*!< Comm port state, opened/closed. */\n    rig_ptr_t priv;     /*!< Pointer to private rig state data. */\n    rig_ptr_t obj;      /*!< Internal use by hamlib++ for event handling. */\n\n    int async_data_enabled;     /*!< Whether async data mode is enabled */\n    int poll_interval;          /*!< Rig state polling period in milliseconds */\n    freq_t current_freq;        /*!< Frequency currently set */\n    rmode_t current_mode;       /*!< Mode currently set */\n    //rmode_t current_modeB;      /*!< Mode currently set VFOB */\n    pbwidth_t current_width;    /*!< Passband width currently set */\n    vfo_t tx_vfo;               /*!< Tx VFO currently set */\n    rmode_t mode_list;              /*!< Complete list of modes for this rig */\n    // mode_list is used by some\n    // so anything added to this structure must be below here\n    int transmit;               /*!< rig should be transmitting i.e. hard\n                                     wired PTT asserted - used by rigs that\n                                     don't do CAT while in Tx */\n    freq_t lo_freq;             /*!< Local oscillator frequency of any transverter */\n    time_t twiddle_time;        /*!< time when vfo twiddling was detected */\n    int twiddle_timeout;        /*!< timeout to resume from twiddling */\n    // uplink allows gpredict to behave better by no reading the uplink VFO\n    int uplink;                 /*!< uplink=1 will not read Sub, uplink=2 will not read Main */\n    struct rig_cache cache;\n    int vfo_opt;                /*!< Is -o switch turned on? */\n    int auto_power_on;          /*!< Allow Hamlib to power on rig\n                                   automatically if supported */\n    int auto_power_off;          /*!< Allow Hamlib to power off rig\n                                   automatically if supported */\n    int auto_disable_screensaver; /*!< Allow Hamlib to disable the\n                                   rig's screen saver automatically if\n                                   supported */\n    int ptt_share;              /*!< Share ptt port by open/close during get_ptt, set_ptt hogs the port while active */\n    int power_now;              /*!< Current RF power level in rig units */\n    int power_min;              /*!< Minimum RF power level in rig units */\n    int power_max;              /*!< Maximum RF power level in rig units */\n    unsigned char disable_yaesu_bandselect; /*!< Disables Yaesu band select logic */\n    int twiddle_rit;            /*!< Suppresses VFOB reading (cached value used) so RIT control can be used */\n    int twiddle_state;          /*!< keeps track of twiddle status */\n    vfo_t rx_vfo;               /*!< Rx VFO currently set */\n\n    volatile unsigned int snapshot_packet_sequence_number;\n\n    volatile int multicast_publisher_run;\n    void *multicast_publisher_priv_data;\n    volatile int async_data_handler_thread_run;\n    void *async_data_handler_priv_data;\n    volatile int poll_routine_thread_run;\n    void *poll_routine_priv_data;\n#ifdef HAVE_PTHREAD\n    pthread_mutex_t mutex_set_transaction;\n#endif\n    hamlib_port_t rigport;  /*!< Rig port (internal use). */\n    hamlib_port_t pttport;  /*!< PTT port (internal use). */\n    hamlib_port_t dcdport;  /*!< DCD port (internal use). */\n    /********* DO NOT ADD or CHANGE anything (or than to rename) ABOVE THIS LINE *********/\n    /********* ENSURE ANY NEW ITEMS ARE ADDED AFTER HERE *********/\n    /* flags instructing the rig_get routines to use cached values when asyncio is in use */\n    int use_cached_freq; /*<! flag instructing rig_get_freq to use cached values when asyncio is in use */\n    int use_cached_mode; /*<! flag instructing rig_get_mode to use cached values when asyncio is in use */\n    int use_cached_ptt;  /*<! flag instructing rig_get_ptt to use cached values when asyncio is in use */\n    int depth; /*<! a depth counter to use for debug indentation and such */\n};\n\n//! @cond Doxygen_Suppress\ntypedef int (*vprintf_cb_t)(enum rig_debug_level_e,\n                            rig_ptr_t,\n                            const char *,\n                            va_list);\n\ntypedef int (*freq_cb_t)(RIG *, vfo_t, freq_t, rig_ptr_t);\ntypedef int (*mode_cb_t)(RIG *, vfo_t, rmode_t, pbwidth_t, rig_ptr_t);\ntypedef int (*vfo_cb_t)(RIG *, vfo_t, rig_ptr_t);\ntypedef int (*ptt_cb_t)(RIG *, vfo_t, ptt_t, rig_ptr_t);\ntypedef int (*dcd_cb_t)(RIG *, vfo_t, dcd_t, rig_ptr_t);\ntypedef int (*pltune_cb_t)(RIG *,\n                           vfo_t, freq_t *,\n                           rmode_t *,\n                           pbwidth_t *,\n                           rig_ptr_t);\ntypedef int (*spectrum_cb_t)(RIG *,\n                             struct rig_spectrum_line *,\n                             rig_ptr_t);\n\n//! @endcond\n\n/**\n * \\brief Callback functions and args for rig event.\n *\n * Some rigs are able to notify the host computer the operator changed\n * the freq/mode from the front panel, depressed a button, etc.\n *\n * Events from the rig are received through async io,\n * so callback functions will be called from the SIGIO sighandler context.\n *\n * Don't set these fields directly, use rig_set_freq_callback et. al. instead.\n *\n * Callbacks suit event based programming very well,\n * really appropriate in a GUI.\n *\n * \\sa rig_set_freq_callback(), rig_set_mode_callback(), rig_set_vfo_callback(),\n *     rig_set_ptt_callback(), rig_set_dcd_callback()\n */\nstruct rig_callbacks {\n    freq_cb_t freq_event;   /*!< Frequency change event */\n    rig_ptr_t freq_arg;     /*!< Frequency change argument */\n    mode_cb_t mode_event;   /*!< Mode change event */\n    rig_ptr_t mode_arg;     /*!< Mode change argument */\n    vfo_cb_t vfo_event;     /*!< VFO change event */\n    rig_ptr_t vfo_arg;      /*!< VFO change argument */\n    ptt_cb_t ptt_event;     /*!< PTT change event */\n    rig_ptr_t ptt_arg;      /*!< PTT change argument */\n    dcd_cb_t dcd_event;     /*!< DCD change event */\n    rig_ptr_t dcd_arg;      /*!< DCD change argument */\n    pltune_cb_t pltune;     /*!< Pipeline tuning module freq/mode/width callback */\n    rig_ptr_t pltune_arg;   /*!< Pipeline tuning argument */\n    spectrum_cb_t spectrum_event; /*!< Spectrum line reception event */\n    rig_ptr_t spectrum_arg; /*!< Spectrum line reception argument */\n    /* etc.. */\n};\n\n\n/**\n * \\brief The Rig structure\n *\n * This is the master data structure, acting as a handle for the controlled\n * rig. A pointer to this structure is returned by the rig_init() API\n * function and is passed as a parameter to every rig specific API call.\n *\n * \\sa rig_init(), rig_caps(), rig_state()\n */\nstruct s_rig {\n    struct rig_caps *caps;          /*!< Pointer to rig capabilities (read only) */\n    struct rig_state state;         /*!< Rig state */\n    struct rig_callbacks callbacks; /*!< registered event callbacks */\n};\n\n\n\n/* --------------- API function prototypes -----------------*/\n\n//! @cond Doxygen_Suppress\n\nextern HAMLIB_EXPORT(RIG *) rig_init HAMLIB_PARAMS((rig_model_t rig_model));\nextern HAMLIB_EXPORT(int) rig_open HAMLIB_PARAMS((RIG *rig));\n\n/*\n *  General API commands, from most primitive to least.. :()\n *  List Set/Get functions pairs\n */\n\nextern HAMLIB_EXPORT(int)\nrig_flush(hamlib_port_t *port);\n\n#if BUILTINFUNC\n#define rig_set_freq(r,v, f) rig_set_vfo(r,v,f,__builtin_FUNCTION())\n#else\nextern HAMLIB_EXPORT(int)\nrig_set_freq HAMLIB_PARAMS((RIG *rig,\n                            vfo_t vfo,\n                            freq_t freq));\n#endif\nextern HAMLIB_EXPORT(int)\nrig_get_freq HAMLIB_PARAMS((RIG *rig,\n                            vfo_t vfo,\n                            freq_t *freq));\n\nextern HAMLIB_EXPORT(int)\nrig_set_mode HAMLIB_PARAMS((RIG *rig,\n                            vfo_t vfo,\n                            rmode_t mode,\n                            pbwidth_t width));\nextern HAMLIB_EXPORT(int)\nrig_get_mode HAMLIB_PARAMS((RIG *rig,\n                            vfo_t vfo,\n                            rmode_t *mode,\n                            pbwidth_t *width));\n\n#if BUILTINFUNC\n#define rig_set_vfo(r,v) rig_set_vfo(r,v,__builtin_FUNCTION())\nextern HAMLIB_EXPORT(int)\nrig_set_vfo HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo, const char *func));\n#else\nextern HAMLIB_EXPORT(int)\nrig_set_vfo HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo));\n#endif\nextern HAMLIB_EXPORT(int)\nrig_get_vfo HAMLIB_PARAMS((RIG *rig,\n                           vfo_t *vfo));\n\nextern HAMLIB_EXPORT(int)\nrig_get_vfo_info HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo,\n                           freq_t *freq,\n                           rmode_t *mode,\n                           pbwidth_t *width,\n                           split_t *split,\n                           int *satmode));\n\nextern HAMLIB_EXPORT(int)\nrig_get_vfo_list HAMLIB_PARAMS((RIG *rig, char *buf, int buflen));\n\nextern HAMLIB_EXPORT(int)\nnetrigctl_get_vfo_mode HAMLIB_PARAMS((RIG *rig));\n\nextern HAMLIB_EXPORT(int)\nrig_set_ptt HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo,\n                           ptt_t ptt));\nextern HAMLIB_EXPORT(int)\nrig_get_ptt HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo,\n                           ptt_t *ptt));\n\nextern HAMLIB_EXPORT(int)\nrig_get_dcd HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo,\n                           dcd_t *dcd));\n\nextern HAMLIB_EXPORT(int)\nrig_set_rptr_shift HAMLIB_PARAMS((RIG *rig,\n                                  vfo_t vfo,\n                                  rptr_shift_t rptr_shift));\nextern HAMLIB_EXPORT(int)\nrig_get_rptr_shift HAMLIB_PARAMS((RIG *rig,\n                                  vfo_t vfo,\n                                  rptr_shift_t *rptr_shift));\n\nextern HAMLIB_EXPORT(int)\nrig_set_rptr_offs HAMLIB_PARAMS((RIG *rig,\n                                 vfo_t vfo,\n                                 shortfreq_t rptr_offs));\nextern HAMLIB_EXPORT(int)\nrig_get_rptr_offs HAMLIB_PARAMS((RIG *rig,\n                                 vfo_t vfo,\n                                 shortfreq_t *rptr_offs));\n\nextern HAMLIB_EXPORT(int)\nrig_set_ctcss_tone HAMLIB_PARAMS((RIG *rig,\n                                  vfo_t vfo,\n                                  tone_t tone));\nextern HAMLIB_EXPORT(int)\nrig_get_ctcss_tone HAMLIB_PARAMS((RIG *rig,\n                                  vfo_t vfo,\n                                  tone_t *tone));\n\nextern HAMLIB_EXPORT(int)\nrig_set_dcs_code HAMLIB_PARAMS((RIG *rig,\n                                vfo_t vfo,\n                                tone_t code));\nextern HAMLIB_EXPORT(int)\nrig_get_dcs_code HAMLIB_PARAMS((RIG *rig,\n                                vfo_t vfo,\n                                tone_t *code));\n\nextern HAMLIB_EXPORT(int)\nrig_set_ctcss_sql HAMLIB_PARAMS((RIG *rig,\n                                 vfo_t vfo,\n                                 tone_t tone));\nextern HAMLIB_EXPORT(int)\nrig_get_ctcss_sql HAMLIB_PARAMS((RIG *rig,\n                                 vfo_t vfo,\n                                 tone_t *tone));\n\nextern HAMLIB_EXPORT(int)\nrig_set_dcs_sql HAMLIB_PARAMS((RIG *rig,\n                               vfo_t vfo,\n                               tone_t code));\nextern HAMLIB_EXPORT(int)\nrig_get_dcs_sql HAMLIB_PARAMS((RIG *rig,\n                               vfo_t vfo,\n                               tone_t *code));\n\nextern HAMLIB_EXPORT(int)\nrig_set_split_freq HAMLIB_PARAMS((RIG *rig,\n                                  vfo_t vfo,\n                                  freq_t tx_freq));\nextern HAMLIB_EXPORT(int)\nrig_get_split_freq HAMLIB_PARAMS((RIG *rig,\n                                  vfo_t vfo,\n                                  freq_t *tx_freq));\n\nextern HAMLIB_EXPORT(int)\nrig_set_split_mode HAMLIB_PARAMS((RIG *rig,\n                                  vfo_t vfo,\n                                  rmode_t tx_mode,\n                                  pbwidth_t tx_width));\nextern HAMLIB_EXPORT(int)\nrig_get_split_mode HAMLIB_PARAMS((RIG *rig,\n                                  vfo_t vfo,\n                                  rmode_t *tx_mode,\n                                  pbwidth_t *tx_width));\n\nextern HAMLIB_EXPORT(int)\nrig_set_split_freq_mode HAMLIB_PARAMS((RIG *rig,\n                                       vfo_t vfo,\n                                       freq_t tx_freq,\n                                       rmode_t tx_mode,\n                                       pbwidth_t tx_width));\nextern HAMLIB_EXPORT(int)\nrig_get_split_freq_mode HAMLIB_PARAMS((RIG *rig,\n                                       vfo_t vfo,\n                                       freq_t *tx_freq,\n                                       rmode_t *tx_mode,\n                                       pbwidth_t *tx_width));\n\nextern HAMLIB_EXPORT(int)\nrig_set_split_vfo HAMLIB_PARAMS((RIG *,\n                                 vfo_t rx_vfo,\n                                 split_t split,\n                                 vfo_t tx_vfo));\nextern HAMLIB_EXPORT(int)\nrig_get_split_vfo HAMLIB_PARAMS((RIG *,\n                                 vfo_t rx_vfo,\n                                 split_t *split,\n                                 vfo_t *tx_vfo));\n\n#define rig_set_split(r,v,s) rig_set_split_vfo((r),(v),(s),RIG_VFO_CURR)\n#define rig_get_split(r,v,s) ({ vfo_t _tx_vfo; rig_get_split_vfo((r),(v),(s),&_tx_vfo); })\n\nextern HAMLIB_EXPORT(int)\nrig_set_rit HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo,\n                           shortfreq_t rit));\nextern HAMLIB_EXPORT(int)\nrig_get_rit HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo,\n                           shortfreq_t *rit));\n\nextern HAMLIB_EXPORT(int)\nrig_set_xit HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo,\n                           shortfreq_t xit));\nextern HAMLIB_EXPORT(int)\nrig_get_xit HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo,\n                           shortfreq_t *xit));\n\nextern HAMLIB_EXPORT(int)\nrig_set_ts HAMLIB_PARAMS((RIG *rig,\n                          vfo_t vfo,\n                          shortfreq_t ts));\nextern HAMLIB_EXPORT(int)\nrig_get_ts HAMLIB_PARAMS((RIG *rig,\n                          vfo_t vfo,\n                          shortfreq_t *ts));\n\nextern HAMLIB_EXPORT(int)\nrig_power2mW HAMLIB_PARAMS((RIG *rig,\n                            unsigned int *mwpower,\n                            float power,\n                            freq_t freq,\n                            rmode_t mode));\nextern HAMLIB_EXPORT(int)\nrig_mW2power HAMLIB_PARAMS((RIG *rig,\n                            float *power,\n                            unsigned int mwpower,\n                            freq_t freq,\n                            rmode_t mode));\n\nextern HAMLIB_EXPORT(shortfreq_t)\nrig_get_resolution HAMLIB_PARAMS((RIG *rig,\n                                  rmode_t mode));\n\nextern HAMLIB_EXPORT(int)\nrig_set_level HAMLIB_PARAMS((RIG *rig,\n                             vfo_t vfo,\n                             setting_t level,\n                             value_t val));\nextern HAMLIB_EXPORT(int)\nrig_get_level HAMLIB_PARAMS((RIG *rig,\n                             vfo_t vfo,\n                             setting_t level,\n                             value_t *val));\n\n#define rig_get_strength(r,v,s) rig_get_level((r),(v),RIG_LEVEL_STRENGTH, (value_t*)(s))\n\nextern HAMLIB_EXPORT(int)\nrig_set_parm HAMLIB_PARAMS((RIG *rig,\n                            setting_t parm,\n                            value_t val));\nextern HAMLIB_EXPORT(int)\nrig_get_parm HAMLIB_PARAMS((RIG *rig,\n                            setting_t parm,\n                            value_t *val));\n\nextern HAMLIB_EXPORT(int)\nrig_set_conf HAMLIB_PARAMS((RIG *rig,\n                            token_t token,\n                            const char *val));\n// deprecating rig_get_conf\nextern HAMLIB_EXPORT(int)\nrig_get_conf HAMLIB_PARAMS((RIG *rig,\n                            token_t token,\n                            char *val));\nextern HAMLIB_EXPORT(int)\nrig_get_conf2 HAMLIB_PARAMS((RIG *rig,\n                            token_t token,\n                            char *val,\n                            int val_len));\n\nextern HAMLIB_EXPORT(int)\nrig_set_powerstat HAMLIB_PARAMS((RIG *rig,\n                                 powerstat_t status));\nextern HAMLIB_EXPORT(int)\nrig_get_powerstat HAMLIB_PARAMS((RIG *rig,\n                                 powerstat_t *status));\n\nextern HAMLIB_EXPORT(int)\nrig_reset HAMLIB_PARAMS((RIG *rig,\n                         reset_t reset));   /* dangerous! */\n\nextern HAMLIB_EXPORT(int)\nrig_set_ext_level HAMLIB_PARAMS((RIG *rig,\n                                 vfo_t vfo,\n                                 token_t token,\n                                 value_t val));\nextern HAMLIB_EXPORT(int)\nrig_get_ext_level HAMLIB_PARAMS((RIG *rig,\n                                 vfo_t vfo,\n                                 token_t token,\n                                 value_t *val));\n\nextern HAMLIB_EXPORT(int)\nrig_set_ext_func HAMLIB_PARAMS((RIG *rig,\n                                 vfo_t vfo,\n                                 token_t token,\n                                 int status));\nextern HAMLIB_EXPORT(int)\nrig_get_ext_func HAMLIB_PARAMS((RIG *rig,\n                                 vfo_t vfo,\n                                 token_t token,\n                                 int *status));\n\nextern HAMLIB_EXPORT(int)\nrig_set_ext_parm HAMLIB_PARAMS((RIG *rig,\n                                token_t token,\n                                value_t val));\nextern HAMLIB_EXPORT(int)\nrig_get_ext_parm HAMLIB_PARAMS((RIG *rig,\n                                token_t token,\n                                value_t *val));\n\nextern HAMLIB_EXPORT(int)\nrig_ext_func_foreach HAMLIB_PARAMS((RIG *rig,\n                                     int (*cfunc)(RIG *,\n                                                  const struct confparams *,\n                                                  rig_ptr_t),\n                                     rig_ptr_t data));\nextern HAMLIB_EXPORT(int)\nrig_ext_level_foreach HAMLIB_PARAMS((RIG *rig,\n                                     int (*cfunc)(RIG *,\n                                                  const struct confparams *,\n                                                  rig_ptr_t),\n                                     rig_ptr_t data));\nextern HAMLIB_EXPORT(int)\nrig_ext_parm_foreach HAMLIB_PARAMS((RIG *rig,\n                                    int (*cfunc)(RIG *,\n                                                 const struct confparams *,\n                                                 rig_ptr_t),\n                                    rig_ptr_t data));\n\nextern HAMLIB_EXPORT(const struct confparams *)\nrig_ext_lookup HAMLIB_PARAMS((RIG *rig,\n                              const char *name));\n\nextern HAMLIB_EXPORT(const struct confparams *)\nrig_ext_lookup_tok HAMLIB_PARAMS((RIG *rig,\n                                  token_t token));\nextern HAMLIB_EXPORT(token_t)\nrig_ext_token_lookup HAMLIB_PARAMS((RIG *rig,\n                                    const char *name));\n\n\nextern HAMLIB_EXPORT(int)\nrig_token_foreach HAMLIB_PARAMS((RIG *rig,\n                                 int (*cfunc)(const struct confparams *,\n                                              rig_ptr_t),\n                                 rig_ptr_t data));\n\nextern HAMLIB_EXPORT(const struct confparams *)\nrig_confparam_lookup HAMLIB_PARAMS((RIG *rig,\n                                    const char *name));\nextern HAMLIB_EXPORT(token_t)\nrig_token_lookup HAMLIB_PARAMS((RIG *rig,\n                                const char *name));\n\nextern HAMLIB_EXPORT(int)\nrig_close HAMLIB_PARAMS((RIG *rig));\n\nextern HAMLIB_EXPORT(int)\nrig_cleanup HAMLIB_PARAMS((RIG *rig));\n\nextern HAMLIB_EXPORT(int)\nrig_set_ant HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo,\n                           ant_t ant,  /* antenna */\n                           value_t option));  /* optional ant info */\nextern HAMLIB_EXPORT(int)\nrig_get_ant HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo,\n                           ant_t ant,\n                           value_t *option,\n                           ant_t *ant_curr,\n                           ant_t *ant_tx,\n                           ant_t *ant_rx));\n\nextern HAMLIB_EXPORT(setting_t)\nrig_has_get_level HAMLIB_PARAMS((RIG *rig,\n                                 setting_t level));\nextern HAMLIB_EXPORT(setting_t)\nrig_has_set_level HAMLIB_PARAMS((RIG *rig,\n                                 setting_t level));\n\nextern HAMLIB_EXPORT(setting_t)\nrig_has_get_parm HAMLIB_PARAMS((RIG *rig,\n                                setting_t parm));\nextern HAMLIB_EXPORT(setting_t)\nrig_has_set_parm HAMLIB_PARAMS((RIG *rig,\n                                setting_t parm));\n\nextern HAMLIB_EXPORT(setting_t)\nrig_has_get_func HAMLIB_PARAMS((RIG *rig,\n                                setting_t func));\nextern HAMLIB_EXPORT(setting_t)\nrig_has_set_func HAMLIB_PARAMS((RIG *rig,\n                                setting_t func));\n\nextern HAMLIB_EXPORT(int)\nrig_set_func HAMLIB_PARAMS((RIG *rig,\n                            vfo_t vfo,\n                            setting_t func,\n                            int status));\nextern HAMLIB_EXPORT(int)\nrig_get_func HAMLIB_PARAMS((RIG *rig,\n                            vfo_t vfo,\n                            setting_t func,\n                            int *status));\n\nextern HAMLIB_EXPORT(int)\nrig_send_dtmf HAMLIB_PARAMS((RIG *rig,\n                             vfo_t vfo,\n                             const char *digits));\nextern HAMLIB_EXPORT(int)\nrig_recv_dtmf HAMLIB_PARAMS((RIG *rig,\n                             vfo_t vfo,\n                             char *digits,\n                             int *length));\n\nextern HAMLIB_EXPORT(int)\nrig_send_morse HAMLIB_PARAMS((RIG *rig,\n                              vfo_t vfo,\n                              const char *msg));\n\nextern HAMLIB_EXPORT(int)\nrig_stop_morse HAMLIB_PARAMS((RIG *rig,\n                              vfo_t vfo));\n\nextern HAMLIB_EXPORT(int)\nrig_wait_morse HAMLIB_PARAMS((RIG *rig,\n                              vfo_t vfo));\n\nextern HAMLIB_EXPORT(int)\nrig_send_voice_mem HAMLIB_PARAMS((RIG *rig,\n                              vfo_t vfo,\n                              int ch));\n\nextern HAMLIB_EXPORT(int)\nrig_set_bank HAMLIB_PARAMS((RIG *rig,\n                            vfo_t vfo,\n                            int bank));\n\nextern HAMLIB_EXPORT(int)\nrig_set_mem HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo,\n                           int ch));\nextern HAMLIB_EXPORT(int)\nrig_get_mem HAMLIB_PARAMS((RIG *rig,\n                           vfo_t vfo,\n                           int *ch));\n\nextern HAMLIB_EXPORT(int)\nrig_vfo_op HAMLIB_PARAMS((RIG *rig,\n                          vfo_t vfo,\n                          vfo_op_t op));\n\nextern HAMLIB_EXPORT(vfo_op_t)\nrig_has_vfo_op HAMLIB_PARAMS((RIG *rig,\n                              vfo_op_t op));\n\nextern HAMLIB_EXPORT(int)\nrig_scan HAMLIB_PARAMS((RIG *rig,\n                        vfo_t vfo,\n                        scan_t scan,\n                        int ch));\n\nextern HAMLIB_EXPORT(scan_t)\nrig_has_scan HAMLIB_PARAMS((RIG *rig,\n                            scan_t scan));\n\nextern HAMLIB_EXPORT(int)\nrig_set_channel HAMLIB_PARAMS((RIG *rig,\n                               vfo_t vfo,\n                               const channel_t *chan)); /* mem */\nextern HAMLIB_EXPORT(int)\nrig_get_channel HAMLIB_PARAMS((RIG *rig,\n                               vfo_t vfo,\n                               channel_t *chan, int read_only));\n\nextern HAMLIB_EXPORT(int)\nrig_set_chan_all HAMLIB_PARAMS((RIG *rig,\n                                vfo_t vfo,\n                                const channel_t chans[]));\nextern HAMLIB_EXPORT(int)\nrig_get_chan_all HAMLIB_PARAMS((RIG *rig,\n                                vfo_t vfo,\n                                channel_t chans[]));\n\nextern HAMLIB_EXPORT(int)\nrig_set_chan_all_cb HAMLIB_PARAMS((RIG *rig,\n                                   vfo_t vfo,\n                                   chan_cb_t chan_cb,\n                                   rig_ptr_t));\nextern HAMLIB_EXPORT(int)\nrig_get_chan_all_cb HAMLIB_PARAMS((RIG *rig,\n                                   vfo_t vfo,\n                                   chan_cb_t chan_cb,\n                                   rig_ptr_t));\n\nextern HAMLIB_EXPORT(int)\nrig_set_mem_all_cb HAMLIB_PARAMS((RIG *rig,\n                                  vfo_t vfo,\n                                  chan_cb_t chan_cb,\n                                  confval_cb_t parm_cb,\n                                  rig_ptr_t));\nextern HAMLIB_EXPORT(int)\nrig_get_mem_all_cb HAMLIB_PARAMS((RIG *rig,\n                                  vfo_t vfo,\n                                  chan_cb_t chan_cb,\n                                  confval_cb_t parm_cb,\n                                  rig_ptr_t));\n\nextern HAMLIB_EXPORT(int)\nrig_set_mem_all HAMLIB_PARAMS((RIG *rig,\n                               vfo_t vfo,\n                               const channel_t *chan,\n                               const struct confparams *,\n                               const value_t *));\nextern HAMLIB_EXPORT(int)\nrig_get_mem_all HAMLIB_PARAMS((RIG *rig,\n                               vfo_t vfo,\n                               channel_t *chan,\n                               const struct confparams *,\n                               value_t *));\n\nextern HAMLIB_EXPORT(const chan_t *)\nrig_lookup_mem_caps HAMLIB_PARAMS((RIG *rig,\n                                   int ch));\n\nextern HAMLIB_EXPORT(int)\nrig_mem_count HAMLIB_PARAMS((RIG *rig));\n\nextern HAMLIB_EXPORT(int)\nrig_set_trn HAMLIB_PARAMS((RIG *rig,\n                           int trn));\nextern HAMLIB_EXPORT(int)\nrig_get_trn HAMLIB_PARAMS((RIG *rig,\n                           int *trn));\n\nextern HAMLIB_EXPORT(int)\nrig_set_freq_callback HAMLIB_PARAMS((RIG *,\n                                     freq_cb_t,\n                                     rig_ptr_t));\n\nextern HAMLIB_EXPORT(int)\nrig_set_mode_callback HAMLIB_PARAMS((RIG *,\n                                     mode_cb_t,\n                                     rig_ptr_t));\nextern HAMLIB_EXPORT(int)\nrig_set_vfo_callback HAMLIB_PARAMS((RIG *,\n                                    vfo_cb_t,\n                                    rig_ptr_t));\n\nextern HAMLIB_EXPORT(int)\nrig_set_ptt_callback HAMLIB_PARAMS((RIG *,\n                                    ptt_cb_t,\n                                    rig_ptr_t));\n\nextern HAMLIB_EXPORT(int)\nrig_set_dcd_callback HAMLIB_PARAMS((RIG *,\n                                    dcd_cb_t,\n                                    rig_ptr_t));\n\nextern HAMLIB_EXPORT(int)\nrig_set_pltune_callback HAMLIB_PARAMS((RIG *,\n                                       pltune_cb_t,\n                                       rig_ptr_t));\n\nextern HAMLIB_EXPORT(int)\nrig_set_spectrum_callback HAMLIB_PARAMS((RIG *,\n                                         spectrum_cb_t,\n                                         rig_ptr_t));\n\nextern HAMLIB_EXPORT(int)\nrig_set_twiddle HAMLIB_PARAMS((RIG *rig,\n                                 int seconds));\n\nextern HAMLIB_EXPORT(int)\nrig_get_twiddle HAMLIB_PARAMS((RIG *rig,\n                                 int *seconds));\n\nextern HAMLIB_EXPORT(int)\nrig_set_uplink HAMLIB_PARAMS((RIG *rig,\n                                 int val));\n\nextern HAMLIB_EXPORT(const char *)\nrig_get_info HAMLIB_PARAMS((RIG *rig));\n\nextern HAMLIB_EXPORT(const struct rig_caps *)\nrig_get_caps HAMLIB_PARAMS((rig_model_t rig_model));\n\nextern HAMLIB_EXPORT(const freq_range_t *)\nrig_get_range HAMLIB_PARAMS((const freq_range_t *range_list,\n                             freq_t freq,\n                             rmode_t mode));\n\nextern HAMLIB_EXPORT(pbwidth_t)\nrig_passband_normal HAMLIB_PARAMS((RIG *rig,\n                                   rmode_t mode));\nextern HAMLIB_EXPORT(pbwidth_t)\nrig_passband_narrow HAMLIB_PARAMS((RIG *rig,\n                                   rmode_t mode));\nextern HAMLIB_EXPORT(pbwidth_t)\nrig_passband_wide HAMLIB_PARAMS((RIG *rig,\n                                 rmode_t mode));\n\nextern HAMLIB_EXPORT(const char *)\nrigerror HAMLIB_PARAMS((int errnum));\n\nextern HAMLIB_EXPORT(int)\nrig_setting2idx HAMLIB_PARAMS((setting_t s));\n\nextern HAMLIB_EXPORT(setting_t)\nrig_idx2setting(int i);\n/*\n * Even if these functions are prefixed with \"rig_\", they are not rig specific\n * Maybe \"hamlib_\" would have been better. Let me know. --SF\n */\nextern HAMLIB_EXPORT(void)\nrig_set_debug HAMLIB_PARAMS((enum rig_debug_level_e debug_level));\n\nextern HAMLIB_EXPORT(void)\nrig_set_debug_time_stamp HAMLIB_PARAMS((int flag));\n\n#define rig_set_debug_level(level) rig_set_debug(level)\n\nextern HAMLIB_EXPORT(int)\nrig_need_debug HAMLIB_PARAMS((enum rig_debug_level_e debug_level));\n\n\nextern HAMLIB_EXPORT(void)add2debugmsgsave(const char *s);\n// this need to be fairly big to avoid compiler warnings\n#define DEBUGMSGSAVE_SIZE 24000\nextern HAMLIB_EXPORT_VAR(char) debugmsgsave[DEBUGMSGSAVE_SIZE];  // last debug msg\nextern HAMLIB_EXPORT_VAR(char) debugmsgsave2[DEBUGMSGSAVE_SIZE];  // last-1 debug msg\n// debugmsgsave3 is deprecated\nextern HAMLIB_EXPORT_VAR(char) debugmsgsave3[DEBUGMSGSAVE_SIZE];  // last-2 debug msg\n#ifndef __cplusplus\n#ifdef __GNUC__\n// doing the debug macro with a dummy sprintf allows gcc to check the format string\n#define rig_debug(debug_level,fmt,...) do { snprintf(debugmsgsave2,sizeof(debugmsgsave2),fmt,__VA_ARGS__);rig_debug(debug_level,fmt,##__VA_ARGS__); add2debugmsgsave(debugmsgsave2); } while(0)\n#endif\n#endif\n\n// Measuring elapsed time -- local variable inside function when macro is used\n#define ELAPSED1 struct timespec __begin; elapsed_ms(&__begin, HAMLIB_ELAPSED_SET);\n#define ELAPSED2 rig_debug(RIG_DEBUG_TRACE, \"%.*s%d:%s: elapsed=%.0lfms\\n\", rig->state.depth, spaces(), rig->state.depth, __func__, elapsed_ms(&__begin, HAMLIB_ELAPSED_GET));\n\n// use this instead of snprintf for automatic detection of buffer limit\n#define SNPRINTF(s,n,...) { snprintf(s,n,##__VA_ARGS__);if (strlen(s) > n-1) fprintf(stderr,\"****** %s(%d): buffer overflow ******\\n\", __func__, __LINE__); }\n\nextern HAMLIB_EXPORT(void)\nrig_debug HAMLIB_PARAMS((enum rig_debug_level_e debug_level,\n                         const char *fmt, ...));\n\nextern HAMLIB_EXPORT(vprintf_cb_t)\nrig_set_debug_callback HAMLIB_PARAMS((vprintf_cb_t cb,\n                                      rig_ptr_t arg));\n\nextern HAMLIB_EXPORT(FILE *)\nrig_set_debug_file HAMLIB_PARAMS((FILE *stream));\n\nextern HAMLIB_EXPORT(int)\nrig_register HAMLIB_PARAMS((const struct rig_caps *caps));\n\nextern HAMLIB_EXPORT(int)\nrig_unregister HAMLIB_PARAMS((rig_model_t rig_model));\n\nextern HAMLIB_EXPORT(int)\nrig_list_foreach HAMLIB_PARAMS((int (*cfunc)(const struct rig_caps *, rig_ptr_t),\n                                rig_ptr_t data));\n\nextern HAMLIB_EXPORT(int)\nrig_list_foreach_model HAMLIB_PARAMS((int (*cfunc)(const rig_model_t rig_model, rig_ptr_t),\n                                rig_ptr_t data));\n\nextern HAMLIB_EXPORT(int)\nrig_load_backend HAMLIB_PARAMS((const char *be_name));\n\nextern HAMLIB_EXPORT(int)\nrig_check_backend HAMLIB_PARAMS((rig_model_t rig_model));\n\nextern HAMLIB_EXPORT(int)\nrig_load_all_backends HAMLIB_PARAMS((void));\n\ntypedef int (*rig_probe_func_t)(const hamlib_port_t *, rig_model_t, rig_ptr_t);\n\nextern HAMLIB_EXPORT(int)\nrig_probe_all HAMLIB_PARAMS((hamlib_port_t *p,\n                             rig_probe_func_t,\n                             rig_ptr_t));\n\nextern HAMLIB_EXPORT(rig_model_t)\nrig_probe HAMLIB_PARAMS((hamlib_port_t *p));\n\n\n/* Misc calls */\nextern HAMLIB_EXPORT(const char *) rig_strrmode(rmode_t mode);\nextern HAMLIB_EXPORT(int)          rig_strrmodes(rmode_t modes, char *buf, int buflen);\nextern HAMLIB_EXPORT(const char *) rig_strvfo(vfo_t vfo);\nextern HAMLIB_EXPORT(const char *) rig_strfunc(setting_t);\nextern HAMLIB_EXPORT(const char *) rig_strlevel(setting_t);\nextern HAMLIB_EXPORT(const char *) rig_strparm(setting_t);\nextern HAMLIB_EXPORT(const char *) rig_stragclevel(enum agc_level_e level);\nextern HAMLIB_EXPORT(enum agc_level_e)  rig_levelagcstr (char *agcString);\nextern HAMLIB_EXPORT(enum agc_level_e)  rig_levelagcvalue (int agcValue);\nextern HAMLIB_EXPORT(value_t) rig_valueagclevel (enum agc_level_e agcLevel);\nextern HAMLIB_EXPORT(const char *) rig_strptrshift(rptr_shift_t);\nextern HAMLIB_EXPORT(const char *) rig_strvfop(vfo_op_t op);\nextern HAMLIB_EXPORT(const char *) rig_strscan(scan_t scan);\nextern HAMLIB_EXPORT(const char *) rig_strstatus(enum rig_status_e status);\nextern HAMLIB_EXPORT(const char *) rig_strmtype(chan_type_t mtype);\nextern HAMLIB_EXPORT(const char *) rig_strspectrummode(enum rig_spectrum_mode_e mode);\n\nextern HAMLIB_EXPORT(rmode_t) rig_parse_mode(const char *s);\nextern HAMLIB_EXPORT(vfo_t) rig_parse_vfo(const char *s);\nextern HAMLIB_EXPORT(setting_t) rig_parse_func(const char *s);\nextern HAMLIB_EXPORT(setting_t) rig_parse_level(const char *s);\nextern HAMLIB_EXPORT(setting_t) rig_parse_parm(const char *s);\nextern HAMLIB_EXPORT(vfo_op_t) rig_parse_vfo_op(const char *s);\nextern HAMLIB_EXPORT(scan_t) rig_parse_scan(const char *s);\nextern HAMLIB_EXPORT(rptr_shift_t) rig_parse_rptr_shift(const char *s);\nextern HAMLIB_EXPORT(chan_type_t) rig_parse_mtype(const char *s);\n\nextern HAMLIB_EXPORT(const char *) rig_license HAMLIB_PARAMS(());\nextern HAMLIB_EXPORT(const char *) rig_version HAMLIB_PARAMS(());\nextern HAMLIB_EXPORT(const char *) rig_copyright HAMLIB_PARAMS(());\n\nextern HAMLIB_EXPORT(void) rig_no_restore_ai();\n\nextern HAMLIB_EXPORT(int) rig_get_cache_timeout_ms(RIG *rig, hamlib_cache_t selection);\nextern HAMLIB_EXPORT(int) rig_set_cache_timeout_ms(RIG *rig, hamlib_cache_t selection, int ms);\n\nextern HAMLIB_EXPORT(int) rig_set_vfo_opt(RIG *rig, int status);\nextern HAMLIB_EXPORT(int) rig_get_vfo_info(RIG *rig, vfo_t vfo, freq_t *freq, rmode_t *mode, pbwidth_t *width, split_t *split, int *satmode);\nextern HAMLIB_EXPORT(int) rig_get_rig_info(RIG *rig, char *response, int max_response_len);\nextern HAMLIB_EXPORT(int) rig_get_cache(RIG *rig, vfo_t vfo, freq_t *freq, int * cache_ms_freq, rmode_t *mode, int *cache_ms_mode, pbwidth_t *width, int *cache_ms_width);\n\nextern HAMLIB_EXPORT(int) rig_set_clock(RIG *rig, int year, int month, int day, int hour, int min, int sec, double msec, int utc_offset);\nextern HAMLIB_EXPORT(int) rig_get_clock(RIG *rig, int *year, int *month, int *day, int *hour, int *min, int *sec, double *msec, int *utc_offset);\n\ntypedef unsigned long rig_useconds_t;\nextern HAMLIB_EXPORT(int) hl_usleep(rig_useconds_t msec);\n\nextern HAMLIB_EXPORT(int) rig_cookie(RIG *rig, enum cookie_e cookie_cmd, char *cookie, int cookie_len);\n\nextern HAMLIB_EXPORT(int) rig_password(RIG *rig, const char *key1);\nextern HAMLIB_EXPORT(void) rig_password_generate_secret(char *pass,\n        char result[HAMLIB_SECRET_LENGTH + 1]);\n\nextern HAMLIB_EXPORT(int)\nlonglat2locator HAMLIB_PARAMS((double longitude,\n                               double latitude,\n                               char *locator_res,\n                               int pair_count));\n\nextern HAMLIB_EXPORT(int)\nlocator2longlat HAMLIB_PARAMS((double *longitude,\n                               double *latitude,\n                               const char *locator));\n\nextern HAMLIB_EXPORT(char*) rig_make_md5(char *pass);\n\n\n//! @endcond\n\n__END_DECLS\n\n#endif /* _RIG_H */\n\n/*! @} */\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/include/hamlib/rig_dll.h",
    "content": "/*\n *  Hamlib Win32 DLL build definitions\n *  Copyright (c) 2001-2009 by Stephane Fillod\n *\n *\n *   This library is free software; you can redistribute it and/or\n *   modify it under the terms of the GNU Lesser General Public\n *   License as published by the Free Software Foundation; either\n *   version 2.1 of the License, or (at your option) any later version.\n *\n *   This library is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n *   Lesser General Public License for more details.\n *\n *   You should have received a copy of the GNU Lesser General Public\n *   License along with this library; if not, write to the Free Software\n *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n *\n */\n\n/*\n * Provide definitions to compile in Windows\n * using C-friendly options, e.g.\n *\n * HAMLIB_API -> __cdecl\n * HAMLIB_EXPORT, HAMLIB_EXPORT_VAR -> __declspec(dllexport)\n * BACKEND_EXPORT, BACKEND_EXPORT_VAR -> __declspec(dllexport)\n *\n * No effect in non-Windows environments.\n */\n\n#if defined(_WIN32) && !defined(__CYGWIN__)\n#  undef HAMLIB_IMPEXP\n#  undef HAMLIB_CPP_IMPEXP\n#  undef HAMLIB_API\n#  undef HAMLIB_EXPORT\n#  undef HAMLIB_EXPORT_VAR\n#  undef BACKEND_EXPORT\n#  undef BACKEND_EXPORT_VAR\n#  undef HAMLIB_DLL_IMPORT\n#  undef HAMLIB_DLL_EXPORT\n\n#  if defined (__BORLANDC__)\n#    define HAMLIB_DLL_IMPORT __import\n#    define HAMLIB_DLL_EXPORT __export\n#  else\n#    define HAMLIB_DLL_IMPORT __declspec(dllimport)\n#    define HAMLIB_DLL_EXPORT __declspec(dllexport)\n#  endif\n\n#  ifdef DLL_EXPORT\n/* HAMLIB_API may be set to __stdcall for VB, .. */\n#    define HAMLIB_API __cdecl\n#    ifdef IN_HAMLIB\n#      define HAMLIB_CPP_IMPEXP HAMLIB_DLL_EXPORT\n#      define HAMLIB_IMPEXP HAMLIB_DLL_EXPORT\n#    else\n#      define HAMLIB_CPP_IMPEXP HAMLIB_DLL_IMPORT\n#      define HAMLIB_IMPEXP HAMLIB_DLL_IMPORT\n#    endif\n#  else\n/* static build, only export the backend entry points for lt_dlsym */\n#    define HAMLIB_CPP_IMPEXP HAMLIB_DLL_EXPORT\n#  endif\n#endif\n\n\n/* Take care of non-cygwin platforms */\n#if !defined(HAMLIB_IMPEXP)\n#  define HAMLIB_IMPEXP\n#endif\n#if !defined(HAMLIB_CPP_IMPEXP)\n#  define HAMLIB_CPP_IMPEXP\n#endif\n#if !defined(HAMLIB_API)\n#  define HAMLIB_API\n#endif\n#if !defined(HAMLIB_EXPORT)\n#  define HAMLIB_EXPORT(type) HAMLIB_IMPEXP type HAMLIB_API\n#endif\n#if !defined(HAMLIB_EXPORT_VAR)\n#  define HAMLIB_EXPORT_VAR(type) HAMLIB_IMPEXP type\n#endif\n#if !defined(BACKEND_EXPORT)\n#  define BACKEND_EXPORT(type) HAMLIB_CPP_IMPEXP type HAMLIB_API\n#endif\n#if !defined(BACKEND_EXPORT_VAR)\n#  define BACKEND_EXPORT_VAR(type) HAMLIB_CPP_IMPEXP type\n#endif\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/include/hamlib/riglist.h",
    "content": "/*\n *  Hamlib Interface - list of known rigs\n *  Copyright (c) 2000-2003 by Frank Singleton\n *  Copyright (c) 2000-2015 by Stephane Fillod\n *\n *\n *   This library is free software; you can redistribute it and/or\n *   modify it under the terms of the GNU Lesser General Public\n *   License as published by the Free Software Foundation; either\n *   version 2.1 of the License, or (at your option) any later version.\n *\n *   This library is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n *   Lesser General Public License for more details.\n *\n *   You should have received a copy of the GNU Lesser General Public\n *   License along with this library; if not, write to the Free Software\n *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n *\n */\n\n#ifndef _RIGLIST_H\n#define _RIGLIST_H 1\n\n//! @cond Doxygen_Suppress\n\n// The rig model number is designed to fit in a 32-bit int\n// As of 2020-02-18 we have 33 backends defined\n// With a max of 1000 models per backend we get total a model number range of 1001-33001\n// This MAX was 100 prior to 2020-02-18 and Icom was close to running out of the 100 range\n#define  MAX_MODELS_PER_BACKEND 1000\n#define RIG_MAKE_MODEL(a,b) ((a)*MAX_MODELS_PER_BACKEND+(b))\n#define RIG_BACKEND_NUM(a) ((a)/MAX_MODELS_PER_BACKEND)\n\n/*! \\file riglist.h\n *  \\brief Hamlib rig(radio) model definitions.\n *\n *  This file contains rig model definitions for the Hamlib rig API.  Each\n *  distinct rig type has a unique model number (ID) and is used by hamlib to\n *  identify and distinguish between the different hardware drivers.  The\n *  exact model numbers can be acquired using the macros in this file. To\n *  obtain a list of supported rig branches, one can use the statically\n *  defined RIG_BACKEND_LIST macro. To obtain a full list of supported rig\n *  (including each model in every branch), the foreach_opened_rig() API\n *  function can be used.\n *\n *  The model number, or ID, is used to tell hamlib, which rig the client\n *  whishes to use. It is done with the rig_init() API call.\n */\n\n#define RIG_MODEL_NONE 0\n\n/*! \\def RIG_MODEL_DUMMY\n *  \\brief A macro that returns the model number for the dummy backend.\n *\n *  The dummy backend, as the name suggests, is a backend which performs no\n *  hardware operations and always behaves as one would expect. It can be\n *  thought of as a hardware simulator and is very useful for testing client\n *  applications.\n *\n *  It has also been expanded to provide support to \"virtual\" type of rigs\n *  such as the network rig control backend and W1HKJ's Flrig application.\n */\n#define RIG_DUMMY 0\n#define RIG_BACKEND_DUMMY \"dummy\"\n#define RIG_MODEL_DUMMY RIG_MAKE_MODEL(RIG_DUMMY, 1)\n#define RIG_MODEL_NETRIGCTL RIG_MAKE_MODEL(RIG_DUMMY, 2)\n#define RIG_MODEL_ARMSTRONG RIG_MAKE_MODEL(RIG_DUMMY, 3)\n#define RIG_MODEL_FLRIG RIG_MAKE_MODEL(RIG_DUMMY, 4)\n#define RIG_MODEL_TRXMANAGER_RIG RIG_MAKE_MODEL(RIG_DUMMY, 5)\n#define RIG_MODEL_DUMMY_NOVFO RIG_MAKE_MODEL(RIG_DUMMY, 6)\n#define RIG_MODEL_TCI1X RIG_MAKE_MODEL(RIG_DUMMY, 7)\n\n\n/*\n * Yaesu\n */\n#define RIG_YAESU 1\n#define RIG_BACKEND_YAESU \"yaesu\"\n#define RIG_MODEL_FT847 RIG_MAKE_MODEL(RIG_YAESU, 1)\n#define RIG_MODEL_FT1000 RIG_MAKE_MODEL(RIG_YAESU, 2)\n#define RIG_MODEL_FT1000D RIG_MAKE_MODEL(RIG_YAESU, 3)\n#define RIG_MODEL_FT1000MPMKV RIG_MAKE_MODEL(RIG_YAESU, 4)\n#define RIG_MODEL_FT747 RIG_MAKE_MODEL(RIG_YAESU, 5)\n#define RIG_MODEL_FT757 RIG_MAKE_MODEL(RIG_YAESU, 6)\n#define RIG_MODEL_FT757GXII RIG_MAKE_MODEL(RIG_YAESU, 7)\n#define RIG_MODEL_FT575 RIG_MAKE_MODEL(RIG_YAESU, 8)\n#define RIG_MODEL_FT767 RIG_MAKE_MODEL(RIG_YAESU, 9)\n#define RIG_MODEL_FT736R RIG_MAKE_MODEL(RIG_YAESU, 10)\n#define RIG_MODEL_FT840 RIG_MAKE_MODEL(RIG_YAESU, 11)\n#define RIG_MODEL_FT820 RIG_MAKE_MODEL(RIG_YAESU, 12)\n#define RIG_MODEL_FT900 RIG_MAKE_MODEL(RIG_YAESU, 13)\n#define RIG_MODEL_FT920 RIG_MAKE_MODEL(RIG_YAESU, 14)\n#define RIG_MODEL_FT890 RIG_MAKE_MODEL(RIG_YAESU, 15)\n#define RIG_MODEL_FT990 RIG_MAKE_MODEL(RIG_YAESU, 16)\n#define RIG_MODEL_FRG100 RIG_MAKE_MODEL(RIG_YAESU, 17)\n#define RIG_MODEL_FRG9600 RIG_MAKE_MODEL(RIG_YAESU, 18)\n#define RIG_MODEL_FRG8800 RIG_MAKE_MODEL(RIG_YAESU, 19)\n#define RIG_MODEL_FT817 RIG_MAKE_MODEL(RIG_YAESU, 20)\n#define RIG_MODEL_FT100 RIG_MAKE_MODEL(RIG_YAESU, 21)\n#define RIG_MODEL_FT857 RIG_MAKE_MODEL(RIG_YAESU, 22)\n#define RIG_MODEL_FT897 RIG_MAKE_MODEL(RIG_YAESU, 23)\n#define RIG_MODEL_FT1000MP RIG_MAKE_MODEL(RIG_YAESU, 24)\n#define RIG_MODEL_FT1000MPMKVFLD RIG_MAKE_MODEL(RIG_YAESU, 25)\n#define RIG_MODEL_VR5000 RIG_MAKE_MODEL(RIG_YAESU, 26)\n#define RIG_MODEL_FT450 RIG_MAKE_MODEL(RIG_YAESU, 27)\n#define RIG_MODEL_FT950 RIG_MAKE_MODEL(RIG_YAESU, 28)\n#define RIG_MODEL_FT2000 RIG_MAKE_MODEL(RIG_YAESU, 29)\n#define RIG_MODEL_FT9000 RIG_MAKE_MODEL(RIG_YAESU, 30)\n#define RIG_MODEL_FT980 RIG_MAKE_MODEL(RIG_YAESU, 31)\n#define RIG_MODEL_FTDX5000 RIG_MAKE_MODEL(RIG_YAESU, 32)\n#define RIG_MODEL_VX1700 RIG_MAKE_MODEL(RIG_YAESU, 33)\n#define RIG_MODEL_FTDX1200 RIG_MAKE_MODEL(RIG_YAESU, 34)\n#define RIG_MODEL_FT991 RIG_MAKE_MODEL(RIG_YAESU, 35)\n#define RIG_MODEL_FT891 RIG_MAKE_MODEL(RIG_YAESU, 36)\n#define RIG_MODEL_FTDX3000 RIG_MAKE_MODEL(RIG_YAESU, 37)\n#define RIG_MODEL_FT847UNI RIG_MAKE_MODEL(RIG_YAESU, 38)\n#define RIG_MODEL_FT600 RIG_MAKE_MODEL(RIG_YAESU, 39)\n#define RIG_MODEL_FTDX101D RIG_MAKE_MODEL(RIG_YAESU, 40)\n#define RIG_MODEL_FT818 RIG_MAKE_MODEL(RIG_YAESU, 41)\n#define RIG_MODEL_FTDX10 RIG_MAKE_MODEL(RIG_YAESU, 42)\n#define RIG_MODEL_FT897D RIG_MAKE_MODEL(RIG_YAESU, 43)\n#define RIG_MODEL_FTDX101MP RIG_MAKE_MODEL(RIG_YAESU, 44)\n#define RIG_MODEL_MCHFQRP RIG_MAKE_MODEL(RIG_YAESU, 45)\n#define RIG_MODEL_FT450D RIG_MAKE_MODEL(RIG_YAESU, 46)\n\n\n/*\n * Kenwood\n */\n#define RIG_KENWOOD 2\n#define RIG_BACKEND_KENWOOD \"kenwood\"\n#define RIG_MODEL_TS50 RIG_MAKE_MODEL(RIG_KENWOOD, 1)\n#define RIG_MODEL_TS440 RIG_MAKE_MODEL(RIG_KENWOOD, 2)\n#define RIG_MODEL_TS450S RIG_MAKE_MODEL(RIG_KENWOOD, 3)\n#define RIG_MODEL_TS570D RIG_MAKE_MODEL(RIG_KENWOOD, 4)\n#define RIG_MODEL_TS690S RIG_MAKE_MODEL(RIG_KENWOOD, 5)\n#define RIG_MODEL_TS711 RIG_MAKE_MODEL(RIG_KENWOOD, 6)\n#define RIG_MODEL_TS790 RIG_MAKE_MODEL(RIG_KENWOOD, 7)\n#define RIG_MODEL_TS811 RIG_MAKE_MODEL(RIG_KENWOOD, 8)\n#define RIG_MODEL_TS850 RIG_MAKE_MODEL(RIG_KENWOOD, 9)\n#define RIG_MODEL_TS870S RIG_MAKE_MODEL(RIG_KENWOOD, 10)\n#define RIG_MODEL_TS940 RIG_MAKE_MODEL(RIG_KENWOOD, 11)\n#define RIG_MODEL_TS950S RIG_MAKE_MODEL(RIG_KENWOOD, 12)\n#define RIG_MODEL_TS950SDX RIG_MAKE_MODEL(RIG_KENWOOD, 13)\n#define RIG_MODEL_TS2000 RIG_MAKE_MODEL(RIG_KENWOOD, 14)\n#define RIG_MODEL_R5000 RIG_MAKE_MODEL(RIG_KENWOOD, 15)\n#define RIG_MODEL_TS570S RIG_MAKE_MODEL(RIG_KENWOOD, 16)\n#define RIG_MODEL_THD7A RIG_MAKE_MODEL(RIG_KENWOOD, 17)\n#define RIG_MODEL_THD7AG RIG_MAKE_MODEL(RIG_KENWOOD, 18)\n#define RIG_MODEL_THF6A RIG_MAKE_MODEL(RIG_KENWOOD, 19)\n#define RIG_MODEL_THF7E RIG_MAKE_MODEL(RIG_KENWOOD, 20)\n#define RIG_MODEL_K2 RIG_MAKE_MODEL(RIG_KENWOOD, 21)\n#define RIG_MODEL_TS930 RIG_MAKE_MODEL(RIG_KENWOOD, 22)\n#define RIG_MODEL_THG71 RIG_MAKE_MODEL(RIG_KENWOOD, 23)\n#define RIG_MODEL_TS680S RIG_MAKE_MODEL(RIG_KENWOOD, 24)\n#define RIG_MODEL_TS140S RIG_MAKE_MODEL(RIG_KENWOOD, 25)\n#define RIG_MODEL_TMD700 RIG_MAKE_MODEL(RIG_KENWOOD, 26)\n#define RIG_MODEL_TMV7 RIG_MAKE_MODEL(RIG_KENWOOD, 27)\n#define RIG_MODEL_TS480 RIG_MAKE_MODEL(RIG_KENWOOD, 28)\n#define RIG_MODEL_K3 RIG_MAKE_MODEL(RIG_KENWOOD, 29)\n#define RIG_MODEL_TRC80 RIG_MAKE_MODEL(RIG_KENWOOD, 30)\n#define RIG_MODEL_TS590S RIG_MAKE_MODEL(RIG_KENWOOD, 31)\n#define RIG_MODEL_TRANSFOX RIG_MAKE_MODEL(RIG_KENWOOD, 32)  /* SigFox Transfox */\n#define RIG_MODEL_THD72A RIG_MAKE_MODEL(RIG_KENWOOD, 33)\n#define RIG_MODEL_TMD710 RIG_MAKE_MODEL(RIG_KENWOOD, 34)\n#define RIG_MODEL_TMV71 RIG_MAKE_MODEL(RIG_KENWOOD, 35)\n#define RIG_MODEL_F6K RIG_MAKE_MODEL(RIG_KENWOOD, 36)   /* Flex 6000 Series */\n#define RIG_MODEL_TS590SG RIG_MAKE_MODEL(RIG_KENWOOD, 37)\n#define RIG_MODEL_XG3 RIG_MAKE_MODEL(RIG_KENWOOD, 38)   /* Elecraft XG-3 signal generator */\n#define RIG_MODEL_TS990S RIG_MAKE_MODEL(RIG_KENWOOD, 39)\n#define RIG_MODEL_HPSDR RIG_MAKE_MODEL(RIG_KENWOOD, 40) /* OpenHPSDR, PiHPSDR */\n#define RIG_MODEL_TS890S RIG_MAKE_MODEL(RIG_KENWOOD, 41)\n#define RIG_MODEL_THD74 RIG_MAKE_MODEL(RIG_KENWOOD, 42)\n#define RIG_MODEL_K3S RIG_MAKE_MODEL(RIG_KENWOOD, 43)\n#define RIG_MODEL_KX2 RIG_MAKE_MODEL(RIG_KENWOOD, 44)\n#define RIG_MODEL_KX3 RIG_MAKE_MODEL(RIG_KENWOOD, 45)\n#define RIG_MODEL_PT8000A RIG_MAKE_MODEL(RIG_KENWOOD, 46)\n#define RIG_MODEL_K4 RIG_MAKE_MODEL(RIG_KENWOOD, 47)\n#define RIG_MODEL_POWERSDR RIG_MAKE_MODEL(RIG_KENWOOD, 48)\n#define RIG_MODEL_MALACHITE RIG_MAKE_MODEL(RIG_KENWOOD, 49)\n#define RIG_MODEL_LAB599_TX500 RIG_MAKE_MODEL(RIG_KENWOOD,50)\n#define RIG_MODEL_SDRUNO RIG_MAKE_MODEL(RIG_KENWOOD,51)\n\n/*\n * Icom\n */\n#define RIG_ICOM 3\n#define RIG_BACKEND_ICOM \"icom\"\n#define RIG_MODEL_IC1271 RIG_MAKE_MODEL(RIG_ICOM, 1)\n#define RIG_MODEL_IC1275 RIG_MAKE_MODEL(RIG_ICOM, 2)\n#define RIG_MODEL_IC271 RIG_MAKE_MODEL(RIG_ICOM, 3)\n#define RIG_MODEL_IC275 RIG_MAKE_MODEL(RIG_ICOM, 4)\n#define RIG_MODEL_IC375 RIG_MAKE_MODEL(RIG_ICOM, 5)\n#define RIG_MODEL_IC471 RIG_MAKE_MODEL(RIG_ICOM, 6)\n#define RIG_MODEL_IC475 RIG_MAKE_MODEL(RIG_ICOM, 7)\n#define RIG_MODEL_IC575 RIG_MAKE_MODEL(RIG_ICOM, 8)\n#define RIG_MODEL_IC706 RIG_MAKE_MODEL(RIG_ICOM, 9)\n#define RIG_MODEL_IC706MKII RIG_MAKE_MODEL(RIG_ICOM, 10)\n#define RIG_MODEL_IC706MKIIG RIG_MAKE_MODEL(RIG_ICOM, 11)\n#define RIG_MODEL_IC707 RIG_MAKE_MODEL(RIG_ICOM, 12)\n#define RIG_MODEL_IC718 RIG_MAKE_MODEL(RIG_ICOM, 13)\n#define RIG_MODEL_IC725 RIG_MAKE_MODEL(RIG_ICOM, 14)\n#define RIG_MODEL_IC726 RIG_MAKE_MODEL(RIG_ICOM, 15)\n#define RIG_MODEL_IC728 RIG_MAKE_MODEL(RIG_ICOM, 16)\n#define RIG_MODEL_IC729 RIG_MAKE_MODEL(RIG_ICOM, 17)\n#define RIG_MODEL_IC731 RIG_MAKE_MODEL(RIG_ICOM, 18)\n#define RIG_MODEL_IC735 RIG_MAKE_MODEL(RIG_ICOM, 19)\n#define RIG_MODEL_IC736 RIG_MAKE_MODEL(RIG_ICOM, 20)\n#define RIG_MODEL_IC737 RIG_MAKE_MODEL(RIG_ICOM, 21)\n#define RIG_MODEL_IC738 RIG_MAKE_MODEL(RIG_ICOM, 22)\n#define RIG_MODEL_IC746 RIG_MAKE_MODEL(RIG_ICOM, 23)\n#define RIG_MODEL_IC751 RIG_MAKE_MODEL(RIG_ICOM, 24)\n#define RIG_MODEL_IC751A RIG_MAKE_MODEL(RIG_ICOM, 25)\n#define RIG_MODEL_IC756 RIG_MAKE_MODEL(RIG_ICOM, 26)\n#define RIG_MODEL_IC756PRO RIG_MAKE_MODEL(RIG_ICOM, 27)\n#define RIG_MODEL_IC761 RIG_MAKE_MODEL(RIG_ICOM, 28)\n#define RIG_MODEL_IC765 RIG_MAKE_MODEL(RIG_ICOM, 29)\n#define RIG_MODEL_IC775 RIG_MAKE_MODEL(RIG_ICOM, 30)\n#define RIG_MODEL_IC781 RIG_MAKE_MODEL(RIG_ICOM, 31)\n#define RIG_MODEL_IC820 RIG_MAKE_MODEL(RIG_ICOM, 32)\n//#define RIG_MODEL_IC821 RIG_MAKE_MODEL(RIG_ICOM, 33) // not implemented and can be reused\n#define RIG_MODEL_IC821H RIG_MAKE_MODEL(RIG_ICOM, 34)\n#define RIG_MODEL_IC970 RIG_MAKE_MODEL(RIG_ICOM, 35)\n#define RIG_MODEL_ICR10 RIG_MAKE_MODEL(RIG_ICOM, 36)\n#define RIG_MODEL_ICR71 RIG_MAKE_MODEL(RIG_ICOM, 37)\n#define RIG_MODEL_ICR72 RIG_MAKE_MODEL(RIG_ICOM, 38)\n#define RIG_MODEL_ICR75 RIG_MAKE_MODEL(RIG_ICOM, 39)\n#define RIG_MODEL_ICR7000 RIG_MAKE_MODEL(RIG_ICOM, 40)\n#define RIG_MODEL_ICR7100 RIG_MAKE_MODEL(RIG_ICOM, 41)\n#define RIG_MODEL_ICR8500 RIG_MAKE_MODEL(RIG_ICOM, 42)\n#define RIG_MODEL_ICR9000 RIG_MAKE_MODEL(RIG_ICOM, 43)\n#define RIG_MODEL_IC910 RIG_MAKE_MODEL(RIG_ICOM, 44)\n#define RIG_MODEL_IC78 RIG_MAKE_MODEL(RIG_ICOM, 45)\n#define RIG_MODEL_IC746PRO RIG_MAKE_MODEL(RIG_ICOM, 46)\n#define RIG_MODEL_IC756PROII RIG_MAKE_MODEL(RIG_ICOM, 47)   /* 48-53 defined below */\n#define RIG_MODEL_ICID1 RIG_MAKE_MODEL(RIG_ICOM, 54)\n#define RIG_MODEL_IC703 RIG_MAKE_MODEL(RIG_ICOM, 55)\n#define RIG_MODEL_IC7800 RIG_MAKE_MODEL(RIG_ICOM, 56)\n#define RIG_MODEL_IC756PROIII RIG_MAKE_MODEL(RIG_ICOM, 57)\n#define RIG_MODEL_ICR20 RIG_MAKE_MODEL(RIG_ICOM, 58)    /* 59 defined below */\n#define RIG_MODEL_IC7000 RIG_MAKE_MODEL(RIG_ICOM, 60)\n#define RIG_MODEL_IC7200 RIG_MAKE_MODEL(RIG_ICOM, 61)\n#define RIG_MODEL_IC7700 RIG_MAKE_MODEL(RIG_ICOM, 62)\n#define RIG_MODEL_IC7600 RIG_MAKE_MODEL(RIG_ICOM, 63)   /* 64 defined below */\n#define RIG_MODEL_IC92D RIG_MAKE_MODEL(RIG_ICOM, 65)\n#define RIG_MODEL_ICR9500 RIG_MAKE_MODEL(RIG_ICOM, 66)\n#define RIG_MODEL_IC7410 RIG_MAKE_MODEL(RIG_ICOM, 67)\n#define RIG_MODEL_IC9100 RIG_MAKE_MODEL(RIG_ICOM, 68)\n#define RIG_MODEL_ICRX7 RIG_MAKE_MODEL(RIG_ICOM, 69)\n#define RIG_MODEL_IC7100 RIG_MAKE_MODEL(RIG_ICOM, 70)\n#define RIG_MODEL_ID5100 RIG_MAKE_MODEL(RIG_ICOM, 71)\n#define RIG_MODEL_IC2730 RIG_MAKE_MODEL(RIG_ICOM, 72)\n#define RIG_MODEL_IC7300 RIG_MAKE_MODEL(RIG_ICOM, 73)\n#define RIG_MODEL_PERSEUS RIG_MAKE_MODEL(RIG_ICOM, 74)\n#define RIG_MODEL_IC785x RIG_MAKE_MODEL(RIG_ICOM, 75)\n#define RIG_MODEL_X108G RIG_MAKE_MODEL(RIG_ICOM, 76)    /* Xiegu X108 */\n#define RIG_MODEL_ICR6 RIG_MAKE_MODEL(RIG_ICOM, 77)\n#define RIG_MODEL_IC7610 RIG_MAKE_MODEL(RIG_ICOM, 78)\n#define RIG_MODEL_ICR8600 RIG_MAKE_MODEL(RIG_ICOM, 79)\n#define RIG_MODEL_ICR30 RIG_MAKE_MODEL(RIG_ICOM, 80)\n#define RIG_MODEL_IC9700 RIG_MAKE_MODEL(RIG_ICOM, 81)\n#define RIG_MODEL_ID4100 RIG_MAKE_MODEL(RIG_ICOM, 82)\n#define RIG_MODEL_ID31 RIG_MAKE_MODEL(RIG_ICOM, 83)\n#define RIG_MODEL_ID51 RIG_MAKE_MODEL(RIG_ICOM, 84)\n#define RIG_MODEL_IC705 RIG_MAKE_MODEL(RIG_ICOM, 85)\n#define RIG_MODEL_ICF8101 RIG_MAKE_MODEL(RIG_ICOM, 86)\n#define RIG_MODEL_X6100 RIG_MAKE_MODEL(RIG_ICOM, 87)    /* Xiegu X6100 */\n#define RIG_MODEL_G90 RIG_MAKE_MODEL(RIG_ICOM, 88)    /* Xiegu G90 */\n\n\n/*\n * Optoelectronics (CI-V)\n */\n#define RIG_MODEL_MINISCOUT RIG_MAKE_MODEL(RIG_ICOM, 48)\n#define RIG_MODEL_XPLORER RIG_MAKE_MODEL(RIG_ICOM, 49)\n#define RIG_MODEL_OS535 RIG_MAKE_MODEL(RIG_ICOM, 52)\n#define RIG_MODEL_OS456 RIG_MAKE_MODEL(RIG_ICOM, 53)\n\n\n/*\n * TenTec (CI-V)\n */\n#define RIG_MODEL_OMNIVI RIG_MAKE_MODEL(RIG_ICOM, 50)\n#define RIG_MODEL_OMNIVIP RIG_MAKE_MODEL(RIG_ICOM, 51) /* OMNI-VI+ */\n#define RIG_MODEL_PARAGON2 RIG_MAKE_MODEL(RIG_ICOM, 59)\n#define RIG_MODEL_DELTAII RIG_MAKE_MODEL(RIG_ICOM, 64)\n\n\n/*\n * Icom PCR\n */\n#define RIG_PCR 4\n#define RIG_BACKEND_PCR \"pcr\"\n#define RIG_MODEL_PCR1000 RIG_MAKE_MODEL(RIG_PCR, 1)\n#define RIG_MODEL_PCR100 RIG_MAKE_MODEL(RIG_PCR, 2)\n#define RIG_MODEL_PCR1500 RIG_MAKE_MODEL(RIG_PCR, 3)\n#define RIG_MODEL_PCR2500 RIG_MAKE_MODEL(RIG_PCR, 4)\n\n\n/*\n * AOR\n */\n#define RIG_AOR 5\n#define RIG_BACKEND_AOR \"aor\"\n#define RIG_MODEL_AR8200 RIG_MAKE_MODEL(RIG_AOR, 1)\n#define RIG_MODEL_AR8000 RIG_MAKE_MODEL(RIG_AOR, 2)\n#define RIG_MODEL_AR7030 RIG_MAKE_MODEL(RIG_AOR, 3)\n#define RIG_MODEL_AR5000 RIG_MAKE_MODEL(RIG_AOR, 4)\n#define RIG_MODEL_AR3030 RIG_MAKE_MODEL(RIG_AOR, 5)\n#define RIG_MODEL_AR3000A RIG_MAKE_MODEL(RIG_AOR, 6)\n#define RIG_MODEL_AR3000 RIG_MAKE_MODEL(RIG_AOR, 7)\n#define RIG_MODEL_AR2700 RIG_MAKE_MODEL(RIG_AOR, 8)\n#define RIG_MODEL_AR2500 RIG_MAKE_MODEL(RIG_AOR, 9)\n#define RIG_MODEL_AR16 RIG_MAKE_MODEL(RIG_AOR, 10)\n#define RIG_MODEL_SDU5500 RIG_MAKE_MODEL(RIG_AOR, 11)\n#define RIG_MODEL_SDU5000 RIG_MAKE_MODEL(RIG_AOR, 12)\n#define RIG_MODEL_AR8600 RIG_MAKE_MODEL(RIG_AOR, 13)\n#define RIG_MODEL_AR5000A RIG_MAKE_MODEL(RIG_AOR, 14)\n#define RIG_MODEL_AR7030P RIG_MAKE_MODEL(RIG_AOR, 15)\n#define RIG_MODEL_SR2200 RIG_MAKE_MODEL(RIG_AOR, 16)\n\n\n/*\n * JRC\n */\n#define RIG_JRC 6\n#define RIG_BACKEND_JRC \"jrc\"\n#define RIG_MODEL_JST145 RIG_MAKE_MODEL(RIG_JRC, 1)\n#define RIG_MODEL_JST245 RIG_MAKE_MODEL(RIG_JRC, 2)\n#define RIG_MODEL_CMH530 RIG_MAKE_MODEL(RIG_JRC, 3)\n#define RIG_MODEL_NRD345 RIG_MAKE_MODEL(RIG_JRC, 4)\n#define RIG_MODEL_NRD525 RIG_MAKE_MODEL(RIG_JRC, 5)\n#define RIG_MODEL_NRD535 RIG_MAKE_MODEL(RIG_JRC, 6)\n#define RIG_MODEL_NRD545 RIG_MAKE_MODEL(RIG_JRC, 7)\n\n\n/*\n * Radio Shack\n * Actually, they might be either Icom or Uniden. TBC --SF\n */\n#define RIG_RADIOSHACK 7\n#define RIG_BACKEND_RADIOSHACK \"radioshack\"\n#define RIG_MODEL_RS64 RIG_MAKE_MODEL(RIG_RADIOSHACK, 1)    /* PRO-64 */\n#define RIG_MODEL_RS2005 RIG_MAKE_MODEL(RIG_RADIOSHACK, 2)  /* w/ OptoElectronics OS456 Board */\n#define RIG_MODEL_RS2006 RIG_MAKE_MODEL(RIG_RADIOSHACK, 3)  /* w/ OptoElectronics OS456 Board */\n#define RIG_MODEL_RS2035 RIG_MAKE_MODEL(RIG_RADIOSHACK, 4)  /* w/ OptoElectronics OS435 Board */\n#define RIG_MODEL_RS2042 RIG_MAKE_MODEL(RIG_RADIOSHACK, 5)  /* w/ OptoElectronics OS435 Board */\n#define RIG_MODEL_RS2041 RIG_MAKE_MODEL(RIG_RADIOSHACK, 6)  /* PRO-2041 */\n\n\n/*\n * Uniden\n */\n#define RIG_UNIDEN 8\n#define RIG_BACKEND_UNIDEN \"uniden\"\n#define RIG_MODEL_BC780 RIG_MAKE_MODEL(RIG_UNIDEN, 1)   /* Uniden BC780 - Trunk Tracker \"Desktop Radio\" */\n#define RIG_MODEL_BC245 RIG_MAKE_MODEL(RIG_UNIDEN, 2)\n#define RIG_MODEL_BC895 RIG_MAKE_MODEL(RIG_UNIDEN, 3)\n#define RIG_MODEL_PRO2052 RIG_MAKE_MODEL(RIG_UNIDEN, 4) /* Radio Shack PRO-2052 */\n#define RIG_MODEL_BC235 RIG_MAKE_MODEL(RIG_UNIDEN, 5)\n#define RIG_MODEL_BC250 RIG_MAKE_MODEL(RIG_UNIDEN, 6)\n#define RIG_MODEL_BC785 RIG_MAKE_MODEL(RIG_UNIDEN, 7)\n#define RIG_MODEL_BC786 RIG_MAKE_MODEL(RIG_UNIDEN, 8)\n#define RIG_MODEL_BCT8 RIG_MAKE_MODEL(RIG_UNIDEN, 9)\n#define RIG_MODEL_BCD396T RIG_MAKE_MODEL(RIG_UNIDEN, 10)\n#define RIG_MODEL_BCD996T RIG_MAKE_MODEL(RIG_UNIDEN, 11)\n#define RIG_MODEL_BC898 RIG_MAKE_MODEL(RIG_UNIDEN, 12)\n\n\n/*\n * Drake\n */\n#define RIG_DRAKE 9\n#define RIG_BACKEND_DRAKE \"drake\"\n#define RIG_MODEL_DKR8 RIG_MAKE_MODEL(RIG_DRAKE, 1)\n#define RIG_MODEL_DKR8A RIG_MAKE_MODEL(RIG_DRAKE, 2)\n#define RIG_MODEL_DKR8B RIG_MAKE_MODEL(RIG_DRAKE, 3)\n\n\n/*\n * Lowe\n */\n#define RIG_LOWE 10\n#define RIG_BACKEND_LOWE \"lowe\"\n#define RIG_MODEL_HF150 RIG_MAKE_MODEL(RIG_LOWE, 1)\n#define RIG_MODEL_HF225 RIG_MAKE_MODEL(RIG_LOWE, 2)\n#define RIG_MODEL_HF250 RIG_MAKE_MODEL(RIG_LOWE, 3)\n#define RIG_MODEL_HF235 RIG_MAKE_MODEL(RIG_LOWE, 4)\n\n\n/*\n * Racal\n */\n#define RIG_RACAL 11\n#define RIG_BACKEND_RACAL \"racal\"\n#define RIG_MODEL_RA3790 RIG_MAKE_MODEL(RIG_RACAL, 1)\n#define RIG_MODEL_RA3720 RIG_MAKE_MODEL(RIG_RACAL, 2)\n#define RIG_MODEL_RA6790 RIG_MAKE_MODEL(RIG_RACAL, 3)\n#define RIG_MODEL_RA3710 RIG_MAKE_MODEL(RIG_RACAL, 4)\n#define RIG_MODEL_RA3702 RIG_MAKE_MODEL(RIG_RACAL, 5)\n\n\n/*\n * Watkins-Johnson\n */\n#define RIG_WJ 12\n#define RIG_BACKEND_WJ \"wj\"\n#define RIG_MODEL_HF1000 RIG_MAKE_MODEL(RIG_WJ, 1)\n#define RIG_MODEL_HF1000A RIG_MAKE_MODEL(RIG_WJ, 2)\n#define RIG_MODEL_WJ8711 RIG_MAKE_MODEL(RIG_WJ, 3)\n#define RIG_MODEL_WJ8888 RIG_MAKE_MODEL(RIG_WJ, 4)\n\n\n/*\n * Rohde & Schwarz--ek\n */\n#define RIG_EK 13\n#define RIG_BACKEND_EK \"ek\"\n#define RIG_MODEL_ESM500 RIG_MAKE_MODEL(RIG_EK, 1)\n#define RIG_MODEL_EK890 RIG_MAKE_MODEL(RIG_EK, 2)\n#define RIG_MODEL_EK891 RIG_MAKE_MODEL(RIG_EK, 3)\n#define RIG_MODEL_EK895 RIG_MAKE_MODEL(RIG_EK, 4)\n#define RIG_MODEL_EK070 RIG_MAKE_MODEL(RIG_EK, 5)\n\n\n/*\n * Skanti\n */\n#define RIG_SKANTI 14\n#define RIG_BACKEND_SKANTI \"skanti\"\n#define RIG_MODEL_TRP7000 RIG_MAKE_MODEL(RIG_SKANTI, 1)\n#define RIG_MODEL_TRP8000 RIG_MAKE_MODEL(RIG_SKANTI, 2)\n#define RIG_MODEL_TRP9000 RIG_MAKE_MODEL(RIG_SKANTI, 3)\n#define RIG_MODEL_TRP8255 RIG_MAKE_MODEL(RIG_SKANTI, 4)\n\n\n/*\n * WiNRADiO/LinRADiO\n */\n#define RIG_WINRADIO 15\n#define RIG_BACKEND_WINRADIO \"winradio\"\n#define RIG_MODEL_WR1000 RIG_MAKE_MODEL(RIG_WINRADIO, 1)\n#define RIG_MODEL_WR1500 RIG_MAKE_MODEL(RIG_WINRADIO, 2)\n#define RIG_MODEL_WR1550 RIG_MAKE_MODEL(RIG_WINRADIO, 3)\n#define RIG_MODEL_WR3100 RIG_MAKE_MODEL(RIG_WINRADIO, 4)\n#define RIG_MODEL_WR3150 RIG_MAKE_MODEL(RIG_WINRADIO, 5)\n#define RIG_MODEL_WR3500 RIG_MAKE_MODEL(RIG_WINRADIO, 6)\n#define RIG_MODEL_WR3700 RIG_MAKE_MODEL(RIG_WINRADIO, 7)\n#define RIG_MODEL_G303 RIG_MAKE_MODEL(RIG_WINRADIO, 8)\n#define RIG_MODEL_G313 RIG_MAKE_MODEL(RIG_WINRADIO, 9)\n#define RIG_MODEL_G305 RIG_MAKE_MODEL(RIG_WINRADIO, 10)\n#define RIG_MODEL_G315 RIG_MAKE_MODEL(RIG_WINRADIO, 11)\n\n\n/*\n * Ten Tec\n */\n#define RIG_TENTEC 16\n#define RIG_BACKEND_TENTEC \"tentec\"\n#define RIG_MODEL_TT550 RIG_MAKE_MODEL(RIG_TENTEC, 1)   /* Pegasus */\n#define RIG_MODEL_TT538 RIG_MAKE_MODEL(RIG_TENTEC, 2)   /* Jupiter */\n#define RIG_MODEL_RX320 RIG_MAKE_MODEL(RIG_TENTEC, 3)\n#define RIG_MODEL_RX340 RIG_MAKE_MODEL(RIG_TENTEC, 4)\n#define RIG_MODEL_RX350 RIG_MAKE_MODEL(RIG_TENTEC, 5)\n#define RIG_MODEL_TT526 RIG_MAKE_MODEL(RIG_TENTEC, 6)   /* 6N2 */\n#define RIG_MODEL_TT516 RIG_MAKE_MODEL(RIG_TENTEC, 7)   /* Argonaut V */\n#define RIG_MODEL_TT565 RIG_MAKE_MODEL(RIG_TENTEC, 8)   /* Orion */\n#define RIG_MODEL_TT585 RIG_MAKE_MODEL(RIG_TENTEC, 9)   /* Paragon */\n#define RIG_MODEL_TT588 RIG_MAKE_MODEL(RIG_TENTEC, 11)  /* Omni-VII */\n#define RIG_MODEL_RX331 RIG_MAKE_MODEL(RIG_TENTEC, 12)\n#define RIG_MODEL_TT599 RIG_MAKE_MODEL(RIG_TENTEC, 13)  /* Eagle */\n\n\n/*\n * Alinco\n */\n#define RIG_ALINCO 17\n#define RIG_BACKEND_ALINCO \"alinco\"\n#define RIG_MODEL_DX77 RIG_MAKE_MODEL(RIG_ALINCO, 1)\n#define RIG_MODEL_DXSR8 RIG_MAKE_MODEL(RIG_ALINCO, 2)\n\n\n/*\n * Kachina\n */\n#define RIG_KACHINA 18\n#define RIG_BACKEND_KACHINA \"kachina\"\n#define RIG_MODEL_505DSP RIG_MAKE_MODEL(RIG_KACHINA, 1)\n\n\n/*\n * Gnuradio backend\n */\n#define RIG_GNURADIO 20\n#define RIG_BACKEND_GNURADIO \"gnuradio\"\n#define RIG_MODEL_GNURADIO RIG_MAKE_MODEL(RIG_GNURADIO, 1)  /* dev model, Chirp source */\n#define RIG_MODEL_MC4020 RIG_MAKE_MODEL(RIG_GNURADIO, 2)    /* MC4020 */\n#define RIG_MODEL_GRAUDIO RIG_MAKE_MODEL(RIG_GNURADIO, 3)   /* Sound card source */\n#define RIG_MODEL_GRAUDIOIQ RIG_MAKE_MODEL(RIG_GNURADIO, 4) /* I&Q stereo sound card source */\n#define RIG_MODEL_USRP_G RIG_MAKE_MODEL(RIG_GNURADIO, 5)    /* Universal Software Radio Peripheral */\n\n\n/*\n * Microtune tuners\n */\n#define RIG_MICROTUNE 21\n#define RIG_BACKEND_MICROTUNE \"microtune\"\n#define RIG_MODEL_MICROTUNE_4937 RIG_MAKE_MODEL(RIG_MICROTUNE, 1)   /* eval board */\n#define RIG_MODEL_MICROTUNE_4702 RIG_MAKE_MODEL(RIG_MICROTUNE, 2)   /* Alan's */\n#define RIG_MODEL_MICROTUNE_4707 RIG_MAKE_MODEL(RIG_MICROTUNE, 3)\n\n\n/*\n * TAPR\n */\n#define RIG_TAPR 22\n#define RIG_BACKEND_TAPR \"tapr\"\n#define RIG_MODEL_DSP10 RIG_MAKE_MODEL(RIG_TAPR, 1)\n\n\n/*\n * Flex-radio\n */\n#define RIG_FLEXRADIO 23\n#define RIG_BACKEND_FLEXRADIO \"flexradio\"\n#define RIG_MODEL_SDR1000 RIG_MAKE_MODEL(RIG_FLEXRADIO, 1)\n#define RIG_MODEL_SDR1000RFE RIG_MAKE_MODEL(RIG_FLEXRADIO, 2)\n#define RIG_MODEL_DTTSP RIG_MAKE_MODEL(RIG_FLEXRADIO, 3)\n#define RIG_MODEL_DTTSP_UDP RIG_MAKE_MODEL(RIG_FLEXRADIO, 4)\n\n\n/*\n * VEB Funkwerk Köpenick RFT\n */\n#define RIG_RFT 24\n#define RIG_BACKEND_RFT \"rft\"\n#define RIG_MODEL_EKD500 RIG_MAKE_MODEL(RIG_RFT, 1)\n\n\n/*\n * Various kits\n */\n#define RIG_KIT 25\n#define RIG_BACKEND_KIT \"kit\"\n#define RIG_MODEL_ELEKTOR304 RIG_MAKE_MODEL(RIG_KIT, 1)\n#define RIG_MODEL_DRT1 RIG_MAKE_MODEL(RIG_KIT, 2)\n#define RIG_MODEL_DWT RIG_MAKE_MODEL(RIG_KIT, 3)\n#define RIG_MODEL_USRP0 RIG_MAKE_MODEL(RIG_KIT, 4)              /* prototype */\n#define RIG_MODEL_USRP RIG_MAKE_MODEL(RIG_KIT, 5)\n#define RIG_MODEL_DDS60 RIG_MAKE_MODEL(RIG_KIT, 6)\n#define RIG_MODEL_ELEKTOR507 RIG_MAKE_MODEL(RIG_KIT, 7)         /* Elektor SDR USB */\n#define RIG_MODEL_MINIVNA RIG_MAKE_MODEL(RIG_KIT, 8)\n#define RIG_MODEL_SI570AVRUSB RIG_MAKE_MODEL(RIG_KIT, 9)        /* SoftRock Si570 AVR */\n#define RIG_MODEL_PMSDR RIG_MAKE_MODEL(RIG_KIT, 10)\n#define RIG_MODEL_SI570PICUSB RIG_MAKE_MODEL(RIG_KIT, 11)       /* SoftRock Si570 PIC */\n#define RIG_MODEL_FIFISDR RIG_MAKE_MODEL(RIG_KIT, 12)           /* FiFi-SDR USB */\n#define RIG_MODEL_FUNCUBEDONGLE RIG_MAKE_MODEL(RIG_KIT, 13)     /* FunCUBE Dongle */\n#define RIG_MODEL_HIQSDR RIG_MAKE_MODEL(RIG_KIT, 14)            /* HiQSDR */\n#define RIG_MODEL_FASDR RIG_MAKE_MODEL(RIG_KIT,15)              /* Funkamateur Sdr */\n#define RIG_MODEL_SI570PEABERRY1 RIG_MAKE_MODEL(RIG_KIT, 16)    /* Peaberry V1 */\n#define RIG_MODEL_SI570PEABERRY2 RIG_MAKE_MODEL(RIG_KIT, 17)    /* Peaberry V2 */\n#define RIG_MODEL_FUNCUBEDONGLEPLUS RIG_MAKE_MODEL(RIG_KIT, 18) /* FunCUBE Dongle Pro+ */\n#define RIG_MODEL_RSHFIQ RIG_MAKE_MODEL(RIG_KIT, 19)            /* RS-HFIQ */\n\n\n/*\n * SW/FM/TV tuner cards supported by Video4Linux,*BSD, ..\n */\n#define RIG_TUNER 26\n#define RIG_BACKEND_TUNER \"tuner\"\n#define RIG_MODEL_V4L RIG_MAKE_MODEL(RIG_TUNER, 1)\n#define RIG_MODEL_V4L2 RIG_MAKE_MODEL(RIG_TUNER, 2)\n\n\n/*\n * Rohde & Schwarz--rs\n */\n#define RIG_RS 27\n#define RIG_BACKEND_RS \"rs\"\n#define RIG_MODEL_ESMC RIG_MAKE_MODEL(RIG_RS, 1)\n#define RIG_MODEL_EB200 RIG_MAKE_MODEL(RIG_RS, 2)\n#define RIG_MODEL_XK2100 RIG_MAKE_MODEL(RIG_RS, 3)\n\n\n/*\n * Phillips/Simoco PRM80\n */\n#define RIG_PRM80 28\n#define RIG_BACKEND_PRM80 \"prm80\"\n#define RIG_MODEL_PRM8060 RIG_MAKE_MODEL(RIG_PRM80, 1)\n#define RIG_MODEL_PRM8070 RIG_MAKE_MODEL(RIG_PRM80, 2)\n\n\n/*\n * ADAT by HB9CBU\n *\n * ADDED: frgo (DG1SBG), 2012-01-01\n */\n#define RIG_ADAT 29\n#define RIG_BACKEND_ADAT \"adat\"\n#define RIG_MODEL_ADT_200A RIG_MAKE_MODEL(RIG_ADAT, 1)\n\n\n/*\n * ICOM Marine\n */\n#define RIG_ICMARINE 30\n#define RIG_BACKEND_ICMARINE \"icmarine\"\n#define RIG_MODEL_IC_M700PRO RIG_MAKE_MODEL(RIG_ICMARINE, 1)\n#define RIG_MODEL_IC_M802 RIG_MAKE_MODEL(RIG_ICMARINE, 2)\n#define RIG_MODEL_IC_M710 RIG_MAKE_MODEL(RIG_ICMARINE, 3)\n#define RIG_MODEL_IC_M803 RIG_MAKE_MODEL(RIG_ICMARINE, 4)\n\n\n/*\n * Dorji transceiver modules\n */\n#define RIG_DORJI 31\n#define RIG_BACKEND_DORJI \"dorji\"\n#define RIG_MODEL_DORJI_DRA818V RIG_MAKE_MODEL(RIG_DORJI, 1)\n#define RIG_MODEL_DORJI_DRA818U RIG_MAKE_MODEL(RIG_DORJI, 2)\n\n/*\n * Barrett\n */\n#define RIG_BARRETT 32\n#define RIG_BACKEND_BARRETT \"barrett\"\n#define RIG_MODEL_BARRETT_2050 RIG_MAKE_MODEL(RIG_BARRETT, 1)\n#define RIG_MODEL_BARRETT_950 RIG_MAKE_MODEL(RIG_BARRETT, 2)\n#define RIG_MODEL_BARRETT_4050 RIG_MAKE_MODEL(RIG_BARRETT, 3)\n\n/*\n * Elad\n */\n#define RIG_ELAD 33\n#define RIG_BACKEND_ELAD \"elad\"\n#define RIG_MODEL_ELAD_FDM_DUO RIG_MAKE_MODEL(RIG_ELAD, 1)\n\n/*\n * CODAN\n */\n#define RIG_CODAN 34\n#define RIG_BACKEND_CODAN \"codan\"\n#define RIG_MODEL_CODAN_ENVOY RIG_MAKE_MODEL(RIG_CODAN, 1)\n#define RIG_MODEL_CODAN_NGT RIG_MAKE_MODEL(RIG_CODAN, 2)\n\n/*\n * Gomspace\n */\n#define RIG_GOMSPACE 35\n#define RIG_BACKEND_GOMSPACE \"gomspace\"\n#define RIG_MODEL_GS100 RIG_MAKE_MODEL(RIG_GOMSPACE, 1)\n//! @endcond\n\n/*\n * TODO:\n    RIG_MODEL_KWZ30,    KNEISNER +DOERING\n    RIG_MODEL_E1800,    DASA-Telefunken\n    etc.\n*/\n\n\n/*! \\typedef typedef int rig_model_t\n    \\brief Convenience type definition for rig model.\n*/\ntypedef uint32_t rig_model_t;\n\n\n/*\n * struct rig_backend_list {\n *      rig_model_t model;\n *      const char *backend;\n * } rig_backend_list[] = RIG_LIST;\n *\n * TODO:\n *\n    { RIG_RADIOSHACK, RIG_BACKEND_RADIOSHACK }, \\\n */\n\n#endif /* _RIGLIST_H */\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/include/hamlib/rotator.h",
    "content": "/*\n *  Hamlib Interface - Rotator API header\n *  Copyright (c) 2000-2005 by Stephane Fillod\n *\n *\n *   This library is free software; you can redistribute it and/or\n *   modify it under the terms of the GNU Lesser General Public\n *   License as published by the Free Software Foundation; either\n *   version 2.1 of the License, or (at your option) any later version.\n *\n *   This library is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n *   Lesser General Public License for more details.\n *\n *   You should have received a copy of the GNU Lesser General Public\n *   License along with this library; if not, write to the Free Software\n *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n *\n */\n\n#ifndef _ROTATOR_H\n#define _ROTATOR_H 1\n\n#include <hamlib/rig.h>\n#include <hamlib/rotlist.h>\n\n/**\n * \\addtogroup rotator\n * @{\n */\n\n/**\n * \\file rotator.h\n * \\brief Hamlib rotator data structures.\n *\n * This file contains the data structures and declarations for the Hamlib\n * rotator Application Programming Interface (API).\n *\n * See the rotator.c file for more details on the rotator API functions.\n */\n\n\n\n__BEGIN_DECLS\n\n/* Forward struct references */\n\nstruct rot;\nstruct rot_state;\n\n\n/**\n * \\typedef typedef struct s_rot ROT\n * \\brief Main rotator handle type definition.\n *\n * The #ROT handle is returned by rot_init() and is passed as a parameter to\n * every rotator specific API call.\n *\n * rot_cleanup() must be called when this handle is no longer needed.\n */\ntypedef struct s_rot ROT;\n\n\n/**\n * \\typedef typedef float elevation_t\n * \\brief Type definition for elevation.\n *\n * The \\a elevation_t type is used as parameter for the rot_set_position() and\n * rot_get_position() functions.\n *\n * Unless specified otherwise, the unit of \\a elevation_t is decimal degrees.\n */\ntypedef float elevation_t;\n\n\n/**\n * \\typedef typedef float azimuth_t\n * \\brief Type definition for azimuth.\n *\n * The \\a azimuth_t type is used as parameter for the rot_set_position() and\n * rot_get_position() functions.\n *\n * Unless specified otherwise, the unit of \\a azimuth_t is decimal degrees.\n */\ntypedef float azimuth_t;\n\n\n/**\n * \\brief The token in the netrotctl protocol for returning an error condition code.\n */\n#define NETROTCTL_RET \"RPRT \"\n\n\n/**\n * \\def ROT_RESET_ALL\n * \\brief A macro that returns the flag for the \\b reset operation.\n *\n * \\sa rot_reset(), rot_reset_t\n */\n#define ROT_RESET_ALL   1\n\n\n/**\n * \\typedef typedef int rot_reset_t\n * \\brief Type definition for rotator reset.\n *\n * The \\a rot_reset_t type is used as parameter for the rot_reset() API\n * function.\n */\ntypedef int rot_reset_t;\n\n\n/**\n * \\brief Rotator type flags for bitmasks.\n */\ntypedef enum {\n    ROT_FLAG_AZIMUTH =      (1 << 1),   /*!< Azimuth */\n    ROT_FLAG_ELEVATION =    (1 << 2)    /*!< Elevation */\n} rot_type_t;\n\n//! @cond Doxygen_Suppress\n/* So far only used in ests/dumpcaps_rot.c. */\n#define ROT_TYPE_MASK (ROT_FLAG_AZIMUTH|ROT_FLAG_ELEVATION)\n//! @endcond\n\n/**\n * \\def ROT_TYPE_OTHER\n * \\brief Other type of rotator.\n * \\def ROT_TYPE_AZIMUTH\n * \\brief Azimuth only rotator.\n * \\def ROT_TYPE_ELEVATION\n * \\brief Elevation only rotator.\n * \\def ROT_TYPE_AZEL\n * \\brief Combination azimuth/elevation rotator.\n */\n#define ROT_TYPE_OTHER      0\n#define ROT_TYPE_AZIMUTH    ROT_FLAG_AZIMUTH\n#define ROT_TYPE_ELEVATION  ROT_FLAG_ELEVATION\n#define ROT_TYPE_AZEL       (ROT_FLAG_AZIMUTH|ROT_FLAG_ELEVATION)\n\n\n/**\n * \\def ROT_MOVE_UP\n * \\brief A macro that returns the flag for the \\b UP direction.\n *\n * This macro defines the value of the \\b UP direction which can be\n * used with the rot_move() function.\n *\n * \\sa rot_move(), ROT_MOVE_DOWN, ROT_MOVE_LEFT, ROT_MOVE_CCW,\n * ROT_MOVE_RIGHT, ROT_MOVE_CW\n */\n#define ROT_MOVE_UP         (1<<1)\n\n/**\n * \\def ROT_MOVE_DOWN\n * \\brief A macro that returns the flag for the \\b DOWN direction.\n *\n * This macro defines the value of the \\b DOWN direction which can be\n * used with the rot_move() function.\n *\n * \\sa rot_move(), ROT_MOVE_UP, ROT_MOVE_LEFT, ROT_MOVE_CCW, ROT_MOVE_RIGHT,\n * ROT_MOVE_CW\n*/\n#define ROT_MOVE_DOWN       (1<<2)\n\n/**\n * \\def ROT_MOVE_LEFT\n * \\brief A macro that returns the flag for the \\b LEFT direction.\n *\n * This macro defines the value of the \\b LEFT direction which can be\n * used with the rot_move function.\n *\n * \\sa rot_move(), ROT_MOVE_UP, ROT_MOVE_DOWN, ROT_MOVE_CCW, ROT_MOVE_RIGHT,\n * ROT_MOVE_CW\n */\n#define ROT_MOVE_LEFT       (1<<3)\n\n/**\n * \\def ROT_MOVE_CCW\n * \\brief A macro that returns the flag for the \\b counterclockwise direction.\n *\n * This macro defines the value of the \\b counterclockwise direction which\n * can be used with the rot_move() function.  This value is equivalent to\n * ROT_MOVE_LEFT.\n *\n * \\sa rot_move(), ROT_MOVE_UP, ROT_MOVE_DOWN, ROT_MOVE_LEFT, ROT_MOVE_RIGHT,\n * ROT_MOVE_CW\n */\n#define ROT_MOVE_CCW        ROT_MOVE_LEFT\n\n/**\n * \\def ROT_MOVE_RIGHT\n * \\brief A macro that returns the flag for the \\b RIGHT direction.\n *\n * This macro defines the value of the \\b RIGHT direction which can be used\n * with the rot_move() function.\n *\n * \\sa rot_move(), ROT_MOVE_UP, ROT_MOVE_DOWN, ROT_MOVE_LEFT, ROT_MOVE_CCW,\n * ROT_MOVE_CW\n */\n#define ROT_MOVE_RIGHT      (1<<4)\n\n/**\n * \\def ROT_MOVE_CW\n * \\brief A macro that returns the flag for the \\b clockwise direction.\n *\n * This macro defines the value of the \\b clockwise direction which can be\n * used with the rot_move() function. This value is equivalent to\n * ROT_MOVE_RIGHT.\n *\n * \\sa rot_move(), ROT_MOVE_UP, ROT_MOVE_DOWN, ROT_MOVE_LEFT, ROT_MOVE_CCW,\n * ROT_MOVE_RIGHT\n */\n#define ROT_MOVE_CW         ROT_MOVE_RIGHT\n\n\n/**\n * \\brief Rotator status flags\n */\ntypedef enum {\n    ROT_STATUS_NONE =              0,        /*!< '' -- No status. */\n    ROT_STATUS_BUSY =              (1 << 0), /*!< Rotator is busy, not accepting commands. */\n    ROT_STATUS_MOVING =            (1 << 1), /*!< Rotator is currently moving (direction type not specified). */\n    ROT_STATUS_MOVING_AZ =         (1 << 2), /*!< Azimuth rotator is currently moving (direction not specified). */\n    ROT_STATUS_MOVING_LEFT =       (1 << 3), /*!< Azimuth rotator is currently moving left. */\n    ROT_STATUS_MOVING_RIGHT =      (1 << 4), /*!< Azimuth rotator is currently moving right. */\n    ROT_STATUS_MOVING_EL =         (1 << 5), /*!< Elevation rotator is currently moving (direction not specified). */\n    ROT_STATUS_MOVING_UP =         (1 << 6), /*!< Elevation rotator is currently moving up. */\n    ROT_STATUS_MOVING_DOWN =       (1 << 7), /*!< Elevation rotator is currently moving down. */\n    ROT_STATUS_LIMIT_UP =          (1 << 8), /*!< The elevation rotator has reached its limit to move up. */\n    ROT_STATUS_LIMIT_DOWN =        (1 << 9), /*!< The elevation rotator has reached its limit to move down.*/\n    ROT_STATUS_LIMIT_LEFT =        (1 << 10), /*!< The azimuth rotator has reached its limit to move left (CCW). */\n    ROT_STATUS_LIMIT_RIGHT =       (1 << 11), /*!< The azimuth rotator has reached its limit to move right (CW). */\n    ROT_STATUS_OVERLAP_UP =        (1 << 12), /*!< The elevation rotator has rotated up past 360 degrees. */\n    ROT_STATUS_OVERLAP_DOWN =      (1 << 13), /*!< The elevation rotator has rotated down past 0 degrees. */\n    ROT_STATUS_OVERLAP_LEFT =      (1 << 14), /*!< The azimuth rotator has rotated left (CCW) past 0 degrees. */\n    ROT_STATUS_OVERLAP_RIGHT =     (1 << 16), /*!< The azimuth rotator has rotated right (CW) past 360 degrees. */\n} rot_status_t;\n\n//! @cond Doxygen_Suppress\n/* So far only used in tests/sprintflst.c. */\n#define ROT_STATUS_N(n)        (1u<<(n))\n//! @endcond\n\n/**\n * \\brief Macro for not changing the rotator speed with move() function.\n */\n#define ROT_SPEED_NOCHANGE (-1)\n\n\n/**\n * \\brief Rotator Level Settings.\n *\n * Various operating levels supported by a rotator.\n *\n * \\c STRING used in the \\c rotctl and \\c rotctld utilities.\n *\n * \\sa rot_parse_level(), rot_strlevel()\n */\nenum rot_level_e {\n    ROT_LEVEL_NONE =        0,              /*!< '' -- No Level. */\n    ROT_LEVEL_SPEED =       (1 << 0),       /*!< \\c SPEED -- Rotation speed, arg int (default range 1-100 if not specified). */\n    ROT_LEVEL_63 =          CONSTANT_64BIT_FLAG(63),      /*!< **Future use**, last level. */\n};\n\n\n//! @cond Doxygen_Suppress\n#define ROT_LEVEL_FLOAT_LIST (0)\n\n#define ROT_LEVEL_READONLY_LIST (0)\n\n#define ROT_LEVEL_IS_FLOAT(l) ((l)&ROT_LEVEL_FLOAT_LIST)\n#define ROT_LEVEL_SET(l) ((l)&~ROT_LEVEL_READONLY_LIST)\n//! @endcond\n\n\n/** @cond Doxygen_Suppress\n * FIXME: The following needs more explanation about how STRING relates\n * to this macro.\n * @endcond\n */\n/**\n * \\brief Rotator Parameters\n *\n * Parameters are settings that are not related to core rotator functionality,\n * i.e. antenna rotation.\n *\n * \\c STRING used in the \\c rotctl and \\c rotctld utilities.\n *\n * \\sa rot_parse_parm(), rot_strparm()\n */\nenum rot_parm_e {\n    ROT_PARM_NONE =         0,          /*!< '' -- No Parm */\n};\n\n\n//! @cond Doxygen_Suppress\n#define ROT_PARM_FLOAT_LIST (0)\n#define ROT_PARM_READONLY_LIST (0)\n\n#define ROT_PARM_IS_FLOAT(l) ((l)&ROT_PARM_FLOAT_LIST)\n#define ROT_PARM_SET(l) ((l)&~ROT_PARM_READONLY_LIST)\n//! @endcond\n\n\n/** @cond Doxygen_Suppress\n * FIXME: The following needs more explanation about how STRING relates\n * to these macros.\n * @endcond\n */\n/**\n * \\brief Rotator Function Settings.\n *\n * Various operating functions supported by a rotator.\n *\n * \\c STRING used in the \\c rotctl and \\c rotctld utilities.\n *\n * \\sa rot_parse_func(), rot_strfunc()\n */\n#define ROT_FUNC_NONE       0                          /*!< '' -- No Function */\n#ifndef SWIGLUAHIDE\n/* Hide the top 32 bits from the old Lua binding as they can't be represented */\n#define ROT_FUNC_BIT63      CONSTANT_64BIT_FLAG (63)   /*!< **Future use**, ROT_FUNC items. */\n/* 63 is this highest bit number that can be used */\n#endif\n\n\n/* Basic rot type, can store some useful info about different rotators. Each\n * lib must be able to populate this structure, so we can make useful\n * enquiries about capabilities.\n */\n\n/**\n * \\struct rot_caps\n * \\brief Rotator capability data structure.\n *\n * The main idea of this structure is that it will be defined by the backend\n * rotator driver, and will remain read-only for the application.  Fields that\n * need to be modifiable by the application are copied into the rot_state\n * structure, which is the private memory area of the #ROT instance.\n *\n * This way, you can have several rotators running within the same\n * application, sharing the rot_caps structure of the backend, while keeping\n * their own customized data.\n *\n * \\b Note: Don't move fields around and only add new fields at the end of the\n * rot_caps structure.  Shared libraries and DLLs depend on a constant\n * structure to maintain compatibility.\n */\nstruct rot_caps {\n    rot_model_t rot_model;                      /*!< Rotator model as defined in rotlist.h. */\n    const char *model_name;                     /*!< Model name, e.g. TT-360. */\n    const char *mfg_name;                       /*!< Manufacturer, e.g. Tower Torquer. */\n    const char *version;                        /*!< Driver version, typically in YYYYMMDD.x format. */\n    const char *copyright;                      /*!< Copyright info (should be LGPL). */\n    enum rig_status_e status;                   /*!< Driver status. */\n\n    int rot_type;                               /*!< Rotator type. */\n    enum rig_port_e port_type;                  /*!< Type of communication port (serial, ethernet, etc.). */\n\n    int serial_rate_min;                        /*!< Minimal serial speed. */\n    int serial_rate_max;                        /*!< Maximal serial speed. */\n    int serial_data_bits;                       /*!< Number of data bits. */\n    int serial_stop_bits;                       /*!< Number of stop bits. */\n    enum serial_parity_e serial_parity;         /*!< Parity. */\n    enum serial_handshake_e serial_handshake;   /*!< Handshake. */\n\n    int write_delay;                            /*!< Write delay. */\n    int post_write_delay;                       /*!< Post-write delay. */\n    int timeout;                                /*!< Timeout. */\n    int retry;                                  /*!< Number of retries if command fails. */\n\n    setting_t has_get_func;     /*!< List of get functions. */\n    setting_t has_set_func;     /*!< List of set functions. */\n    setting_t has_get_level;    /*!< List of get levels. */\n    setting_t has_set_level;    /*!< List of set levels. */\n    setting_t has_get_parm;     /*!< List of get parameters. */\n    setting_t has_set_parm;     /*!< List of set parameters. */\n\n    rot_status_t has_status;    /*!< Supported status flags. */\n\n    gran_t level_gran[RIG_SETTING_MAX]; /*!< level granularity (i.e. steps). */\n    gran_t parm_gran[RIG_SETTING_MAX];  /*!< parm granularity (i.e. steps). */\n\n    const struct confparams *extparms;  /*!< Extension parameters list, \\sa rot_ext.c. */\n    const struct confparams *extlevels; /*!< Extension levels list, \\sa rot_ext.c. */\n    const struct confparams *extfuncs;  /*!< Extension functions list, \\sa rot_ext.c. */\n    int *ext_tokens;                    /*!< Extension token list. */\n\n    /*\n     * Movement range, az is relative to North\n     * negative values allowed for overlap\n     */\n    azimuth_t min_az;                           /*!< Lower limit for azimuth (relative to North). */\n    azimuth_t max_az;                           /*!< Upper limit for azimuth (relative to North). */\n    elevation_t\n    min_el;                                     /*!< Lower limit for elevation. */\n    elevation_t\n    max_el;                                     /*!< Upper limit for elevation. */\n\n\n    const struct confparams *cfgparams;         /*!< Configuration parameters. */\n    const rig_ptr_t priv;                       /*!< Private data. */\n\n    /*\n     * Rot Admin API\n     *\n     */\n\n    int (*rot_init)(ROT *rot);     /*!< Pointer to backend implementation of ::rot_init(). */\n    int (*rot_cleanup)(ROT *rot);  /*!< Pointer to backend implementation of ::rot_cleanup(). */\n    int (*rot_open)(ROT *rot);     /*!< Pointer to backend implementation of ::rot_open(). */\n    int (*rot_close)(ROT *rot);    /*!< Pointer to backend implementation of ::rot_close(). */\n\n    int (*set_conf)(ROT *rot, token_t token, const char *val); /*!< Pointer to backend implementation of ::rot_set_conf(). */\n    int (*get_conf)(ROT *rot, token_t token, char *val);       /*!< Pointer to backend implementation of ::rot_get_conf(). */\n\n    /*\n     *  General API commands, from most primitive to least.. :()\n     *  List Set/Get functions pairs\n     */\n\n    int (*set_position)(ROT *rot, azimuth_t azimuth, elevation_t elevation);   /*!< Pointer to backend implementation of ::rot_set_position(). */\n    int (*get_position)(ROT *rot, azimuth_t *azimuth, elevation_t *elevation); /*!< Pointer to backend implementation of ::rot_get_position(). */\n\n    int (*stop)(ROT *rot); /*!< Pointer to backend implementation of ::rot_stop(). */\n    int (*park)(ROT *rot); /*!< Pointer to backend implementation of ::rot_park(). */\n    int (*reset)(ROT *rot, rot_reset_t reset);         /*!< Pointer to backend implementation of ::rot_reset(). */\n    int (*move)(ROT *rot, int direction, int speed);   /*!< Pointer to backend implementation of ::rot_move(). */\n\n    /* get firmware info, etc. */\n    const char * (*get_info)(ROT *rot);    /*!< Pointer to backend implementation of ::rot_get_info(). */\n\n    int (*set_level)(ROT *rot, setting_t level, value_t val);  /*!< Pointer to backend implementation of ::rot_set_level(). */\n    int (*get_level)(ROT *rot, setting_t level, value_t *val); /*!< Pointer to backend implementation of ::rot_get_level(). */\n\n    int (*set_func)(ROT *rot, setting_t func, int status);     /*!< Pointer to backend implementation of ::rot_set_func(). */\n    int (*get_func)(ROT *rot, setting_t func, int *status);    /*!< Pointer to backend implementation of ::rot_get_func(). */\n\n    int (*set_parm)(ROT *rot, setting_t parm, value_t val);    /*!< Pointer to backend implementation of ::rot_set_parm(). */\n    int (*get_parm)(ROT *rot, setting_t parm, value_t *val);   /*!< Pointer to backend implementation of ::rot_get_parm(). */\n\n    int (*set_ext_level)(ROT *rot, token_t token, value_t val);    /*!< Pointer to backend implementation of ::rot_set_ext_level(). */\n    int (*get_ext_level)(ROT *rot, token_t token, value_t *val);   /*!< Pointer to backend implementation of ::rot_get_ext_level(). */\n\n    int (*set_ext_func)(ROT *rot, token_t token, int status);  /*!< Pointer to backend implementation of ::rot_set_ext_func(). */\n    int (*get_ext_func)(ROT *rot, token_t token, int *status); /*!< Pointer to backend implementation of ::rot_get_ext_func(). */\n\n    int (*set_ext_parm)(ROT *rot, token_t token, value_t val);     /*!< Pointer to backend implementation of ::rot_set_ext_parm(). */\n    int (*get_ext_parm)(ROT *rot, token_t token, value_t *val);    /*!< Pointer to backend implementation of ::rot_get_ext_parm(). */\n\n    int (*get_status)(ROT *rot, rot_status_t *status); /*!< Pointer to backend implementation of ::rot_get_status(). */\n\n    const char *macro_name;                    /*!< Rotator model macro name. */\n    int (*get_conf2)(ROT *rot, token_t token, char *val, int val_len);       /*!< Pointer to backend implementation of ::rot_get_conf2(). */\n};\n//! @cond Doxygen_Suppress\n#define ROT_MODEL(arg) .rot_model=arg,.macro_name=#arg\n//! @endcond\n\n\n/**\n * \\struct rot_state\n * \\brief Rotator state structure\n *\n * This structure contains live data, as well as a copy of capability fields\n * that may be updated, i.e. customized while the #ROT handle is instantiated.\n *\n * It is fine to move fields around, as this kind of structure should not be\n * initialized like rot_caps are.\n */\nstruct rot_state {\n    /*\n     * overridable fields\n     */\n    azimuth_t min_az;       /*!< Lower limit for azimuth (overridable). */\n    azimuth_t max_az;       /*!< Upper limit for azimuth (overridable). */\n    elevation_t min_el;     /*!< Lower limit for elevation (overridable). */\n    elevation_t max_el;     /*!< Upper limit for elevation (overridable). */\n    int south_zero;         /*!< South is zero degrees. */\n    azimuth_t az_offset;    /*!< Offset to be applied to azimuth. */\n    elevation_t el_offset;  /*!< Offset to be applied to elevation. */\n\n    setting_t has_get_func;     /*!< List of get functions. */\n    setting_t has_set_func;     /*!< List of set functions. */\n    setting_t has_get_level;    /*!< List of get levels. */\n    setting_t has_set_level;    /*!< List of set levels. */\n    setting_t has_get_parm;     /*!< List of get parameters. */\n    setting_t has_set_parm;     /*!< List of set parameters. */\n\n    rot_status_t has_status;    /*!< Supported status flags. */\n\n    gran_t level_gran[RIG_SETTING_MAX]; /*!< Level granularity. */\n    gran_t parm_gran[RIG_SETTING_MAX];  /*!< Parameter granularity. */\n\n    /*\n     * non overridable fields, internal use\n     */\n    hamlib_port_t_deprecated rotport_deprecated;  /*!< Rotator port (internal use). Deprecated */\n    hamlib_port_t_deprecated rotport2_deprecated;  /*!< 2nd Rotator port (internal use). Deprecated */\n\n    int comm_state;         /*!< Comm port state, i.e. opened or closed. */\n    rig_ptr_t priv;         /*!< Pointer to private rotator state data. */\n    rig_ptr_t obj;          /*!< Internal use by hamlib++ for event handling. */\n\n    int current_speed;      /*!< Current speed 1-100, to be used when no change to speed is requested. */\n    hamlib_port_t rotport;  /*!< Rotator port (internal use). */\n    hamlib_port_t rotport2;  /*!< 2nd Rotator port (internal use). */\n};\n\n\n/**\n * \\struct s_rot\n * \\brief Master rotator structure.\n *\n * This is the master data structure acting as the #ROT handle for the\n * controlled rotator.  A pointer to this structure is returned by the\n * rot_init() API function and is passed as a parameter to every rotator\n * specific API call.\n *\n * \\sa rot_init(), rot_caps, rot_state\n */\nstruct s_rot {\n    struct rot_caps *caps;      /*!< Rotator caps. */\n    struct rot_state state;     /*!< Rotator state. */\n};\n\n\n//! @cond Doxygen_Suppress\n/* --------------- API function prototypes -----------------*/\n\nextern HAMLIB_EXPORT(ROT *)\nrot_init HAMLIB_PARAMS((rot_model_t rot_model));\n\nextern HAMLIB_EXPORT(int)\nrot_open HAMLIB_PARAMS((ROT *rot));\n\nextern HAMLIB_EXPORT(int)\nrot_close HAMLIB_PARAMS((ROT *rot));\n\nextern HAMLIB_EXPORT(int)\nrot_cleanup HAMLIB_PARAMS((ROT *rot));\n\nextern HAMLIB_EXPORT(int)\nrot_set_conf HAMLIB_PARAMS((ROT *rot,\n                            token_t token,\n                            const char *val));\nextern HAMLIB_EXPORT(int)\nrot_get_conf HAMLIB_PARAMS((ROT *rot,\n                            token_t token,\n                            char *val));\n\nextern HAMLIB_EXPORT(int)\nrot_get_conf2 HAMLIB_PARAMS((ROT *rot,\n                            token_t token,\n                            char *val,\n                            int val_len));\n\n/*\n *  General API commands, from most primitive to least.. )\n *  List Set/Get functions pairs\n */\nextern HAMLIB_EXPORT(int)\nrot_set_position HAMLIB_PARAMS((ROT *rot,\n                                azimuth_t azimuth,\n                                elevation_t elevation));\nextern HAMLIB_EXPORT(int)\nrot_get_position HAMLIB_PARAMS((ROT *rot,\n                                azimuth_t *azimuth,\n                                elevation_t *elevation));\n\nextern HAMLIB_EXPORT(int)\nrot_stop HAMLIB_PARAMS((ROT *rot));\n\nextern HAMLIB_EXPORT(int)\nrot_park HAMLIB_PARAMS((ROT *rot));\n\nextern HAMLIB_EXPORT(int)\nrot_reset HAMLIB_PARAMS((ROT *rot,\n                         rot_reset_t reset));\n\nextern HAMLIB_EXPORT(int)\nrot_move HAMLIB_PARAMS((ROT *rot,\n                        int direction,\n                        int speed));\n\nextern HAMLIB_EXPORT(setting_t)\nrot_has_get_level HAMLIB_PARAMS((ROT *rot,\n                                 setting_t level));\nextern HAMLIB_EXPORT(setting_t)\nrot_has_set_level HAMLIB_PARAMS((ROT *rot,\n                                 setting_t level));\n\nextern HAMLIB_EXPORT(setting_t)\nrot_has_get_parm HAMLIB_PARAMS((ROT *rot,\n                                setting_t parm));\nextern HAMLIB_EXPORT(setting_t)\nrot_has_set_parm HAMLIB_PARAMS((ROT *rot,\n                                setting_t parm));\n\nextern HAMLIB_EXPORT(setting_t)\nrot_has_get_func HAMLIB_PARAMS((ROT *rot,\n                                setting_t func));\nextern HAMLIB_EXPORT(setting_t)\nrot_has_set_func HAMLIB_PARAMS((ROT *rot,\n                                setting_t func));\n\nextern HAMLIB_EXPORT(int)\nrot_set_func HAMLIB_PARAMS((ROT *rot,\n                            setting_t func,\n                            int status));\nextern HAMLIB_EXPORT(int)\nrot_get_func HAMLIB_PARAMS((ROT *rot,\n                            setting_t func,\n                            int *status));\n\nextern HAMLIB_EXPORT(int)\nrot_set_level HAMLIB_PARAMS((ROT *rig,\n                             setting_t level,\n                             value_t val));\nextern HAMLIB_EXPORT(int)\nrot_get_level HAMLIB_PARAMS((ROT *rig,\n                             setting_t level,\n                             value_t *val));\n\nextern HAMLIB_EXPORT(int)\nrot_set_parm HAMLIB_PARAMS((ROT *rig,\n                            setting_t parm,\n                            value_t val));\nextern HAMLIB_EXPORT(int)\nrot_get_parm HAMLIB_PARAMS((ROT *rig,\n                            setting_t parm,\n                            value_t *val));\n\nextern HAMLIB_EXPORT(int)\nrot_set_ext_level HAMLIB_PARAMS((ROT *rig,\n                                 token_t token,\n                                 value_t val));\nextern HAMLIB_EXPORT(int)\nrot_get_ext_level HAMLIB_PARAMS((ROT *rig,\n                                 token_t token,\n                                 value_t *val));\n\nextern HAMLIB_EXPORT(int)\nrot_set_ext_func HAMLIB_PARAMS((ROT *rig,\n                                 token_t token,\n                                 int status));\nextern HAMLIB_EXPORT(int)\nrot_get_ext_func HAMLIB_PARAMS((ROT *rig,\n                                 token_t token,\n                                 int *status));\n\nextern HAMLIB_EXPORT(int)\nrot_set_ext_parm HAMLIB_PARAMS((ROT *rig,\n                                token_t token,\n                                value_t val));\nextern HAMLIB_EXPORT(int)\nrot_get_ext_parm HAMLIB_PARAMS((ROT *rig,\n                                token_t token,\n                                value_t *val));\n\nextern HAMLIB_EXPORT(const char *)\nrot_get_info HAMLIB_PARAMS((ROT *rot));\n\nextern HAMLIB_EXPORT(int)\nrot_get_status HAMLIB_PARAMS((ROT *rot,\n        rot_status_t *status));\n\nextern HAMLIB_EXPORT(int)\nrot_register HAMLIB_PARAMS((const struct rot_caps *caps));\n\nextern HAMLIB_EXPORT(int)\nrot_unregister HAMLIB_PARAMS((rot_model_t rot_model));\n\nextern HAMLIB_EXPORT(int)\nrot_list_foreach HAMLIB_PARAMS((int (*cfunc)(const struct rot_caps *,\n                                             rig_ptr_t),\n                                rig_ptr_t data));\n\nextern HAMLIB_EXPORT(int)\nrot_load_backend HAMLIB_PARAMS((const char *be_name));\n\nextern HAMLIB_EXPORT(int)\nrot_check_backend HAMLIB_PARAMS((rot_model_t rot_model));\n\nextern HAMLIB_EXPORT(int)\nrot_load_all_backends HAMLIB_PARAMS((void));\n\nextern HAMLIB_EXPORT(rot_model_t)\nrot_probe_all HAMLIB_PARAMS((hamlib_port_t *p));\n\nextern HAMLIB_EXPORT(int)\nrot_token_foreach HAMLIB_PARAMS((ROT *rot,\n                                 int (*cfunc)(const struct confparams *,\n                                              rig_ptr_t),\n                                 rig_ptr_t data));\n\nextern HAMLIB_EXPORT(const struct confparams *)\nrot_confparam_lookup HAMLIB_PARAMS((ROT *rot,\n                                   const char *name));\n\nextern HAMLIB_EXPORT(token_t)\nrot_token_lookup HAMLIB_PARAMS((ROT *rot,\n                                const char *name));\n\nextern HAMLIB_EXPORT(int)\nrot_ext_func_foreach HAMLIB_PARAMS((ROT *rot,\n                                     int (*cfunc)(ROT *,\n                                                  const struct confparams *,\n                                                  rig_ptr_t),\n                                     rig_ptr_t data));\nextern HAMLIB_EXPORT(int)\nrot_ext_level_foreach HAMLIB_PARAMS((ROT *rot,\n                                     int (*cfunc)(ROT *,\n                                                  const struct confparams *,\n                                                  rig_ptr_t),\n                                     rig_ptr_t data));\nextern HAMLIB_EXPORT(int)\nrot_ext_parm_foreach HAMLIB_PARAMS((ROT *rot,\n                                    int (*cfunc)(ROT *,\n                                                 const struct confparams *,\n                                                 rig_ptr_t),\n                                    rig_ptr_t data));\n\nextern HAMLIB_EXPORT(const struct confparams *)\nrot_ext_lookup HAMLIB_PARAMS((ROT *rot,\n                              const char *name));\n\nextern HAMLIB_EXPORT(const struct confparams *)\nrot_ext_lookup_tok HAMLIB_PARAMS((ROT *rot,\n                                  token_t token));\nextern HAMLIB_EXPORT(token_t)\nrot_ext_token_lookup HAMLIB_PARAMS((ROT *rot,\n                                    const char *name));\n\nextern HAMLIB_EXPORT(const struct rot_caps *)\nrot_get_caps HAMLIB_PARAMS((rot_model_t rot_model));\n\nextern HAMLIB_EXPORT(int)\nqrb HAMLIB_PARAMS((double lon1,\n                   double lat1,\n                   double lon2,\n                   double lat2,\n                   double *distance,\n                   double *azimuth));\n\nextern HAMLIB_EXPORT(double)\ndistance_long_path HAMLIB_PARAMS((double distance));\n\nextern HAMLIB_EXPORT(double)\nazimuth_long_path HAMLIB_PARAMS((double azimuth));\n\n#if 0\nextern HAMLIB_EXPORT(int)\nlonglat2locator HAMLIB_PARAMS((double longitude,\n                               double latitude,\n                               char *locator_res,\n                               int pair_count));\n\nextern HAMLIB_EXPORT(int)\nlocator2longlat HAMLIB_PARAMS((double *longitude,\n                               double *latitude,\n                               const char *locator));\n#endif\n\nextern HAMLIB_EXPORT(double)\ndms2dec HAMLIB_PARAMS((int degrees,\n                       int minutes,\n                       double seconds,\n                       int sw));\n\nextern HAMLIB_EXPORT(int)\ndec2dms HAMLIB_PARAMS((double dec,\n                       int *degrees,\n                       int *minutes,\n                       double *seconds,\n                       int *sw));\n\nextern HAMLIB_EXPORT(int)\ndec2dmmm HAMLIB_PARAMS((double dec,\n                        int *degrees,\n                        double *minutes,\n                        int *sw));\n\nextern HAMLIB_EXPORT(double)\ndmmm2dec HAMLIB_PARAMS((int degrees,\n                        double minutes,\n                        double seconds,\n                        int sw));\n\nextern HAMLIB_EXPORT(setting_t) rot_parse_func(const char *s);\nextern HAMLIB_EXPORT(setting_t) rot_parse_level(const char *s);\nextern HAMLIB_EXPORT(setting_t) rot_parse_parm(const char *s);\nextern HAMLIB_EXPORT(const char *) rot_strfunc(setting_t);\nextern HAMLIB_EXPORT(const char *) rot_strlevel(setting_t);\nextern HAMLIB_EXPORT(const char *) rot_strparm(setting_t);\nextern HAMLIB_EXPORT(const char *) rot_strstatus(rot_status_t);\n\n//! @endcond\n\n/**\n * \\def rot_debug\n * \\brief Convenience macro for generating debugging messages.\n *\n * This is an alias of the rig_debug() function call and is used in the same\n * manner.\n */\n#define rot_debug rig_debug\n\n__END_DECLS\n\n#endif /* _ROTATOR_H */\n\n/** @} */\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/include/hamlib/rotlist.h",
    "content": "/*\n *  Hamlib Interface - list of known rotators\n *  Copyright (c) 2000-2011 by Stephane Fillod\n *  Copyright (c) 2000-2002 by Frank Singleton\n *\n *\n *   This library is free software; you can redistribute it and/or\n *   modify it under the terms of the GNU Lesser General Public\n *   License as published by the Free Software Foundation; either\n *   version 2.1 of the License, or (at your option) any later version.\n *\n *   This library is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n *   Lesser General Public License for more details.\n *\n *   You should have received a copy of the GNU Lesser General Public\n *   License along with this library; if not, write to the Free Software\n *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n *\n */\n\n#ifndef _ROTLIST_H\n#define _ROTLIST_H 1\n\n//! @cond Doxygen_Suppress\n#define ROT_MAKE_MODEL(a,b) ((a)*100+(b))\n#define ROT_BACKEND_NUM(a) ((a)/100)\n//! @endcond\n\n\n/**\n * \\addtogroup rotator\n * @{\n */\n\n/**\n * \\file rotlist.h\n * \\brief Hamlib rotator model definitions.\n *\n * This file contains rotator model definitions for the Hamlib rotator\n * Application Programming Interface (API).  Each distinct rotator type has a\n * unique model number (ID) and is used by Hamlib to identify and distinguish\n * between the different hardware drivers.  The exact model numbers can be\n * acquired using the macros in this file.  To obtain a list of supported\n * rotator branches, one can use the statically defined ROT_BACKEND_LIST macro\n * (defined in configure.ac).  To obtain a full list of supported rotators\n * (including each model in every branch), the foreach_opened_rot() API\n * function can be used.\n *\n * The model number, or ID, is used to tell Hamlib which rotator the client\n * wishes to use which is done with the rot_init() API call.\n */\n\n/**\n * \\def ROT_MODEL_NONE\n * \\brief A macro that returns the model number for an unknown model.\n *\n * The none backend, as the name suggests, does nothing.  It is mainly for\n * internal use.\n */\n#define ROT_MODEL_NONE 0\n\n\n/**\n * \\brief A macro that returns the model number for the DUMMY backend.\n *\n * \\def ROT_MODEL_DUMMY\n *\n * The DUMMY backend, as the name suggests, is a backend which performs\n * no hardware operations and always behaves as one would expect.  It can\n * be thought of as a hardware simulator and is very useful for testing\n * client applications.\n */\n/**\n * \\brief A macro that returns the model number for the NETROTCTL backend.\n *\n * \\def ROT_MODEL_NETROTCTL\n *\n * The NETROTCTL backend allows use of the `rotctld` daemon through the normal\n * Hamlib API.\n */\n//! @cond Doxygen_Suppress\n#define ROT_DUMMY 0\n#define ROT_BACKEND_DUMMY \"dummy\"\n//! @endcond\n#define ROT_MODEL_DUMMY ROT_MAKE_MODEL(ROT_DUMMY, 1)\n#define ROT_MODEL_NETROTCTL ROT_MAKE_MODEL(ROT_DUMMY, 2)\n\n\n/**\n * \\brief A macro that returns the model number of the EASYCOMM 1 backend.\n *\n * \\def ROT_MODEL_EASYCOMM1\n *\n * The EASYCOMM1 backend can be used with rotators that support the EASYCOMM\n * I Standard.\n */\n/**\n * \\brief A macro that returns the model number of the EASYCOMM 2 backend.\n *\n * \\def ROT_MODEL_EASYCOMM2\n *\n * The EASYCOMM2 backend can be used with rotators that support the EASYCOMM\n * II Standard.\n */\n/**\n * \\brief A macro that returns the model number of the EASYCOMM 3 backend.\n *\n * \\def ROT_MODEL_EASYCOMM3\n *\n * The EASYCOMM3 backend can be used with rotators that support the EASYCOMM\n * III Standard.\n */\n//! @cond Doxygen_Suppress\n#define ROT_EASYCOMM 2\n#define ROT_BACKEND_EASYCOMM \"easycomm\"\n//! @endcond\n#define ROT_MODEL_EASYCOMM1 ROT_MAKE_MODEL(ROT_EASYCOMM, 1)\n#define ROT_MODEL_EASYCOMM2 ROT_MAKE_MODEL(ROT_EASYCOMM, 2)\n#define ROT_MODEL_EASYCOMM3 ROT_MAKE_MODEL(ROT_EASYCOMM, 4)\n\n\n/**\n * \\brief A macro that returns the model number of the FODTRACK backend.\n *\n * \\def ROT_MODEL_FODTRACK\n *\n * The FODTRACK backend can be used with rotators that support the FODTRACK\n * Standard.\n */\n//! @cond Doxygen_Suppress\n#define ROT_FODTRACK 3\n#define ROT_BACKEND_FODTRACK \"fodtrack\"\n//! @endcond\n#define ROT_MODEL_FODTRACK ROT_MAKE_MODEL(ROT_FODTRACK, 1)\n\n\n/**\n * \\brief A macro that returns the model number of the ROTOREZ backend.\n *\n * \\def ROT_MODEL_ROTOREZ\n *\n * The ROTOREZ backend can be used with Hy-Gain rotators that support the\n * extended DCU command set by the Idiom Press Rotor-EZ board.\n */\n/**\n * \\brief A macro that returns the model number of the ROTORCARD backend.\n *\n * \\def ROT_MODEL_ROTORCARD\n *\n * The ROTORCARD backend can be used with Yaesu rotators that support the\n * extended DCU command set by the Idiom Press Rotor Card board.\n */\n/**\n * \\brief A macro that returns the model number of the DCU backend.\n *\n * \\def ROT_MODEL_DCU\n *\n * The DCU backend can be used with rotators that support the DCU command set\n * by Hy-Gain (currently the DCU-1).\n */\n/**\n * \\brief A macro that returns the model number of the ERC backend.\n *\n * \\def ROT_MODEL_ERC\n *\n * The ERC backend can be used with rotators that support the DCU command set\n * by DF9GR (currently the ERC).\n */\n/**\n * \\brief A macro that returns the model number of the RT21 backend.\n *\n * \\def ROT_MODEL_RT21\n *\n * The RT21 backend can be used with rotators that support the DCU command set\n * by Green Heron (currently the RT-21).\n */\n//! @cond Doxygen_Suppress\n#define ROT_ROTOREZ 4\n#define ROT_BACKEND_ROTOREZ \"rotorez\"\n//! @endcond\n#define ROT_MODEL_ROTOREZ ROT_MAKE_MODEL(ROT_ROTOREZ, 1)\n#define ROT_MODEL_ROTORCARD ROT_MAKE_MODEL(ROT_ROTOREZ, 2)\n#define ROT_MODEL_DCU ROT_MAKE_MODEL(ROT_ROTOREZ, 3)\n#define ROT_MODEL_ERC ROT_MAKE_MODEL(ROT_ROTOREZ, 4)\n#define ROT_MODEL_RT21 ROT_MAKE_MODEL(ROT_ROTOREZ, 5)\n\n\n/**\n * \\brief A macro that returns the model number of the SARTEK1 backend.\n *\n * \\def ROT_MODEL_SARTEK1\n *\n * The SARTEK1 backend can be used with rotators that support the SARtek\n * protocol.\n */\n//! @cond Doxygen_Suppress\n#define ROT_SARTEK 5\n#define ROT_BACKEND_SARTEK \"sartek\"\n//! @endcond\n#define ROT_MODEL_SARTEK1 ROT_MAKE_MODEL(ROT_SARTEK, 1)\n\n\n/**\n * \\brief A macro that returns the model number of the GS232A backend.\n *\n * \\def ROT_MODEL_GS232A\n *\n * The GS232A backend can be used with rotators that support the GS-232A\n * protocol.\n */\n/**\n * \\brief A macro that returns the model number of the GS232 backend.\n *\n * \\def ROT_MODEL_GS232_GENERIC\n *\n * The GS232_GENERIC backend can be used with rotators that support the\n * generic (even if not coded correctly) GS-232 protocol.\n */\n/**\n * \\brief A macro that returns the model number of the GS232B backend.\n *\n * \\def ROT_MODEL_GS232B\n *\n * The GS232B backend can be used with rotators that support the GS232B\n * protocol.\n */\n/**\n * \\brief A macro that returns the model number of the F1TETRACKER backend.\n *\n * \\def ROT_MODEL_F1TETRACKER\n *\n * The F1TETRACKER backend can be used with rotators that support the F1TE\n * Tracker protocol.\n */\n/**\n * \\brief A macro that returns the model number of the GS23 backend.\n *\n * \\def ROT_MODEL_GS23\n *\n * The GS23 backend can be used with rotators that support the GS-23 protocol.\n */\n/**\n * \\brief A macro that returns the model number of the GS232 backend.\n *\n * \\def ROT_MODEL_GS232\n *\n * The GS232 backend can be used with rotators that support the GS-232\n * protocol.\n */\n/**\n * \\brief A macro that returns the model number of the LVB  backend.\n *\n * \\def ROT_MODEL_LVB\n *\n * The LVB backend can be used with rotators that support the G6LVB AMSAT LVB\n * Tracker GS-232 based protocol.\n */\n/**\n * \\brief A macro that returns the model number of the ST2 backend.\n *\n * \\def ROT_MODEL_ST2\n *\n * The ST2 backend can be used with rotators that support the Fox Delta ST2\n * GS-232 based protocol.\n */\n/**\n * \\brief A macro that returns the model number of the GS232A_AZ Azimuth backend.\n *\n * \\def ROT_MODEL_GS232A_AZ\n *\n * The GS232A_AZ backend can be used with azimuth rotators that support the\n * GS-232A protocol.\n */\n/**\n * \\brief A macro that returns the model number of the GS232A_EL Elevation backend.\n *\n * \\def ROT_MODEL_GS232A_EL\n *\n * The GS232A_EL backend can be used with elevation rotators that support the\n * GS-232A protocol.\n */\n/**\n * \\brief A macro that returns the model number of the GS232B_AZ Azimuth backend.\n *\n * \\def ROT_MODEL_GS232B_AZ\n *\n * The GS232B_AZ backend can be used with azimuth rotators that support the\n * GS-232B protocol.\n */\n/**\n * \\brief A macro that returns the model number of the GS232B_EL Elevation backend.\n *\n * \\def ROT_MODEL_GS232B_EL\n *\n * The GS232B_EL backend can be used with elevation rotators that support the\n * GS-232B protocol.\n */\n\n//! @cond Doxygen_Suppress\n#define ROT_GS232A 6\n#define ROT_BACKEND_GS232A \"gs232a\"\n//! @endcond\n#define ROT_MODEL_GS232A ROT_MAKE_MODEL(ROT_GS232A, 1)\n#define ROT_MODEL_GS232_GENERIC ROT_MAKE_MODEL(ROT_GS232A, 2) /* GENERIC */\n#define ROT_MODEL_GS232B ROT_MAKE_MODEL(ROT_GS232A, 3)\n#define ROT_MODEL_F1TETRACKER ROT_MAKE_MODEL(ROT_GS232A, 4)\n#define ROT_MODEL_GS23 ROT_MAKE_MODEL(ROT_GS232A, 5)\n#define ROT_MODEL_GS232 ROT_MAKE_MODEL(ROT_GS232A, 6) /* Not A or B */\n#define ROT_MODEL_LVB ROT_MAKE_MODEL(ROT_GS232A, 7)\n#define ROT_MODEL_ST2 ROT_MAKE_MODEL(ROT_GS232A, 8)\n#define ROT_MODEL_GS232A_AZ ROT_MAKE_MODEL(ROT_GS232A, 9)\n#define ROT_MODEL_GS232A_EL ROT_MAKE_MODEL(ROT_GS232A, 10)\n#define ROT_MODEL_GS232B_AZ ROT_MAKE_MODEL(ROT_GS232A, 11)\n#define ROT_MODEL_GS232B_EL ROT_MAKE_MODEL(ROT_GS232A, 12)\n\n\n/**\n * \\brief A macro that returns the model number of the PCROTOR backend.\n *\n * \\def ROT_MODEL_PCROTOR\n *\n * The PCROTOR backend is a member of the kit backend group that can be used\n * with home brewed rotators.\n */\n//! @cond Doxygen_Suppress\n#define ROT_KIT 7\n#define ROT_BACKEND_KIT \"kit\"\n//! @endcond\n#define ROT_MODEL_PCROTOR ROT_MAKE_MODEL(ROT_KIT, 1)\n\n\n/**\n * \\brief A macro that returns the model number of the HD1780 backend.\n *\n * \\def ROT_MODEL_HD1780\n *\n * The HD1780 backend can be used with rotators that support the Heathkit\n * HD-1780 protocol.\n */\n//! @cond Doxygen_Suppress\n#define ROT_HEATHKIT 8\n#define ROT_BACKEND_HEATHKIT \"heathkit\"\n//! @endcond\n#define ROT_MODEL_HD1780 ROT_MAKE_MODEL(ROT_HEATHKIT, 1)\n\n\n/**\n * \\brief A macro that returns the model number of the ROT2PROG backend.\n *\n * \\def ROT_MODEL_SPID_ROT2PROG\n *\n * The SPID_ROT2PROG backend can be used with rotators that support the SPID\n * azimuth and elevation protocol.\n */\n/**\n * \\brief A macro that returns the model number of the ROT1PROG backend.\n *\n * \\def ROT_MODEL_SPID_ROT1PROG\n *\n * The SPID_ROT1PROG backend can be used with rotators that support the SPID\n * azimuth protocol.\n */\n/**\n * \\brief A macro that returns the model number of the SPID_MD01_ROT2PROG backend.\n *\n * \\def ROT_MODEL_SPID_MD01_ROT2PROG\n *\n * The SPID_MD01_ROT2PROG backend can be used with rotators that support the\n * extended SPID ROT2PROG azimuth and elevation protocol.\n */\n//! @cond Doxygen_Suppress\n#define ROT_SPID 9\n#define ROT_BACKEND_SPID \"spid\"\n//! @endcond\n#define ROT_MODEL_SPID_ROT2PROG ROT_MAKE_MODEL(ROT_SPID, 1)\n#define ROT_MODEL_SPID_ROT1PROG ROT_MAKE_MODEL(ROT_SPID, 2)\n#define ROT_MODEL_SPID_MD01_ROT2PROG ROT_MAKE_MODEL(ROT_SPID, 3)\n\n\n/**\n * \\brief A macro that returns the model number of the RC2800 backend.\n *\n * \\def ROT_MODEL_RC2800\n *\n * The RC2800 backend can be used with rotators that support the M2 (M\n * Squared) RC2800 protocol.\n */\n/**\n * \\brief A macro that returns the model number of the RC2800_EARLY_AZ\n * backend.\n *\n * \\def ROT_MODEL_RC2800_EARLY_AZ\n *\n * The RC2800_EARLY_AZ backend can be used with rotators that support the M2\n * (M Squared) RC2800 early azimuth protocol.\n */\n/**\n * \\brief A macro that returns the model number of the RC2800_EARLY_AZEL\n * backend.\n *\n * \\def ROT_MODEL_RC2800_EARLY_AZEL\n *\n * The RC2800_EARLY_AZEL backend can be used with rotators that support the M2\n * (M Squared) RC2800 early azimuth and elevation protocol.\n */\n//! @cond Doxygen_Suppress\n#define ROT_M2 10\n#define ROT_BACKEND_M2 \"m2\"\n//! @endcond\n#define ROT_MODEL_RC2800 ROT_MAKE_MODEL(ROT_M2, 1)\n#define ROT_MODEL_RC2800_EARLY_AZ ROT_MAKE_MODEL(ROT_M2, 2)\n#define ROT_MODEL_RC2800_EARLY_AZEL ROT_MAKE_MODEL(ROT_M2, 3)\n\n\n/**\n * \\brief A macro that returns the model number of the RCI_AZEL backend.\n *\n * \\def ROT_MODEL_RCI_AZEL\n *\n * The RCI_AZEL backend can be used with rotators that support the ARS azimuth\n * and elevation protocol.\n */\n/**\n * \\brief A macro that returns the model number of the RCI_AZ backend.\n *\n * \\def ROT_MODEL_RCI_AZ\n *\n * The RCI_AZ backend can be used with rotators that support the ARS azimuth\n * protocol.\n */\n//! @cond Doxygen_Suppress\n#define ROT_ARS 11\n#define ROT_BACKEND_ARS \"ars\"\n//! @endcond\n#define ROT_MODEL_RCI_AZEL ROT_MAKE_MODEL(ROT_ARS, 1)\n#define ROT_MODEL_RCI_AZ ROT_MAKE_MODEL(ROT_ARS, 2)\n\n\n/**\n * \\brief A macro that returns the model number of the IF100 backend.\n *\n * \\def ROT_MODEL_IF100\n *\n * The IF100 backend can be used with rotators that support the AMSAT IF-100\n * interface.\n */\n//! @cond Doxygen_Suppress\n#define ROT_AMSAT 12\n#define ROT_BACKEND_AMSAT \"amsat\"\n//! @endcond\n#define ROT_MODEL_IF100 ROT_MAKE_MODEL(ROT_AMSAT, 1)\n\n\n/**\n * \\brief A macro that returns the model number of the TS7400 backend.\n *\n * \\def ROT_MODEL_TS7400\n *\n * The TS7400 backend supports an embedded ARM board using the TS-7400 Linux\n * board.  More information is at https://www.embeddedarm.com\n */\n//! @cond Doxygen_Suppress\n#define ROT_TS7400 13\n#define ROT_BACKEND_TS7400 \"ts7400\"\n//! @endcond\n#define ROT_MODEL_TS7400 ROT_MAKE_MODEL(ROT_TS7400, 1)\n\n\n/**\n * \\brief A macro that returns the model number of the NEXSTAR backend.\n *\n * \\def ROT_MODEL_NEXSTAR\n *\n * The NEXSTAR backend can be used with rotators that support the Celestron\n * NexStar protocol and alike.\n */\n//! @cond Doxygen_Suppress\n#define ROT_CELESTRON 14\n#define ROT_BACKEND_CELESTRON \"celestron\"\n//! @endcond\n#define ROT_MODEL_NEXSTAR ROT_MAKE_MODEL(ROT_CELESTRON, 1)\n\n\n/**\n * \\brief A macro that returns the model number of the ETHER6 backend.\n *\n * \\def ROT_MODEL_ETHER6\n *\n * The ETHER6 backend can be used with rotators that support the Ether6\n * protocol.\n */\n//! @cond Doxygen_Suppress\n#define ROT_ETHER6 15\n#define ROT_BACKEND_ETHER6 \"ether6\"\n//! @endcond\n#define ROT_MODEL_ETHER6 ROT_MAKE_MODEL(ROT_ETHER6, 1)\n\n\n/**\n * \\brief A macro that returns the model number of the CNCTRK backend.\n *\n * \\def ROT_MODEL_CNCTRK\n *\n * The CNCTRK backend can be used with rotators that support the LinuxCNC\n * running Axis GUI interface.\n */\n//! @cond Doxygen_Suppress\n#define ROT_CNCTRK 16\n#define ROT_BACKEND_CNCTRK \"cnctrk\"\n//! @endcond\n#define ROT_MODEL_CNCTRK ROT_MAKE_MODEL(ROT_CNCTRK, 1)\n\n\n/**\n * \\brief A macro that returns the model number of the PROSISTEL_D_AZ backend.\n *\n * \\def ROT_MODEL_PROSISTEL_D_AZ\n *\n * The PROSISTEL_D_AZ backend can be used with rotators that support the Prosistel\n * azimuth protocol.\n */\n/**\n * \\brief A macro that returns the model number of the PROSISTEL_D_EL backend.\n *\n * \\def ROT_MODEL_PROSISTEL_D_EL\n *\n * The PROSISTEL_D_EL backend can be used with rotators that support the Prosistel\n * elevation protocol.\n */\n/**\n * \\brief A macro that returns the model number of the\n * PROSISTEL_COMBI_TRACK_AZEL backend.\n *\n * \\def ROT_MODEL_PROSISTEL_COMBI_TRACK_AZEL\n *\n * The PROSISTEL_AZEL_COMBI_TRACK_AZEL backend can be used with rotators that\n * support the Prosistel combination azimuth and elevation protocol.\n */\n//! @cond Doxygen_Suppress\n#define ROT_PROSISTEL 17\n#define ROT_BACKEND_PROSISTEL \"prosistel\"\n//! @endcond\n#define ROT_MODEL_PROSISTEL_D_AZ ROT_MAKE_MODEL(ROT_PROSISTEL, 1)\n#define ROT_MODEL_PROSISTEL_D_EL ROT_MAKE_MODEL(ROT_PROSISTEL, 2)\n#define ROT_MODEL_PROSISTEL_COMBI_TRACK_AZEL ROT_MAKE_MODEL(ROT_PROSISTEL, 3)\n\n\n/**\n * \\brief A macro that returns the model number of the MEADE backend.\n *\n * \\def ROT_MODEL_MEADE\n *\n * The MEADE backend can be used with Meade telescope rotators like the\n * DS-2000.\n */\n//! @cond Doxygen_Suppress\n#define ROT_MEADE 18\n#define ROT_BACKEND_MEADE \"meade\"\n//! @endcond\n#define ROT_MODEL_MEADE ROT_MAKE_MODEL(ROT_MEADE, 1)\n\n/**\n * \\brief A macro that returns the model number of the IOPTRON backend.\n *\n * \\def ROT_MODEL_IOPTRON\n *\n * The IOPTRON backend can be used with IOPTRON telescope mounts.\n */\n//! @cond Doxygen_Suppress\n#define ROT_IOPTRON 19\n#define ROT_BACKEND_IOPTRON \"ioptron\"\n//! @endcond\n#define ROT_MODEL_IOPTRON ROT_MAKE_MODEL(ROT_IOPTRON, 1)\n\n\n/**\n * \\brief A macro that returns the model number of the INDI backend.\n *\n * \\def ROT_MODEL_INDI\n *\n * The INDI backend can be used with rotators that support the INDI interface.\n */\n//! @cond Doxygen_Suppress\n#define ROT_INDI 20\n#define ROT_BACKEND_INDI \"indi\"\n//! @endcond\n#define ROT_MODEL_INDI ROT_MAKE_MODEL(ROT_INDI, 1)\n\n\n/**\n * \\brief A macro that returns the model number of the SATEL backend.\n *\n * \\def ROT_MODEL_SATEL\n *\n * The SATEL backend can be used with rotators that support the VE5FP\n * interface.\n */\n//! @cond Doxygen_Suppress\n#define ROT_SATEL 21\n#define ROT_BACKEND_SATEL \"satel\"\n//! @endcond\n#define ROT_MODEL_SATEL ROT_MAKE_MODEL(ROT_SATEL, 1)\n\n\n/**\n * \\brief A macro that returns the model number of the RADANT backend.\n *\n * \\def ROT_MODEL_RADANT\n *\n * The RADANT backend can be used with rotators that support the MS232\n * interface.\n */\n//! @cond Doxygen_Suppress\n#define ROT_RADANT 22\n#define ROT_BACKEND_RADANT \"radant\"\n//! @endcond\n#define ROT_MODEL_RADANT ROT_MAKE_MODEL(ROT_RADANT, 1)\n\n\n#define ROT_ANDROIDSENSOR 23\n#define ROT_BACKEND_ANDROIDSENSOR \"androidsensor\"\n#define ROT_MODEL_ANDROIDSENSOR ROT_MAKE_MODEL(ROT_ANDROIDSENSOR, 1)\n\n/**\n * \\brief A macro that returns the model number of the GRBLTRK backend.\n *\n * \\def ROT_MODEL_GRBLTRK\n *\n * The GRBLTRK backend can be used with rotators that support the GRBL\n * protocol.\n */\n//! @cond Doxygen_Suppress\n#define ROT_GRBLTRK 24\n#define ROT_BACKEND_GRBLTRK \"grbltrk\"\n//! @endcond\n#define ROT_MODEL_GRBLTRK_SER ROT_MAKE_MODEL(ROT_GRBLTRK, 1)\n#define ROT_MODEL_GRBLTRK_NET ROT_MAKE_MODEL(ROT_GRBLTRK, 2)\n\n/**\n * \\brief Convenience type definition for a rotator model.\n *\n * \\typedef typedef int rot_model_t\n*/\ntypedef int rot_model_t;\n\n\n#endif /* _ROTLIST_H */\n\n/** @} */\n"
  },
  {
    "path": "software/hamlib-w64-4.5~git/lib/msvc/libhamlib-4.def",
    "content": "EXPORTS\n    CRC32_function @1\n    add2debugmsgsave @2\n    amp_check_backend @3\n    amp_cleanup @4\n    amp_close @5\n    amp_confparam_lookup @6\n    amp_ext_lookup @7\n    amp_get_caps @8\n    amp_get_conf @9\n    amp_get_ext_level @10\n    amp_get_freq @11\n    amp_get_info @12\n    amp_get_level @13\n    amp_get_powerstat @14\n    amp_has_get_level @15\n    amp_init @16\n    amp_list_foreach @17\n    amp_load_all_backends @18\n    amp_load_backend @19\n    amp_open @20\n    amp_parse_level @21\n    amp_probe_all @22\n    amp_register @23\n    amp_reset @24\n    amp_set_conf @25\n    amp_set_freq @26\n    amp_set_powerstat @27\n    amp_sprintf_level @28\n    amp_strlevel @29\n    amp_token_lookup @30\n    amp_unregister @31\n    azimuth_long_path @32\n    cJSON_AddArrayToObject @33\n    cJSON_AddBoolToObject @34\n    cJSON_AddFalseToObject @35\n    cJSON_AddItemReferenceToArray @36\n    cJSON_AddItemReferenceToObject @37\n    cJSON_AddItemToArray @38\n    cJSON_AddItemToObject @39\n    cJSON_AddItemToObjectCS @40\n    cJSON_AddNullToObject @41\n    cJSON_AddNumberToObject @42\n    cJSON_AddObjectToObject @43\n    cJSON_AddRawToObject @44\n    cJSON_AddStringToObject @45\n    cJSON_AddTrueToObject @46\n    cJSON_Compare @47\n    cJSON_CreateArray @48\n    cJSON_CreateArrayReference @49\n    cJSON_CreateBool @50\n    cJSON_CreateDoubleArray @51\n    cJSON_CreateFalse @52\n    cJSON_CreateFloatArray @53\n    cJSON_CreateIntArray @54\n    cJSON_CreateNull @55\n    cJSON_CreateNumber @56\n    cJSON_CreateObject @57\n    cJSON_CreateObjectReference @58\n    cJSON_CreateRaw @59\n    cJSON_CreateString @60\n    cJSON_CreateStringArray @61\n    cJSON_CreateStringReference @62\n    cJSON_CreateTrue @63\n    cJSON_Delete @64\n    cJSON_DeleteItemFromArray @65\n    cJSON_DeleteItemFromObject @66\n    cJSON_DeleteItemFromObjectCaseSensitive @67\n    cJSON_DetachItemFromArray @68\n    cJSON_DetachItemFromObject @69\n    cJSON_DetachItemFromObjectCaseSensitive @70\n    cJSON_DetachItemViaPointer @71\n    cJSON_Duplicate @72\n    cJSON_GetArrayItem @73\n    cJSON_GetArraySize @74\n    cJSON_GetErrorPtr @75\n    cJSON_GetNumberValue @76\n    cJSON_GetObjectItem @77\n    cJSON_GetObjectItemCaseSensitive @78\n    cJSON_GetStringValue @79\n    cJSON_HasObjectItem @80\n    cJSON_InitHooks @81\n    cJSON_InsertItemInArray @82\n    cJSON_IsArray @83\n    cJSON_IsBool @84\n    cJSON_IsFalse @85\n    cJSON_IsInvalid @86\n    cJSON_IsNull @87\n    cJSON_IsNumber @88\n    cJSON_IsObject @89\n    cJSON_IsRaw @90\n    cJSON_IsString @91\n    cJSON_IsTrue @92\n    cJSON_Minify @93\n    cJSON_Parse @94\n    cJSON_ParseWithLength @95\n    cJSON_ParseWithLengthOpts @96\n    cJSON_ParseWithOpts @97\n    cJSON_Print @98\n    cJSON_PrintBuffered @99\n    cJSON_PrintPreallocated @100\n    cJSON_PrintUnformatted @101\n    cJSON_ReplaceItemInArray @102\n    cJSON_ReplaceItemInObject @103\n    cJSON_ReplaceItemInObjectCaseSensitive @104\n    cJSON_ReplaceItemViaPointer @105\n    cJSON_SetNumberHelper @106\n    cJSON_SetValuestring @107\n    cJSON_Version @108\n    cJSON_free @109\n    cJSON_malloc @110\n    cookie_use @111 DATA\n    date_strget @112\n    debugmsgsave @113 DATA\n    debugmsgsave2 @114 DATA\n    debugmsgsave3 @115 DATA\n    dec2dmmm @116\n    dec2dms @117\n    distance_long_path @118\n    dmmm2dec @119\n    dms2dec @120\n    dot10ths_to_millis @121\n    dump_hex @122\n    elapsed_ms @123\n    flrig_cat_string @124\n    from_bcd @125\n    from_bcd_be @126\n    get_rig_conf_type @127\n    hamlib_copyright @128 DATA\n    hamlib_copyright2 @129 DATA\n    hamlib_version @130 DATA\n    hamlib_version2 @131 DATA\n    hl_usleep @132\n    initamps4_dummy @133\n    initamps4_kpa1500 @134\n    initrigs4_adat @135\n    initrigs4_alinco @136\n    initrigs4_aor @137\n    initrigs4_barrett @138\n    initrigs4_codan @139\n    initrigs4_dorji @140\n    initrigs4_drake @141\n    initrigs4_dummy @142\n    initrigs4_elad @143\n    initrigs4_flexradio @144\n    initrigs4_gomspace @145\n    initrigs4_icm710 @146\n    initrigs4_icmarine @147\n    initrigs4_icom @148\n    initrigs4_jrc @149\n    initrigs4_kachina @150\n    initrigs4_kenwood @151\n    initrigs4_kit @152\n    initrigs4_lowe @153\n    initrigs4_pcr @154\n    initrigs4_prm80 @155\n    initrigs4_racal @156\n    initrigs4_rft @157\n    initrigs4_rs @158\n    initrigs4_skanti @159\n    initrigs4_tapr @160\n    initrigs4_tentec @161\n    initrigs4_tuner @162\n    initrigs4_uniden @163\n    initrigs4_winradio @164\n    initrigs4_wj @165\n    initrigs4_yaesu @166\n    initrots4_amsat @167\n    initrots4_ars @168\n    initrots4_celestron @169\n    initrots4_cnctrk @170\n    initrots4_dummy @171\n    initrots4_easycomm @172\n    initrots4_ether6 @173\n    initrots4_fodtrack @174\n    initrots4_grbltrk @175\n    initrots4_gs232a @176\n    initrots4_heathkit @177\n    initrots4_ioptron @178\n    initrots4_kit @179\n    initrots4_m2 @180\n    initrots4_meade @181\n    initrots4_prosistel @182\n    initrots4_radant @183\n    initrots4_rotorez @184\n    initrots4_sartek @185\n    initrots4_satel @186\n    initrots4_spid @187\n    initrots4_ts7400 @188\n    locator2longlat @189\n    longlat2locator @190\n    millis_to_dot10ths @191\n    morse_code_dot_to_millis @192\n    netrigctl_get_vfo_mode @193\n    network_multicast_publisher_start @194\n    network_multicast_publisher_stop @195\n    par_lock @196\n    par_read_control @197\n    par_read_data @198\n    par_read_status @199\n    par_unlock @200\n    par_write_control @201\n    par_write_data @202\n    parse_hoststr @203\n    port_close @204\n    port_open @205\n    print_ext_param @206\n    probeallrigs4_adat @207\n    probeallrigs4_drake @208\n    probeallrigs4_elad @209\n    probeallrigs4_gomspace @210\n    probeallrigs4_icom @211\n    probeallrigs4_kenwood @212\n    probeallrigs4_lowe @213\n    probeallrigs4_uniden @214\n    probeallrigs4_yaesu @215\n    qrb @216\n    read_block @217\n    read_block_direct @218\n    read_string @219\n    read_string_direct @220\n    rig_check_backend @221\n    rig_check_cache_timeout @222\n    rig_cleanup @223\n    rig_close @224\n    rig_confparam_lookup @225\n    rig_cookie @226\n    rig_copyright @227\n    rig_debug @228\n    rig_ext_func_foreach @229\n    rig_ext_level_foreach @230\n    rig_ext_lookup @231\n    rig_ext_lookup_tok @232\n    rig_ext_parm_foreach @233\n    rig_ext_token_lookup @234\n    rig_flush @235\n    rig_force_cache_timeout @236\n    rig_get_ant @237\n    rig_get_cache @238\n    rig_get_cache_timeout_ms @239\n    rig_get_caps @240\n    rig_get_caps_cptr @241\n    rig_get_caps_int @242\n    rig_get_chan_all @243\n    rig_get_chan_all_cb @244\n    rig_get_channel @245\n    rig_get_clock @246\n    rig_get_conf @247\n    rig_get_conf2 @248\n    rig_get_ctcss_sql @249\n    rig_get_ctcss_tone @250\n    rig_get_dcd @251\n    rig_get_dcs_code @252\n    rig_get_dcs_sql @253\n    rig_get_ext_func @254\n    rig_get_ext_level @255\n    rig_get_ext_parm @256\n    rig_get_freq @257\n    rig_get_func @258\n    rig_get_function_ptr @259\n    rig_get_info @260\n    rig_get_level @261\n    rig_get_mem @262\n    rig_get_mem_all @263\n    rig_get_mem_all_cb @264\n    rig_get_mode @265\n    rig_get_parm @266\n    rig_get_powerstat @267\n    rig_get_ptt @268\n    rig_get_range @269\n    rig_get_resolution @270\n    rig_get_rig_info @271\n    rig_get_rit @272\n    rig_get_rptr_offs @273\n    rig_get_rptr_shift @274\n    rig_get_split_freq @275\n    rig_get_split_freq_mode @276\n    rig_get_split_mode @277\n    rig_get_split_vfo @278\n    rig_get_trn @279\n    rig_get_ts @280\n    rig_get_twiddle @281\n    rig_get_vfo @282\n    rig_get_vfo_info @283\n    rig_get_vfo_list @284\n    rig_get_xit @285\n    rig_has_get_func @286\n    rig_has_get_level @287\n    rig_has_get_parm @288\n    rig_has_scan @289\n    rig_has_set_func @290\n    rig_has_set_level @291\n    rig_has_set_parm @292\n    rig_has_vfo_op @293\n    rig_idx2setting @294\n    rig_init @295\n    rig_levelagcstr @296\n    rig_levelagcvalue @297\n    rig_license @298\n    rig_list_foreach @299\n    rig_list_foreach_model @300\n    rig_load_all_backends @301\n    rig_load_backend @302\n    rig_lookup_mem_caps @303\n    rig_mW2power @304\n    rig_make_md5 @305\n    rig_mem_count @306\n    rig_need_debug @307\n    rig_no_restore_ai @308\n    rig_open @309\n    rig_parse_func @310\n    rig_parse_level @311\n    rig_parse_mode @312\n    rig_parse_mtype @313\n    rig_parse_parm @314\n    rig_parse_rptr_shift @315\n    rig_parse_scan @316\n    rig_parse_vfo @317\n    rig_parse_vfo_op @318\n    rig_passband_narrow @319\n    rig_passband_normal @320\n    rig_passband_wide @321\n    rig_password @322\n    rig_password_generate_secret @323\n    rig_power2mW @324\n    rig_probe @325\n    rig_probe_all @326\n    rig_raw2val @327\n    rig_raw2val_float @328\n    rig_recv_dtmf @329\n    rig_register @330\n    rig_reset @331\n    rig_scan @332\n    rig_send_dtmf @333\n    rig_send_morse @334\n    rig_send_voice_mem @335\n    rig_set_ant @336\n    rig_set_bank @337\n    rig_set_cache_timeout_ms @338\n    rig_set_chan_all @339\n    rig_set_chan_all_cb @340\n    rig_set_channel @341\n    rig_set_clock @342\n    rig_set_conf @343\n    rig_set_ctcss_sql @344\n    rig_set_ctcss_tone @345\n    rig_set_dcd_callback @346\n    rig_set_dcs_code @347\n    rig_set_dcs_sql @348\n    rig_set_debug @349\n    rig_set_debug_callback @350\n    rig_set_debug_file @351\n    rig_set_debug_time_stamp @352\n    rig_set_ext_func @353\n    rig_set_ext_level @354\n    rig_set_ext_parm @355\n    rig_set_freq @356\n    rig_set_freq_callback @357\n    rig_set_func @358\n    rig_set_level @359\n    rig_set_mem @360\n    rig_set_mem_all @361\n    rig_set_mem_all_cb @362\n    rig_set_mode @363\n    rig_set_mode_callback @364\n    rig_set_parm @365\n    rig_set_pltune_callback @366\n    rig_set_powerstat @367\n    rig_set_ptt @368\n    rig_set_ptt_callback @369\n    rig_set_rit @370\n    rig_set_rptr_offs @371\n    rig_set_rptr_shift @372\n    rig_set_spectrum_callback @373\n    rig_set_split_freq @374\n    rig_set_split_freq_mode @375\n    rig_set_split_mode @376\n    rig_set_split_vfo @377\n    rig_set_trn @378\n    rig_set_ts @379\n    rig_set_twiddle @380\n    rig_set_uplink @381\n    rig_set_vfo @382\n    rig_set_vfo_callback @383\n    rig_set_vfo_opt @384\n    rig_set_xit @385\n    rig_setting2idx @386\n    rig_settings_load @387\n    rig_settings_load_all @388\n    rig_settings_save @389\n    rig_sprintf_ant @390\n    rig_sprintf_func @391\n    rig_sprintf_level @392\n    rig_sprintf_level_gran @393\n    rig_sprintf_mode @394\n    rig_sprintf_parm @395\n    rig_sprintf_parm_gran @396\n    rig_sprintf_scan @397\n    rig_sprintf_spectrum_avg_modes @398\n    rig_sprintf_spectrum_modes @399\n    rig_sprintf_spectrum_spans @400\n    rig_sprintf_vfo @401\n    rig_sprintf_vfop @402\n    rig_stop_morse @403\n    rig_stragclevel @404\n    rig_strfunc @405\n    rig_strlevel @406\n    rig_strmtype @407\n    rig_strparm @408\n    rig_strptrshift @409\n    rig_strrmode @410\n    rig_strrmodes @411\n    rig_strscan @412\n    rig_strspectrummode @413\n    rig_strstatus @414\n    rig_strvfo @415\n    rig_strvfop @416\n    rig_token_foreach @417\n    rig_token_lookup @418\n    rig_unregister @419\n    rig_valueagclevel @420\n    rig_version @421\n    rig_vfo_op @422\n    rig_wait_morse @423\n    rigerror @424\n    rot_check_backend @425\n    rot_cleanup @426\n    rot_close @427\n    rot_confparam_lookup @428\n    rot_ext_func_foreach @429\n    rot_ext_level_foreach @430\n    rot_ext_lookup @431\n    rot_ext_lookup_tok @432\n    rot_ext_parm_foreach @433\n    rot_ext_token_lookup @434\n    rot_get_caps @435\n    rot_get_conf @436\n    rot_get_conf2 @437\n    rot_get_ext_func @438\n    rot_get_ext_level @439\n    rot_get_ext_parm @440\n    rot_get_func @441\n    rot_get_info @442\n    rot_get_level @443\n    rot_get_parm @444\n    rot_get_position @445\n    rot_get_status @446\n    rot_has_get_func @447\n    rot_has_get_level @448\n    rot_has_get_parm @449\n    rot_has_set_func @450\n    rot_has_set_level @451\n    rot_has_set_parm @452\n    rot_init @453\n    rot_list_foreach @454\n    rot_load_all_backends @455\n    rot_load_backend @456\n    rot_move @457\n    rot_open @458\n    rot_park @459\n    rot_parse_func @460\n    rot_parse_level @461\n    rot_parse_parm @462\n    rot_probe_all @463\n    rot_register @464\n    rot_reset @465\n    rot_set_conf @466\n    rot_set_ext_func @467\n    rot_set_ext_level @468\n    rot_set_ext_parm @469\n    rot_set_func @470\n    rot_set_level @471\n    rot_set_parm @472\n    rot_set_position @473\n    rot_sprintf_func @474\n    rot_sprintf_level @475\n    rot_sprintf_level_gran @476\n    rot_sprintf_parm @477\n    rot_sprintf_parm_gran @478\n    rot_sprintf_status @479\n    rot_stop @480\n    rot_strfunc @481\n    rot_strlevel @482\n    rot_strparm @483\n    rot_strstatus @484\n    rot_token_foreach @485\n    rot_token_lookup @486\n    rot_unregister @487\n    ser_get_car @488\n    ser_get_cts @489\n    ser_get_dsr @490\n    ser_get_dtr @491\n    ser_get_rts @492\n    ser_set_brk @493\n    ser_set_dtr @494\n    ser_set_rts @495\n    serial_flush @496\n    serial_open @497\n    serial_setup @498\n    spaces @499\n    sprintf_freq @500\n    sprintf_level_ext @501\n    sync_callback @502\n    to_bcd @503\n    to_bcd_be @504\n    to_hex @505\n    vfo_fixup @506\n    vfo_fixup2a @507\n    write_block @508\n    write_block_sync @509\n    write_block_sync_error @510\n"
  }
]