first commit

This commit is contained in:
Xavier 2022-08-24 07:59:16 +02:00
commit adfe5792c4
259 changed files with 77719 additions and 0 deletions

675
COPYING.md Executable file
View File

@ -0,0 +1,675 @@
### GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc.
<https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
### Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom
to share and change all versions of a program--to make sure it remains
free software for all its users. We, the Free Software Foundation, use
the GNU General Public License for most of our software; it applies
also to any other work released this way by its authors. You can apply
it to your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you
have certain responsibilities if you distribute copies of the
software, or if you modify it: responsibilities to respect the freedom
of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the
manufacturer can do so. This is fundamentally incompatible with the
aim of protecting users' freedom to change the software. The
systematic pattern of such abuse occurs in the area of products for
individuals to use, which is precisely where it is most unacceptable.
Therefore, we have designed this version of the GPL to prohibit the
practice for those products. If such problems arise substantially in
other domains, we stand ready to extend this provision to those
domains in future versions of the GPL, as needed to protect the
freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish
to avoid the special danger that patents applied to a free program
could make it effectively proprietary. To prevent this, the GPL
assures that patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
### TERMS AND CONDITIONS
#### 0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds
of works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of
an exact copy. The resulting work is called a "modified version" of
the earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user
through a computer network, with no transfer of a copy, is not
conveying.
An interactive user interface displays "Appropriate Legal Notices" to
the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
#### 1. Source Code.
The "source code" for a work means the preferred form of the work for
making modifications to it. "Object code" means any non-source form of
a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users can
regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same
work.
#### 2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey,
without conditions so long as your license otherwise remains in force.
You may convey covered works to others for the sole purpose of having
them make modifications exclusively for you, or provide you with
facilities for running those works, provided that you comply with the
terms of this License in conveying all material for which you do not
control copyright. Those thus making or running the covered works for
you must do so exclusively on your behalf, under your direction and
control, on terms that prohibit them from making any copies of your
copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the
conditions stated below. Sublicensing is not allowed; section 10 makes
it unnecessary.
#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such
circumvention is effected by exercising rights under this License with
respect to the covered work, and you disclaim any intention to limit
operation or modification of the work as a means of enforcing, against
the work's users, your or third parties' legal rights to forbid
circumvention of technological measures.
#### 4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
#### 5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these
conditions:
- a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
- b) The work must carry prominent notices stating that it is
released under this License and any conditions added under
section 7. This requirement modifies the requirement in section 4
to "keep intact all notices".
- c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
- d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
#### 6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of
sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these
ways:
- a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
- b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the Corresponding
Source from a network server at no charge.
- c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
- d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
- e) Convey the object code using peer-to-peer transmission,
provided you inform other peers where the object code and
Corresponding Source of the work are being offered to the general
public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal,
family, or household purposes, or (2) anything designed or sold for
incorporation into a dwelling. In determining whether a product is a
consumer product, doubtful cases shall be resolved in favor of
coverage. For a particular product received by a particular user,
"normally used" refers to a typical or common use of that class of
product, regardless of the status of the particular user or of the way
in which the particular user actually uses, or expects or is expected
to use, the product. A product is a consumer product regardless of
whether the product has substantial commercial, industrial or
non-consumer uses, unless such uses represent the only significant
mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to
install and execute modified versions of a covered work in that User
Product from a modified version of its Corresponding Source. The
information must suffice to ensure that the continued functioning of
the modified object code is in no case prevented or interfered with
solely because modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or
updates for a work that has been modified or installed by the
recipient, or for the User Product in which it has been modified or
installed. Access to a network may be denied when the modification
itself materially and adversely affects the operation of the network
or violates the rules and protocols for communication across the
network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
#### 7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders
of that material) supplement the terms of this License with terms:
- a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
- b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
- c) Prohibiting misrepresentation of the origin of that material,
or requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
- d) Limiting the use for publicity purposes of names of licensors
or authors of the material; or
- e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
- f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions
of it) with contractual assumptions of liability to the recipient,
for any liability that these contractual assumptions directly
impose on those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions; the
above requirements apply either way.
#### 8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
#### 9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run
a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
#### 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
#### 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims owned
or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within the
scope of its coverage, prohibits the exercise of, or is conditioned on
the non-exercise of one or more of the rights that are specifically
granted under this License. You may not convey a covered work if you
are a party to an arrangement with a third party that is in the
business of distributing software, under which you make payment to the
third party based on the extent of your activity of conveying the
work, and under which the third party grants, to any of the parties
who would receive the covered work from you, a discriminatory patent
license (a) in connection with copies of the covered work conveyed by
you (or copies made from those copies), or (b) primarily for and in
connection with specific products or compilations that contain the
covered work, unless you entered into that arrangement, or that patent
license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
#### 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under
this License and any other pertinent obligations, then as a
consequence you may not convey it at all. For example, if you agree to
terms that obligate you to collect a royalty for further conveying
from those to whom you convey the Program, the only way you could
satisfy both those terms and this License would be to refrain entirely
from conveying the Program.
#### 13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
#### 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions
of the GNU General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in
detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies that a certain numbered version of the GNU General Public
License "or any later version" applies to it, you have the option of
following the terms and conditions either of that numbered version or
of any later version published by the Free Software Foundation. If the
Program does not specify a version number of the GNU General Public
License, you may choose any version ever published by the Free
Software Foundation.
If the Program specifies that a proxy can decide which future versions
of the GNU General Public License can be used, that proxy's public
statement of acceptance of a version permanently authorizes you to
choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
#### 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
#### 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
#### 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
### How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively state
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper
mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands \`show w' and \`show c' should show the
appropriate parts of the General Public License. Of course, your
program's commands might be different; for a GUI interface, you would
use an "about box".
You should also get your employer (if you work as a programmer) or
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. For more information on this, and how to apply and follow
the GNU GPL, see <https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your
program into proprietary programs. If your program is a subroutine
library, you may consider it more useful to permit linking proprietary
applications with the library. If this is what you want to do, use the
GNU Lesser General Public License instead of this License. But first,
please read <https://www.gnu.org/licenses/why-not-lgpl.html>.

674
LICENSE Executable file
View File

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

10
README.md Executable file
View File

@ -0,0 +1,10 @@
# Arduino CW Keyer
Projet basé sur le travail de K3NG
https://github.com/k3ng/k3ng_cw_keyer/wiki
Version 2.0
<img src="http://xavier.debert.free.fr/keyer/keyer.png" width="20%">
<img src="http://xavier.debert.free.fr/keyer/pcb.png" width="20%">
<img src="http://xavier.debert.free.fr/keyer/schema.png" width="20%">

BIN
bom.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

63
config.txt Executable file
View File

@ -0,0 +1,63 @@
Dongle simple compatible avec le croquis K3NG.
Le programme lui-même est ici - https://github.com/k3ng/k3ng_cw_keyer
* Dans le fichier KEYER_PIN_SETTING.H, spécifiez les contacts du microcontrôleur, tels qu'ils sont organisés dans cet appareil :
define paddle_left 6
define paddle_right 5
define tx_key_line_1 12
define sidetone_line 4
define potentiometer A0
define ptt_tx_1 11
define analog_buttons_pin A1
define command_mode_active_led 7
define ps2_keyboard_data 2
define ps2_keyboard_clock 3
Le reste des noms de contacts doit être défini sur '0'.
* spécifiez les options de périphérique utilisées dans le fichier KEYER_FEATURES_AND_OPTIONS.H, en supprimant le signe '//' devant elles :
define FEATURE_COMMAND_BUTTONS
define FEATURE_MEMORIES
define FEATURE_MEMORY_MACROS
define FEATURE_POTENTIOMETER
define FEATURE_PS2_KEYBOARD
Toutes les autres options doivent être commentées avec '//'.
Lors du choix de l'ensemble de fonctions souhaitées, soyez prudent, car tout l'ensemble souhaité ne rentrera pas dans la mémoire du microcontrôleur Arduino Nano.
* Dans le fichier KEYER_SETTINGS.H, vous devez spécifier les paramètres suivants pour les variables :
define potentiometer_change_threshold 1.0
define default_ptt_hang_time_wordspace_units 1.0
define potentiometer_always_on 1
define analog_buttons_number_of_buttons 6
define analog_buttons_r1 10
define analog_buttons_r2 1
Tous les autres paramètres peuvent rester inchangés.

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

22650
k3ng_keyer/k3ng_keyer.ino Executable file

File diff suppressed because it is too large Load Diff

226
k3ng_keyer/keyer.h Executable file
View File

@ -0,0 +1,226 @@
#ifndef keyer_h
#define keyer_h
// Do not change these !
// Variable macros
#define STRAIGHT 1
#define IAMBIC_B 2
#define IAMBIC_A 3
#define BUG 4
#define ULTIMATIC 5
#define SINGLE_PADDLE 6
#define PADDLE_NORMAL 0
#define PADDLE_REVERSE 1
#define KEYER_NORMAL 0
#define BEACON 1
#define KEYER_COMMAND_MODE 2
#define KEYER_COMMAND_MODE_SPEED_OVERRIDE 3
#define OMIT_LETTERSPACE 1
#define SIDETONE_OFF 0
#define SIDETONE_ON 1
#define SIDETONE_PADDLE_ONLY 2
#define SENDING_NOTHING 0
#define SENDING_DIT 1
#define SENDING_DAH 2
#define SPEED_NORMAL 0
#define SPEED_QRSS 1
#define CW 0
#define HELL 1
#define AMERICAN_MORSE 2
#ifdef FEATURE_PS2_KEYBOARD
#define PS2_KEYBOARD_NORMAL 0
#endif //FEATURE_PS2_KEYBOARD
#define SERIAL_CLI 0
#define SERIAL_WINKEY_EMULATION 1
#define SERIAL_SEND_BUFFER_SPECIAL_START 13
#define SERIAL_SEND_BUFFER_WPM_CHANGE 14
#define SERIAL_SEND_BUFFER_PTT_ON 15
#define SERIAL_SEND_BUFFER_PTT_OFF 16
#define SERIAL_SEND_BUFFER_TIMED_KEY_DOWN 17
#define SERIAL_SEND_BUFFER_TIMED_WAIT 18
#define SERIAL_SEND_BUFFER_NULL 19
#define SERIAL_SEND_BUFFER_PROSIGN 20
#define SERIAL_SEND_BUFFER_HOLD_SEND 21
#define SERIAL_SEND_BUFFER_HOLD_SEND_RELEASE 22
#define SERIAL_SEND_BUFFER_MEMORY_NUMBER 23
#define SERIAL_SEND_BUFFER_TX_CHANGE 24
#define SERIAL_SEND_BUFFER_SPECIAL_END 25
#if defined(OPTION_PROSIGN_SUPPORT)
#define PROSIGN_START 127
#define PROSIGN_AA 128
#define PROSIGN_AS 129
#define PROSIGN_BK 130
#define PROSIGN_CL 131
#define PROSIGN_CT 132
#define PROSIGN_KN 133
#define PROSIGN_NJ 134
#define PROSIGN_SK 135
#define PROSIGN_SN 136
#define PROSIGN_HH 137 // iz0rus
#define PROSIGN_END 138 // iz0rus
#endif
#define SERIAL_SEND_BUFFER_NORMAL 0
#define SERIAL_SEND_BUFFER_TIMED_COMMAND 1
#define SERIAL_SEND_BUFFER_HOLD 2
#define WINKEY_NO_COMMAND_IN_PROGRESS 0
#define WINKEY_UNBUFFERED_SPEED_COMMAND 1
#define WINKEY_UNSUPPORTED_COMMAND 2
#define WINKEY_POINTER_COMMAND 3
#define WINKEY_ADMIN_COMMAND 4
#define WINKEY_PAUSE_COMMAND 5
#define WINKEY_KEY_COMMAND 6
#define WINKEY_SETMODE_COMMAND 7
#define WINKEY_SIDETONE_FREQ_COMMAND 8
#define WINKEY_ADMIN_COMMAND_ECHO 9
#define WINKEY_BUFFERED_SPEED_COMMAND 10
#define WINKEY_DAH_TO_DIT_RATIO_COMMAND 11
#define WINKEY_KEYING_COMPENSATION_COMMAND 12
#define WINKEY_FIRST_EXTENSION_COMMAND 13
#define WINKEY_PTT_TIMES_PARM1_COMMAND 14
#define WINKEY_PTT_TIMES_PARM2_COMMAND 15
#define WINKEY_SET_POT_PARM1_COMMAND 16
#define WINKEY_SET_POT_PARM2_COMMAND 17
#define WINKEY_SET_POT_PARM3_COMMAND 18
#define WINKEY_SOFTWARE_PADDLE_COMMAND 19
//#define WINKEY_CANCEL_BUFFERED_SPEED_COMMAND 20
#define WINKEY_BUFFFERED_PTT_COMMMAND 21
#define WINKEY_HSCW_COMMAND 22
#define WINKEY_BUFFERED_HSCW_COMMAND 23
#define WINKEY_WEIGHTING_COMMAND 24
#define WINKEY_KEY_BUFFERED_COMMAND 25
#define WINKEY_WAIT_BUFFERED_COMMAND 26
#define WINKEY_POINTER_01_COMMAND 27
#define WINKEY_POINTER_02_COMMAND 28
#define WINKEY_POINTER_03_COMMAND 29
#define WINKEY_FARNSWORTH_COMMAND 30
#define WINKEY_MERGE_COMMAND 31
#define WINKEY_MERGE_PARM_2_COMMAND 32
#define WINKEY_SET_PINCONFIG_COMMAND 33
#define WINKEY_EXTENDED_COMMAND 34
#define WINKEY_SEND_MSG 35
#define WINKEY_LOAD_SETTINGS_PARM_1_COMMAND 101
#define WINKEY_LOAD_SETTINGS_PARM_2_COMMAND 102
#define WINKEY_LOAD_SETTINGS_PARM_3_COMMAND 103
#define WINKEY_LOAD_SETTINGS_PARM_4_COMMAND 104
#define WINKEY_LOAD_SETTINGS_PARM_5_COMMAND 105
#define WINKEY_LOAD_SETTINGS_PARM_6_COMMAND 106
#define WINKEY_LOAD_SETTINGS_PARM_7_COMMAND 107
#define WINKEY_LOAD_SETTINGS_PARM_8_COMMAND 108
#define WINKEY_LOAD_SETTINGS_PARM_9_COMMAND 109
#define WINKEY_LOAD_SETTINGS_PARM_10_COMMAND 110
#define WINKEY_LOAD_SETTINGS_PARM_11_COMMAND 111
#define WINKEY_LOAD_SETTINGS_PARM_12_COMMAND 112
#define WINKEY_LOAD_SETTINGS_PARM_13_COMMAND 113
#define WINKEY_LOAD_SETTINGS_PARM_14_COMMAND 114
#define WINKEY_LOAD_SETTINGS_PARM_15_COMMAND 115
#define WINKEY_HOUSEKEEPING 0
#define SERVICE_SERIAL_BYTE 1
#define WINKEY_UNBUFFERED_SPEED 0
#define WINKEY_BUFFERED_SPEED 1
#define UNDEFINED_SENDING 0
#define AUTOMATIC_SENDING 1
#define MANUAL_SENDING 2
#define AUTOMATIC_SENDING_INTERRUPTED 3
#define ULTIMATIC_NORMAL 0
#define ULTIMATIC_DIT_PRIORITY 1
#define ULTIMATIC_DAH_PRIORITY 2
#define PRINTCHAR 0
#define NOPRINT 1
#define DONT_RAISE_ERROR_MSG 0
#define RAISE_ERROR_MSG 1
#if !defined(HID_PROTOCOL_KEYBOARD) && !defined(HID_PROTOCOL_MOUSE)
#define HID_PROTOCOL_KEYBOARD 1
#define HID_PROTOCOL_MOUSE 2
#endif
#define WORDSWORTH_2_CHAR_WORDS 2
#define WORDSWORTH_3_CHAR_WORDS 3
#define WORDSWORTH_4_CHAR_WORDS 4
#define WORDSWORTH_NAMES 5
#define WORDSWORTH_QSO_WORDS 6
#define WORDSWORTH_MIXED 99
#define WORDSWORTH_WORDSPACE 1
#define WORDSWORTH_WPM 2
#define WORDSWORTH_REPETITION 3
#define CALLSIGN_INTERNATIONAL 0
#define CALLSIGN_US 1
#define CALLSIGN_EUROPEAN 2
#define CALLSIGN_CANADA 3
#define ECHO_PROGRESSIVE_5 40
#define ECHO_2_CHAR_WORDS 41
#define ECHO_3_CHAR_WORDS 42
#define ECHO_4_CHAR_WORDS 43
#define ECHO_NAMES 44
#define ECHO_QSO_WORDS 45
#define ECHO_MIXED 49
#define PRACTICE_NON_INTERACTIVE 0
#define PRACTICE_INTERACTIVE 1
#define RANDOM_LETTER_GROUPS 61
#define RANDOM_NUMBER_GROUPS 62
#define RANDOM_MIXED_GROUPS 63
#define PRACTICE_2_CHAR_WORDS 51
#define PRACTICE_3_CHAR_WORDS 52
#define PRACTICE_4_CHAR_WORDS 53
#define PRACTICE_NAMES 54
#define PRACTICE_QSO_WORDS 55
#define PRACTICE_MIXED 59
#define CLI_NORMAL_MODE 0
#define CLI_MILL_MODE_PADDLE_SEND 1
#define CLI_MILL_MODE_KEYBOARD_RECEIVE 2
#define COMMAND_SPEED_MODE_KEYER_WPM 0
#define COMMAND_SPEED_MODE_COMMAND_MODE_WPM 1
#define SD_CARD_UNINITIALIZED 0
#define SD_CARD_AVAILABLE 1
#define SD_CARD_AVAILABLE_BEACON_FILE_FOUND 2
#define SD_CARD_AVAILABLE_BEACON_FILE_RUNNING 3
#define SD_CARD_ERROR 254
#define SD_CARD_LOG_NOT_OPEN 0
#define SD_CARD_LOG_OPEN 1
#define SD_CARD_LOG_ERROR 254
#define COMMAND_PL 1
#define COMMAND_PT 2
#define COMMAND_PA 3
#define COMMAND_PI 4
#define SO2R_TX_1 1 // Transmitter 1
#define SO2R_TX_2 2 // Transmitter 2
#define SO2R_RX_1 1 // Receiver 1
#define SO2R_RX_2 2 // Receiver 2
#define SO2R_RX_S 3 // Stereo 1 and 2
#define SO2R_RX_R 4 // Reverse stereo (implemented as stereo)
#endif //keyer_h

View File

@ -0,0 +1,414 @@
const char canadian_prefix_1[] PROGMEM = "VE1";
const char canadian_prefix_2[] PROGMEM = "VE2";
const char canadian_prefix_3[] PROGMEM = "VE3";
const char canadian_prefix_4[] PROGMEM = "VE4";
const char canadian_prefix_5[] PROGMEM = "VE5";
const char canadian_prefix_6[] PROGMEM = "VE6";
const char canadian_prefix_7[] PROGMEM = "VE7";
const char canadian_prefix_8[] PROGMEM = "VE8";
const char canadian_prefix_9[] PROGMEM = "VE9";
const char canadian_prefix_10[] PROGMEM = "VY0";
const char canadian_prefix_11[] PROGMEM = "VY1";
const char canadian_prefix_12[] PROGMEM = "VY2";
const char canadian_prefix_13[] PROGMEM = "VO1";
const char canadian_prefix_14[] PROGMEM = "VO2";
const byte canadian_prefix_size = 14;
const char* const canadian_prefix_table[] PROGMEM =
{canadian_prefix_1,canadian_prefix_2,canadian_prefix_3,canadian_prefix_4,canadian_prefix_5,canadian_prefix_6,canadian_prefix_7,canadian_prefix_8,canadian_prefix_9,canadian_prefix_10,
canadian_prefix_11,canadian_prefix_12,canadian_prefix_13,canadian_prefix_14};
// European callsign prefix table
//
// Note 2017-05-06: This is weird. If I put "LB" in the array, avrdude trips up with a timeout error when uploading to a Mega.
// That's why LB isn't in this table
const char eu_prefix_1[] PROGMEM = "3A";
const char eu_prefix_2[] PROGMEM = "4O";
const char eu_prefix_3[] PROGMEM = "4U";
const char eu_prefix_4[] PROGMEM = "9A";
const char eu_prefix_5[] PROGMEM = "9H";
const char eu_prefix_6[] PROGMEM = "C3";
const char eu_prefix_7[] PROGMEM = "CT";
const char eu_prefix_8[] PROGMEM = "CU";
const char eu_prefix_9[] PROGMEM = "DA";
const char eu_prefix_10[] PROGMEM = "DB";
const char eu_prefix_11[] PROGMEM = "DC";
const char eu_prefix_12[] PROGMEM = "DD";
const char eu_prefix_13[] PROGMEM = "DE";
const char eu_prefix_14[] PROGMEM = "DF";
const char eu_prefix_15[] PROGMEM = "DG";
const char eu_prefix_16[] PROGMEM = "DH";
const char eu_prefix_17[] PROGMEM = "DI";
const char eu_prefix_18[] PROGMEM = "DJ";
const char eu_prefix_19[] PROGMEM = "DK";
const char eu_prefix_20[] PROGMEM = "DL";
const char eu_prefix_21[] PROGMEM = "EI";
const char eu_prefix_22[] PROGMEM = "ER";
const char eu_prefix_23[] PROGMEM = "ES";
const char eu_prefix_24[] PROGMEM = "EU";
const char eu_prefix_25[] PROGMEM = "EV";
const char eu_prefix_26[] PROGMEM = "EW";
const char eu_prefix_27[] PROGMEM = "F";
const char eu_prefix_28[] PROGMEM = "G";
const char eu_prefix_29[] PROGMEM = "GX";
const char eu_prefix_30[] PROGMEM = "GD";
const char eu_prefix_31[] PROGMEM = "GT";
const char eu_prefix_32[] PROGMEM = "GI";
const char eu_prefix_33[] PROGMEM = "GN";
const char eu_prefix_34[] PROGMEM = "GJ";
const char eu_prefix_35[] PROGMEM = "GH";
const char eu_prefix_36[] PROGMEM = "GM";
const char eu_prefix_37[] PROGMEM = "GS";
const char eu_prefix_38[] PROGMEM = "GU";
const char eu_prefix_39[] PROGMEM = "GP";
const char eu_prefix_40[] PROGMEM = "GW";
const char eu_prefix_41[] PROGMEM = "GC";
const char eu_prefix_42[] PROGMEM = "HB";
const char eu_prefix_43[] PROGMEM = "HV";
const char eu_prefix_44[] PROGMEM = "I";
const char eu_prefix_45[] PROGMEM = "IS";
const char eu_prefix_46[] PROGMEM = "IM";
const char eu_prefix_47[] PROGMEM = "JW";
const char eu_prefix_48[] PROGMEM = "JX";
const char eu_prefix_49[] PROGMEM = "LX";
const char eu_prefix_50[] PROGMEM = "LY";
const char eu_prefix_51[] PROGMEM = "LZ";
const char eu_prefix_52[] PROGMEM = "OY";
const char eu_prefix_53[] PROGMEM = "OZ";
const char eu_prefix_54[] PROGMEM = "S5";
const char eu_prefix_55[] PROGMEM = "YU";
const char eu_prefix_56[] PROGMEM = "T7";
const char eu_prefix_57[] PROGMEM = "T9";
const char eu_prefix_58[] PROGMEM = "TF";
const char eu_prefix_59[] PROGMEM = "TK";
const char eu_prefix_60[] PROGMEM = "EM";
const char eu_prefix_61[] PROGMEM = "EO";
const char eu_prefix_62[] PROGMEM = "YL";
const char eu_prefix_63[] PROGMEM = "YO";
const char eu_prefix_64[] PROGMEM = "YT";
const char eu_prefix_65[] PROGMEM = "YU";
const char eu_prefix_66[] PROGMEM = "YP";
const char eu_prefix_67[] PROGMEM = "YQ";
const char eu_prefix_68[] PROGMEM = "YR";
const char eu_prefix_69[] PROGMEM = "Z3";
const char eu_prefix_70[] PROGMEM = "ZA";
const char eu_prefix_71[] PROGMEM = "YZ";
const char eu_prefix_72[] PROGMEM = "SA";
const char eu_prefix_73[] PROGMEM = "SB";
const char eu_prefix_74[] PROGMEM = "SC";
const char eu_prefix_75[] PROGMEM = "SD";
const char eu_prefix_76[] PROGMEM = "SE";
const char eu_prefix_77[] PROGMEM = "SF";
const char eu_prefix_78[] PROGMEM = "SG";
const char eu_prefix_79[] PROGMEM = "SH";
const char eu_prefix_80[] PROGMEM = "SI";
const char eu_prefix_81[] PROGMEM = "SJ";
const char eu_prefix_82[] PROGMEM = "SK";
const char eu_prefix_83[] PROGMEM = "SL";
const char eu_prefix_84[] PROGMEM = "SM";
const char eu_prefix_85[] PROGMEM = "SN";
const char eu_prefix_86[] PROGMEM = "SO";
const char eu_prefix_87[] PROGMEM = "SP";
const char eu_prefix_88[] PROGMEM = "SQ";
const char eu_prefix_89[] PROGMEM = "SR";
const char eu_prefix_90[] PROGMEM = "SS";
const char eu_prefix_91[] PROGMEM = "ST";
const char eu_prefix_92[] PROGMEM = "SU";
const char eu_prefix_93[] PROGMEM = "SV";
const char eu_prefix_94[] PROGMEM = "SW";
const char eu_prefix_95[] PROGMEM = "SX";
const char eu_prefix_96[] PROGMEM = "SY";
const char eu_prefix_97[] PROGMEM = "SZ";
const char eu_prefix_98[] PROGMEM = "OE";
const char eu_prefix_99[] PROGMEM = "OF";
const char eu_prefix_100[] PROGMEM = "OG";
const char eu_prefix_101[] PROGMEM = "OH";
const char eu_prefix_102[] PROGMEM = "OI";
const char eu_prefix_103[] PROGMEM = "OJ";
const char eu_prefix_104[] PROGMEM = "OK";
const char eu_prefix_105[] PROGMEM = "OL";
const char eu_prefix_106[] PROGMEM = "OM";
const char eu_prefix_107[] PROGMEM = "ON";
const char eu_prefix_108[] PROGMEM = "OO";
const char eu_prefix_109[] PROGMEM = "OP";
const char eu_prefix_110[] PROGMEM = "OQ";
const char eu_prefix_111[] PROGMEM = "OR";
const char eu_prefix_112[] PROGMEM = "OS";
const char eu_prefix_113[] PROGMEM = "OT";
const char eu_prefix_114[] PROGMEM = "PA";
const char eu_prefix_115[] PROGMEM = "PB";
const char eu_prefix_116[] PROGMEM = "PC";
const char eu_prefix_117[] PROGMEM = "PD";
const char eu_prefix_118[] PROGMEM = "PE";
const char eu_prefix_119[] PROGMEM = "PF";
const char eu_prefix_120[] PROGMEM = "PG";
const char eu_prefix_121[] PROGMEM = "PH";
const char eu_prefix_122[] PROGMEM = "PI";
const char eu_prefix_123[] PROGMEM = "UA";
const char eu_prefix_124[] PROGMEM = "UB";
const char eu_prefix_125[] PROGMEM = "UC";
const char eu_prefix_126[] PROGMEM = "UD";
const char eu_prefix_127[] PROGMEM = "UE";
const char eu_prefix_128[] PROGMEM = "UF";
const char eu_prefix_129[] PROGMEM = "UG";
const char eu_prefix_130[] PROGMEM = "UH";
const char eu_prefix_131[] PROGMEM = "UI";
const char eu_prefix_132[] PROGMEM = "RA";
const char eu_prefix_133[] PROGMEM = "RB";
const char eu_prefix_134[] PROGMEM = "RC";
const char eu_prefix_135[] PROGMEM = "RD";
const char eu_prefix_136[] PROGMEM = "RE";
const char eu_prefix_137[] PROGMEM = "RF";
const char eu_prefix_138[] PROGMEM = "RG";
const char eu_prefix_139[] PROGMEM = "RH";
const char eu_prefix_140[] PROGMEM = "RI";
const char eu_prefix_141[] PROGMEM = "RJ";
const char eu_prefix_142[] PROGMEM = "RK";
const char eu_prefix_143[] PROGMEM = "RL";
const char eu_prefix_144[] PROGMEM = "RM";
const char eu_prefix_145[] PROGMEM = "RN";
const char eu_prefix_146[] PROGMEM = "RO";
const char eu_prefix_147[] PROGMEM = "RP";
const char eu_prefix_148[] PROGMEM = "RQ";
const char eu_prefix_149[] PROGMEM = "RR";
const char eu_prefix_150[] PROGMEM = "RS";
const char eu_prefix_151[] PROGMEM = "RT";
const char eu_prefix_152[] PROGMEM = "RU";
const char eu_prefix_153[] PROGMEM = "RV";
const char eu_prefix_154[] PROGMEM = "RW";
const char eu_prefix_155[] PROGMEM = "RX";
const char eu_prefix_156[] PROGMEM = "RY";
const char eu_prefix_157[] PROGMEM = "RZ";
const char eu_prefix_158[] PROGMEM = "UR";
const char eu_prefix_159[] PROGMEM = "US";
const char eu_prefix_160[] PROGMEM = "UT";
const char eu_prefix_161[] PROGMEM = "UU";
const char eu_prefix_162[] PROGMEM = "UV";
const char eu_prefix_163[] PROGMEM = "UW";
const char eu_prefix_164[] PROGMEM = "UX";
const char eu_prefix_165[] PROGMEM = "UY";
const char eu_prefix_166[] PROGMEM = "UZ";
const char eu_prefix_167[] PROGMEM = "EA";
const char eu_prefix_168[] PROGMEM = "EB";
const char eu_prefix_169[] PROGMEM = "EC";
const char eu_prefix_170[] PROGMEM = "ED";
const char eu_prefix_171[] PROGMEM = "EE";
const char eu_prefix_172[] PROGMEM = "EF";
const char eu_prefix_173[] PROGMEM = "EG";
const char eu_prefix_174[] PROGMEM = "EH";
const char eu_prefix_175[] PROGMEM = "EJ";
const char eu_prefix_176[] PROGMEM = "HA";
const char eu_prefix_177[] PROGMEM = "HG";
const char eu_prefix_178[] PROGMEM = "LA";
const char eu_prefix_179[] PROGMEM = "LC";
const char eu_prefix_180[] PROGMEM = "LD";
const char eu_prefix_181[] PROGMEM = "LE";
const char eu_prefix_182[] PROGMEM = "LF";
const char eu_prefix_183[] PROGMEM = "LG";
const char eu_prefix_184[] PROGMEM = "LH";
const char eu_prefix_185[] PROGMEM = "LI";
const char eu_prefix_186[] PROGMEM = "LJ";
const char eu_prefix_187[] PROGMEM = "LK";
const char eu_prefix_188[] PROGMEM = "LL";
const char eu_prefix_189[] PROGMEM = "LM";
const char eu_prefix_190[] PROGMEM = "LN";
/*const char eu_prefix_191[] PROGMEM = "LB"; see note above about "LB"*/
const byte eu_prefix_size = 190;
const char* const eu_prefix_table[] PROGMEM = {
eu_prefix_1,
eu_prefix_2,
eu_prefix_3,
eu_prefix_4,
eu_prefix_5,
eu_prefix_6,
eu_prefix_7,
eu_prefix_8,
eu_prefix_9,
eu_prefix_10,
eu_prefix_11,
eu_prefix_12,
eu_prefix_13,
eu_prefix_14,
eu_prefix_15,
eu_prefix_16,
eu_prefix_17,
eu_prefix_18,
eu_prefix_19,
eu_prefix_20,
eu_prefix_21,
eu_prefix_22,
eu_prefix_23,
eu_prefix_24,
eu_prefix_25,
eu_prefix_26,
eu_prefix_27,
eu_prefix_28,
eu_prefix_29,
eu_prefix_30,
eu_prefix_31,
eu_prefix_32,
eu_prefix_33,
eu_prefix_34,
eu_prefix_35,
eu_prefix_36,
eu_prefix_37,
eu_prefix_38,
eu_prefix_39,
eu_prefix_40,
eu_prefix_41,
eu_prefix_42,
eu_prefix_43,
eu_prefix_44,
eu_prefix_45,
eu_prefix_46,
eu_prefix_47,
eu_prefix_48,
eu_prefix_49,
eu_prefix_50,
eu_prefix_51,
eu_prefix_52,
eu_prefix_53,
eu_prefix_54,
eu_prefix_55,
eu_prefix_56,
eu_prefix_57,
eu_prefix_58,
eu_prefix_59,
eu_prefix_60,
eu_prefix_61,
eu_prefix_62,
eu_prefix_63,
eu_prefix_64,
eu_prefix_65,
eu_prefix_66,
eu_prefix_67,
eu_prefix_68,
eu_prefix_69,
eu_prefix_70,
eu_prefix_71,
eu_prefix_72,
eu_prefix_73,
eu_prefix_74,
eu_prefix_75,
eu_prefix_76,
eu_prefix_77,
eu_prefix_78,
eu_prefix_79,
eu_prefix_80,
eu_prefix_81,
eu_prefix_82,
eu_prefix_83,
eu_prefix_84,
eu_prefix_85,
eu_prefix_86,
eu_prefix_87,
eu_prefix_88,
eu_prefix_89,
eu_prefix_90,
eu_prefix_91,
eu_prefix_92,
eu_prefix_93,
eu_prefix_94,
eu_prefix_95,
eu_prefix_96,
eu_prefix_97,
eu_prefix_98,
eu_prefix_99,
eu_prefix_100,
eu_prefix_101,
eu_prefix_102,
eu_prefix_103,
eu_prefix_104,
eu_prefix_105,
eu_prefix_106,
eu_prefix_107,
eu_prefix_108,
eu_prefix_109,
eu_prefix_110,
eu_prefix_111,
eu_prefix_112,
eu_prefix_113,
eu_prefix_114,
eu_prefix_115,
eu_prefix_116,
eu_prefix_117,
eu_prefix_118,
eu_prefix_119,
eu_prefix_120,
eu_prefix_121,
eu_prefix_122,
eu_prefix_123,
eu_prefix_124,
eu_prefix_125,
eu_prefix_126,
eu_prefix_127,
eu_prefix_128,
eu_prefix_129,
eu_prefix_130,
eu_prefix_131,
eu_prefix_132,
eu_prefix_133,
eu_prefix_134,
eu_prefix_135,
eu_prefix_136,
eu_prefix_137,
eu_prefix_138,
eu_prefix_139,
eu_prefix_140,
eu_prefix_141,
eu_prefix_142,
eu_prefix_143,
eu_prefix_144,
eu_prefix_145,
eu_prefix_146,
eu_prefix_147,
eu_prefix_148,
eu_prefix_149,
eu_prefix_150,
eu_prefix_151,
eu_prefix_152,
eu_prefix_153,
eu_prefix_154,
eu_prefix_155,
eu_prefix_156,
eu_prefix_157,
eu_prefix_158,
eu_prefix_159,
eu_prefix_160,
eu_prefix_161,
eu_prefix_162,
eu_prefix_163,
eu_prefix_164,
eu_prefix_165,
eu_prefix_166,
eu_prefix_167,
eu_prefix_168,
eu_prefix_169,
eu_prefix_170,
eu_prefix_171,
eu_prefix_172,
eu_prefix_173,
eu_prefix_174,
eu_prefix_175,
eu_prefix_176,
eu_prefix_177,
eu_prefix_178,
eu_prefix_179,
eu_prefix_180,
eu_prefix_181,
eu_prefix_182,
eu_prefix_183,
eu_prefix_184,
eu_prefix_185,
eu_prefix_186,
eu_prefix_187,
eu_prefix_188,
eu_prefix_189,
eu_prefix_190/*,
eu_prefix_191*/
};

63
k3ng_keyer/keyer_debug.h Executable file
View File

@ -0,0 +1,63 @@
// don't touch these unless you know what the hell you are doing or you're asked to uncomment these for debug dumps
// #define DEBUG_STARTUP
// #define DEBUG_STARTUP_BLINKS
// #define DEBUG_LOOP
// #define DEBUG_EEPROM
// #define DEBUG_MEMORIES
// #define DEBUG_PLAY_MEMORY
// #define DEBUG_SEND_CHAR
// #define DEBUG_MEMORY_WRITE
// #define DEBUG_MEMORYCHECK
// #define DEBUG_MEMORY_LOCATIONS
// #define DEBUG_CAPTURE_COM_PORT
// #define DEBUG_HELL_TEST
// #define DEBUG_WINKEY_PROTOCOL_USING_CW
// #define DEBUG_CHECK_SERIAL
// #define DEBUG_PS2_KEYBOARD
// #define DEBUG_VARIABLE_DUMP
// #define DEBUG_BUTTONS
// #define DEBUG_COMMAND_MODE
// #define DEBUG_GET_CW_INPUT_FROM_USER
// #define DEBUG_POTENTIOMETER
// #define DEBUG_CW_DECODER
// #define DEBUG_CW_DECODER_WPM
// #define DEBUG_SERIAL_SEND_CW_CALLOUT
// #define DEBUG_SLEEP
// #define DEBUG_BACKLIGHT
// #define DEBUG_BUTTON_ARRAY
// #define DEBUG_USB
// #define DEBUG_USB_KEYBOARD
// #define DEBUG_CAPACITIVE_PADDLE
// #define DEBUG_DISPLAY_SCROLL_PRINT_CHAR
// #define DEBUG_WINKEY // <- to use this you must have a multi-serial port Arduino and use FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
// #define DEBUG_WINKEY_SEND_ERRANT_BYTE
// #define DEBUG_WINKEY_PORT_WRITE
// #define DEBUG_CW_COMPUTER_KEYBOARD
// #define DEBUG_CW_DECODER_WITH_TONE
// #define DEBUG_OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define DEBUG_FEATURE_COMPETITION_COMPRESSION_DETECTION
// #define DEBUG_FEATURE_STRAIGHT_KEY_ECHO
// #define DEBUG_UDP
// #define DEBUG_UDP_WRITE
// #define DEBUG_WEB_SERVER
// #define DEBUG_WEB_PARSE_GET
// #define DEBUG_WEB_SERVER_READS
// #define DEBUG_INTERNET_LINKING_RECEIVE
// #define DEBUG_INTERNET_LINKING_SEND
// #define DEBUG_UDP_PACKET_RECEIVE
// #define DEBUG_FORCE_RESET
// #define DEBUG_WINKEY_DISABLE_LEAD_IN_TIME_SETTING
// #define DEBUG_KEYPAD_SERIAL
// #define DEBUG_CALLSIGN_PRACTICE_SHOW_CALLSIGN
// #define DEBUG_WORDSWORTH
// #define DEBUG_PRACTICE_SERIAL
// #define DEBUG_PRACTICE_CMD_MODE
// #define DEBUG_SD_CARD
// #define DEBUG_FARNSWORTH
// #define DEBUG_FARNSWORTH_TIMING
// #define DEBUG_ASYNC_EEPROM_WRITE
// #define DEBUG_SERVICE_SEND_BUFFER
// #define DEBUG_EEPROM_READ_SETTINGS
// #define DEBUG_LOOP_ELEMENT_LENGTHS
// #define OPTION_WINKEY_IGNORE_FIRST_STATUS_REQUEST

49
k3ng_keyer/keyer_dependencies.h Executable file
View File

@ -0,0 +1,49 @@
#if defined(FEATURE_LCD_4BIT) || defined(FEATURE_LCD_8BIT) || defined(FEATURE_LCD_ADAFRUIT_I2C) || defined(FEATURE_LCD_ADAFRUIT_BACKPACK) || defined(FEATURE_LCD_YDv1) ||defined(FEATURE_LCD1602_N07DH) || defined(FEATURE_LCD_SAINSMART_I2C) || defined(FEATURE_LCD_FABO_PCF8574) || defined(FEATURE_LCD_MATHERTEL_PCF8574) || defined(FEATURE_LCD_HD44780) || defined(FEATURE_LCD_I2C_FDEBRABANDER)
#define FEATURE_DISPLAY
#endif
#if defined(FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT) && !defined(FEATURE_COMMAND_LINE_INTERFACE)
#define FEATURE_COMMAND_LINE_INTERFACE
#endif
#if defined(FEATURE_COMMAND_LINE_INTERFACE) || defined(FEATURE_WINKEY_EMULATION)
#define FEATURE_SERIAL
#endif
//#if defined(HARDWARE_ARDUINO_DUE) && !defined(FEATURE_EEPROM_E24C1024) && defined(FEATURE_MEMORIES)
#if defined(ARDUINO_SAM_DUE) && !defined(FEATURE_EEPROM_E24C1024) && defined(FEATURE_MEMORIES)
#error "In order to use FEATURE_MEMORIES with HARDWARE_ARDUINO_DUE you need FEATURE_EEPROM_E24C1024"
#endif
#if defined(FEATURE_DISPLAY) || defined(FEATURE_COMMAND_LINE_INTERFACE) || defined(FEATURE_CW_COMPUTER_KEYBOARD)
#define FEATURE_PADDLE_ECHO
#endif
#if defined(FEATURE_STRAIGHT_KEY) && (defined(FEATURE_STRAIGHT_KEY_ECHO) || defined(FEATURE_MEMORIES) || defined(FEATURE_CW_COMPUTER_KEYBOARD))
#define FEATURE_STRAIGHT_KEY_DECODE
#endif
#if defined(FEATURE_WEB_SERVER) || defined(FEATURE_INTERNET_LINK)
#define FEATURE_ETHERNET
#endif
#if defined(FEATURE_INTERNET_LINK)
#define FEATURE_UDP
#endif
#if defined(FEATURE_4x4_KEYPAD) && defined(FEATURE_3x4_KEYPAD)
#error "You can't use both FEATURE_4x4_KEYPAD and FEATURE_3x4_KEYPAD simultaneously"
#endif
#if defined(FEATURE_TRAINING_COMMAND_LINE_INTERFACE) && defined(OPTION_WORDSWORTH_NORSK) && !defined(OPTION_NON_ENGLISH_EXTENSIONS)
#define OPTION_NON_ENGLISH_EXTENSIONS
#endif
#if defined(FEATURE_BEACON_SETTING) && !defined(FEATURE_MEMORIES)
#error "FEATURE_BEACON_SETTING requires FEATURE_MEMORIES and you may also want FEATURE_MEMORY_MACROS"
#endif
#if defined(FEATURE_COMMAND_MODE) && !defined(FEATURE_BUTTONS)
#error "FEATURE_COMMAND_MODE requires FEATURE_BUTTONS"
#endif

View File

@ -0,0 +1,134 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
// #define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
// #define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
// #define FEATURE_MEMORY_MACROS
// #define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
// #define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
// #define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
// #define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
#define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
// #define FEATURE_SERIAL_HELP
// #define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
// #define FEATURE_DEAD_OP_WATCHDOG
// #define FEATURE_AUTOSPACE
// #define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
// #define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_8BIT // classic LCD display using 8 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library
// #define FEATURE_LCD_MATHERTEL_PCF8574 // https://github.com/mathertel/LiquidCrystal_PCF8574
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
#define FEATURE_LCD_HD44780
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
// #define FEATURE_ROTARY_ENCODER // rotary encoder speed control
// #define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
// #define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
// #define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO // you may also need to comment out line 19 in the file keyer_dependencies.h
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_SEQUENCER
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
// #define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
// #define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
// #define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
// #define OPTION_DO_NOT_SAY_HI
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
#define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
// #define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
// #define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
// #define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
// #define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define FEATURE_SD_CARD_SUPPORT
// #define FEATURE_SO2R_BASE // SO2R Box base protocol extensions
// #define FEATURE_SO2R_SWITCHES // SO2R Box TX and RX switches
// #define FEATURE_SO2R_ANTENNA // SO2R Box antenna selection (not fully implemented)
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
// #define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
#define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,148 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
// ######## ## ## ## ## ## ## ######## ## ## ######## ########
// ## ## ## ### ## ## ## ## ## ## ## ## ##
// ## ## ## #### ## ## ## ## #### ## ## ##
// ###### ## ## ## ## ## ##### ###### ## ###### ########
// ## ## ## ## #### ## ## ## ## ## ## ##
// ## ## ## ## ### ## ## ## ## ## ## ##
// ## ####### ## ## ## ## ######## ## ######## ## ##
// ######## ## ## ## #####
// ## ## ## #### ## ##
// ## ## ## ## ## ##
// ###### ##### ## ## ##
// ## ## ## ## ## ##
// ## ## ## ## ## ##
// ## ## ## ###### #####
// Contributed by Disneysw
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
#define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
#define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
#define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
// #define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
#define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
// #define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
#define FEATURE_SERIAL_HELP
#define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
#define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer
#define FEATURE_DEAD_OP_WATCHDOG
#define FEATURE_AUTOSPACE
#define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
#define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_8BIT // classic LCD display using 8 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
#define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
#define FEATURE_ROTARY_ENCODER // rotary encoder speed control
#define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
#define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
#define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
//#define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_SEQUENCER
// #define FEATURE_SD_CARD_SUPPORT
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
// #define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
// #define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
#define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
#define OPTION_N1MM_WINKEY_TAB_BUG_WORKAROUND // enable this to ignore the TAB key in the Send CW window (this breaks SO2R functionality in N1MM)
#define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
#define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
// #define OPTION_DO_NOT_SAY_HI
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
// #define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
#define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
#define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
#define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
// #define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
// #define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,135 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
// Funtronics FK-11
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
#define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
#define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
#define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
#define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
#define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
// #define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
#define FEATURE_SERIAL_HELP
#define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
#define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
#define FEATURE_DEAD_OP_WATCHDOG
#define FEATURE_AUTOSPACE
#define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
// #define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_8BIT // classic LCD display using 8 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
#define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library
// #define FEATURE_LCD_MATHERTEL_PCF8574 // https://github.com/mathertel/LiquidCrystal_PCF8574
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_LCD_HD44780
#define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
#define FEATURE_ROTARY_ENCODER // rotary encoder speed control
#define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
#define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
#define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
// #define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_SEQUENCER
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
#define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
// #define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
// #define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
#define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
#define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
#define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
// #define OPTION_DO_NOT_SAY_HI
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
// #define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
#define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
#define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
#define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
// #define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define FEATURE_SD_CARD_SUPPORT
// #define FEATURE_SO2R_BASE // SO2R Box base protocol extensions
// #define FEATURE_SO2R_SWITCHES // SO2R Box TX and RX switches
// #define FEATURE_SO2R_ANTENNA // SO2R Box antenna selection (not fully implemented)
#define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
// #define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,135 @@
/*
Generic STM32F103C "Blue Pill"
*/
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
#define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
#define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
#define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
#define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
// #define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
// #define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
#define FEATURE_SERIAL_HELP
#define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
#define FEATURE_DEAD_OP_WATCHDOG
#define FEATURE_AUTOSPACE
#define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
#define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_8BIT // classic LCD display using 8 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
#define FEATURE_ROTARY_ENCODER // rotary encoder speed control
// #define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
#define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
// #define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
#define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_SEQUENCER
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
//#define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
// #define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
//#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
//#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
//#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
// #define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
// #define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
#define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
// #define OPTION_DO_NOT_SAY_HI
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
// #define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
// #define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
// #define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
#define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
#define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
// #define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
// #define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
// #define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,131 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
#define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
#define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
// #define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
// #define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
// #define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
#define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
#define FEATURE_SERIAL_HELP
// #define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
// #define FEATURE_DEAD_OP_WATCHDOG
// #define FEATURE_AUTOSPACE
// #define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
#define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_8BIT // classic LCD display using 8 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library
// #define FEATURE_LCD_MATHERTEL_PCF8574 // https://github.com/mathertel/LiquidCrystal_PCF8574
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_LCD_HD44780
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
// #define FEATURE_ROTARY_ENCODER // rotary encoder speed control
// #define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
// #define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
// #define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_SEQUENCER
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
// #define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
// #define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
#define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
// #define OPTION_DO_NOT_SAY_HI
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
#define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
// #define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
// #define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
#define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
// #define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define FEATURE_SD_CARD_SUPPORT
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
// #define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,130 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
#define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
#define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
#define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
#define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
// #define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
// #define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
#define FEATURE_SERIAL_HELP
#define FEATURE_HELL
#define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
#define FEATURE_DEAD_OP_WATCHDOG
#define FEATURE_AUTOSPACE
#define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
#define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_8BIT // classic LCD display using 8 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
#define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
#define FEATURE_ROTARY_ENCODER // rotary encoder speed control
// #define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
#define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
#define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY //Highly recommended to leave disabled. Booting with straight key plugged in works better (timing issues w/ this feature w/paddles)
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_SEQUENCER
// #define FEATURE_SD_CARD_SUPPORT
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
// #define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
// #define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
#define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
// #define OPTION_DO_NOT_SAY_HI
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
#define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
#define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR //Goertzel default is 558Hz, with 186Hz bandwidth. Edit goertzel.h in libraries as desired.
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
#define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
#define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
#define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE //comment out if not using the twin T oscillator. Remember to change audio out pin
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
// #define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,143 @@
/*
# # ## ##### # ###### # # # # # #
## ## # # # # # # ## ## # ## # #
# ## # # # # # # ##### # ## # # # # # #
# # ###### ##### # # # # # # # # #
# # # # # # # # # # # ## #
# # # # # ###### ###### # # # # # #
*/
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
#define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
#define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
#define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
#define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
// #define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
#define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
#define FEATURE_SERIAL_HELP
#define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
#define FEATURE_DEAD_OP_WATCHDOG
#define FEATURE_AUTOSPACE
#define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
#define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_8BIT // classic LCD display using 8 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
// #define FEATURE_ROTARY_ENCODER // rotary encoder speed control
// #define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
#define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
#define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
#define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_SEQUENCER
// #define FEATURE_SD_CARD_SUPPORT
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
//#define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
// #define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
//#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
// #define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
// #define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
#define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
// #define OPTION_DO_NOT_SAY_HI
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
#define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
// #define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
// #define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
#define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
#define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
// #define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
// #define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
// #define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,135 @@
//
// Features for W6IPA megakeyer v1.1 (CC) BY-NC-SA
// Project files are available here https://github.com/w6ipa/megakeyer
//
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
#define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
#define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
#define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
#define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
#define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
// #define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
#define FEATURE_SERIAL_HELP
// #define FEATURE_HELL
#define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
// #define FEATURE_DEAD_OP_WATCHDOG
// #define FEATURE_AUTOSPACE
// #define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
// #define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_8BIT // classic LCD display using 8 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library
#define FEATURE_LCD_HD44780
// #define FEATURE_LCD_MATHERTEL_PCF8574 // https://github.com/mathertel/LiquidCrystal_PCF8574
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
#define FEATURE_ROTARY_ENCODER // rotary encoder speed control
#define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
#define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
#define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_SEQUENCER
// #define FEATURE_SD_CARD_SUPPORT
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
// #define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
#define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
#define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
// #define OPTION_DO_NOT_SAY_HI
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
#define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
// #define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
#define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
#define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
#define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
// #define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
// #define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,122 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
// #define FEATURE_BUTTONS
// #define FEATURE_COMMAND_MODE
// #define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
// #define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
// #define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
// #define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
// #define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
// #define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
// #define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
// #define FEATURE_SERIAL_HELP
// #define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
// #define FEATURE_DEAD_OP_WATCHDOG
// #define FEATURE_AUTOSPACE
// #define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
// #define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
// #define FEATURE_ROTARY_ENCODER // rotary encoder speed control
// #define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
// #define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
// #define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
//#define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
// #define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // activate this when using Winkey 2 emulation and Win-Test
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
#define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
// #define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
#define OPTION_DO_NOT_SAY_HI
#define OPTION_BLINK_HI_ON_PTT
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
// #define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
// #define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
// #define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
// #define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
#define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,119 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
// #define FEATURE_BUTTONS
// #define FEATURE_COMMAND_MODE
// #define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
// #define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
// #define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
// #define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
// #define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
// #define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
// #define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
// #define FEATURE_SERIAL_HELP
// #define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
// #define FEATURE_DEAD_OP_WATCHDOG
// #define FEATURE_AUTOSPACE
// #define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
// #define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
// #define FEATURE_ROTARY_ENCODER // rotary encoder speed control
// #define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
// #define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
// #define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
//#define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
// #define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // activate this when using Winkey 2 emulation and Win-Test
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
#define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
// #define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_N1MM_WINKEY_TAB_BUG_WORKAROUND // enable this to ignore the TAB key in the Send CW window (this breaks SO2R functionality in N1MM)
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
#define OPTION_DO_NOT_SAY_HI
#define OPTION_BLINK_HI_ON_PTT
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
// #define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
// #define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
// #define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
// #define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
#define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,119 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
// #define FEATURE_BUTTONS
// #define FEATURE_COMMAND_MODE
// #define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
// #define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
// #define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
// #define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
// #define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
// #define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
#define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
// #define FEATURE_SERIAL_HELP
// #define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
// #define FEATURE_DEAD_OP_WATCHDOG
// #define FEATURE_AUTOSPACE
// #define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
// #define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
// #define FEATURE_ROTARY_ENCODER // rotary encoder speed control
// #define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
// #define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
// #define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
//#define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
// #define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // activate this when using Winkey 2 emulation and Win-Test
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
#define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
// #define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_N1MM_WINKEY_TAB_BUG_WORKAROUND // enable this to ignore the TAB key in the Send CW window (this breaks SO2R functionality in N1MM)
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
#define OPTION_DO_NOT_SAY_HI
#define OPTION_BLINK_HI_ON_PTT
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
// #define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
// #define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
// #define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
// #define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
#define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,119 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
// #define FEATURE_BUTTONS
// #define FEATURE_COMMAND_MODE
// #define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
// #define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
// #define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
// #define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
// #define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
// #define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
// #define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
// #define FEATURE_SERIAL_HELP
// #define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
// #define FEATURE_DEAD_OP_WATCHDOG
// #define FEATURE_AUTOSPACE
// #define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
// #define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
// #define FEATURE_ROTARY_ENCODER // rotary encoder speed control
// #define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
// #define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
// #define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
//#define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
// #define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // activate this when using Winkey 2 emulation and Win-Test
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
#define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
// #define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_N1MM_WINKEY_TAB_BUG_WORKAROUND // enable this to ignore the TAB key in the Send CW window (this breaks SO2R functionality in N1MM)
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
#define OPTION_DO_NOT_SAY_HI
#define OPTION_BLINK_HI_ON_PTT
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
// #define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
// #define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
// #define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
// #define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
#define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,120 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
// #define FEATURE_BUTTONS
// #define FEATURE_COMMAND_MODE
// #define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
// #define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
// #define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
// #define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
// #define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
// #define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
#define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SERIAL_HELP
// #define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
// #define FEATURE_DEAD_OP_WATCHDOG
// #define FEATURE_AUTOSPACE
// #define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
// #define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
// #define FEATURE_ROTARY_ENCODER // rotary encoder speed control
// #define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
// #define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
// #define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
//#define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
// #define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // activate this when using Winkey 2 emulation and Win-Test
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
#define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
// #define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_N1MM_WINKEY_TAB_BUG_WORKAROUND // enable this to ignore the TAB key in the Send CW window (this breaks SO2R functionality in N1MM)
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
#define OPTION_DO_NOT_SAY_HI
#define OPTION_BLINK_HI_ON_PTT
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
// #define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
// #define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
// #define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
// #define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
#define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,113 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
//#define FEATURE_COMMAND_LINE_INTERFACE // (this no longer requires FEATURE_SERIAL)
#define FEATURE_MEMORIES
//#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
//#define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
//#define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
//#define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
#define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
//#define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
//#define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
//#define FEATURE_SERIAL_HELP
//#define FEATURE_HELL
//#define FEATURE_PS2_KEYBOARD // Change keyboard layout (non-US in K3NG_PS2Keyboard.h). Additional options below.
//#define FEATURE_USB_KEYBOARD
//#define FEATURE_DEAD_OP_WATCHDOG
//#define FEATURE_AUTOSPACE
//#define FEATURE_FARNSWORTH
//#define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
//#define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
//#define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
//#define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
//#define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
//#define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
//#define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
//#define FEATURE_ROTARY_ENCODER // rotary encoder speed control
//#define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
//#define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
//#define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
//#define FEATURE_LED_RING // Mayhew Labs Led Ring support
//#define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
//#define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
//#define FEATURE_PTT_INTERLOCK
//#define FEATURE_QLF
//#define FEATURE_EEPROM_E24C1024
//#define FEATURE_STRAIGHT_KEY
//#define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
//#define FEATURE_PADDLE_ECHO
//#define FEATURE_STRAIGHT_KEY_ECHO
//#define FEATURE_AMERICAN_MORSE
//#define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
//#define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
//#define FEATURE_SEQUENCER
//#define FEATURE_SD_CARD_SUPPORT
//#define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
//#define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
//#define OPTION_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE simultaneously. This will make Winkey emulation be the default at boot up; hold command button down at boot up to activate CLI mode
//#define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
//#define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
//#define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
//#define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround bug)
//#define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
//#define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
//#define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
//#define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
//#define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
//#define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
//#define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
//#define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
//#define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
//#define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
//#define OPTION_DO_NOT_SAY_HI
//#define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
//#define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
#define OPTION_SAVE_MEMORY_NANOKEYER
//#define OPTION_INVERT_PADDLE_PIN_LOGIC
//#define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
//#define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
//#define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
//#define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
#define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,113 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
//#define FEATURE_COMMAND_LINE_INTERFACE // (this no longer requires FEATURE_SERIAL)
#define FEATURE_MEMORIES
//#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
//#define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
//#define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
//#define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
#define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
//#define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
//#define FEATURE_SERIAL_HELP
//#define FEATURE_HELL
//#define FEATURE_PS2_KEYBOARD // Change keyboard layout (non-US in K3NG_PS2Keyboard.h). Additional options below.
//#define FEATURE_USB_KEYBOARD
//#define FEATURE_DEAD_OP_WATCHDOG
//#define FEATURE_AUTOSPACE
//#define FEATURE_FARNSWORTH
//#define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
//#define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
//#define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
//#define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
//#define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
//#define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power
//#define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
//#define FEATURE_ROTARY_ENCODER // rotary encoder speed control
//#define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
//#define FEATURE_USB_MOUSE
//#define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
//#define FEATURE_LED_RING // Mayhew Labs Led Ring support
//#define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
//#define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
//#define FEATURE_PTT_INTERLOCK
//#define FEATURE_QLF
//#define FEATURE_EEPROM_E24C1024
//#define FEATURE_STRAIGHT_KEY
//#define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
//#define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
//#define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
//#define FEATURE_AMERICAN_MORSE
//#define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
//#define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
//#define FEATURE_SEQUENCER
//#define FEATURE_SD_CARD_SUPPORT
//#define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
//#define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
//#define OPTION_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE simultaneously. This will make Winkey emulation be the default at boot up; hold command button down at boot up to activate CLI mode
//#define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
//#define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
//#define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
//#define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround bug)
//#define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
//#define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
//#define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
#define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
//#define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
//#define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
//#define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
//#define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
//#define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
//#define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
//#define OPTION_DO_NOT_SAY_HI
//#define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
//#define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
#define OPTION_SAVE_MEMORY_NANOKEYER
//#define OPTION_INVERT_PADDLE_PIN_LOGIC
//#define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
//#define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
//#define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
//#define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
#define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,117 @@
// This file is for the Open Interface http://remoteqth.com/open-interface.php
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
#define FEATURE_COMMAND_LINE_INTERFACE // (this no longer requires FEATURE_SERIAL)
#define FEATURE_MEMORIES
#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
//#define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
//#define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
#define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
#define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
#define FEATURE_SERIAL_HELP
//#define FEATURE_HELL
//#define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
//#define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
//#define FEATURE_DEAD_OP_WATCHDOG
//#define FEATURE_AUTOSPACE
#define FEATURE_FARNSWORTH
//#define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
#define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
//#define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
//#define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
//#define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
//#define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power
//#define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
//#define FEATURE_ROTARY_ENCODER // rotary encoder speed control
#define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
//#define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
//#define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
//#define FEATURE_LED_RING // Mayhew Labs Led Ring support
#define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
#define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
//#define FEATURE_PTT_INTERLOCK
//#define FEATURE_QLF
//#define FEATURE_EEPROM_E24C1024
//#define FEATURE_STRAIGHT_KEY
//#define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
//#define FEATURE_PADDLE_ECHO
//#define FEATURE_STRAIGHT_KEY_ECHO
//#define FEATURE_AMERICAN_MORSE
//#define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
//#define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
//#define FEATURE_SEQUENCER
//#define FEATURE_SD_CARD_SUPPORT
//#define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
//#define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
#define OPTION_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE simultaneously. This will make Winkey emulation be the default at boot up; hold command button down at boot up to activate CLI mode
//#define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
//#define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
//#define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
// #define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround bug)
//#define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
//#define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
//#define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
//#define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
#define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
//#define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
//#define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
//#define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
//#define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
//#define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
// #define OPTION_DO_NOT_SAY_HI
//#define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
//#define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
//#define OPTION_SAVE_MEMORY_NANOKEYER
//#define OPTION_INVERT_PADDLE_PIN_LOGIC
//#define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
//#define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
//#define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
//#define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
//#define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
// #define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
#define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,131 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
// #define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
#define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
// #define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
// #define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
// #define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
// #define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
#define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
// #define FEATURE_SERIAL_HELP
// #define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
// #define FEATURE_DEAD_OP_WATCHDOG
// #define FEATURE_AUTOSPACE
// #define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
// #define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_8BIT // classic LCD display using 8 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library
// #define FEATURE_LCD_MATHERTEL_PCF8574 // https://github.com/mathertel/LiquidCrystal_PCF8574
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_LCD_HD44780
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
// #define FEATURE_ROTARY_ENCODER // rotary encoder speed control
// #define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
// #define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
// #define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_SEQUENCER
// #define FEATURE_SD_CARD_SUPPORT
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
// #define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
// #define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
// #define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
// #define OPTION_DO_NOT_SAY_HI
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
#define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
// #define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
// #define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
// #define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
// #define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
// #define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,187 @@
// ######## ######## ###### ########
// ## ## ## ## ##
// ## ## ## ##
// ## ###### ###### ##
// ## ## ## ##
// ## ## ## ## ##
// ## ######## ###### ##
#define TEST_CONFIG_1
// #define TEST_CONFIG_2
#if defined(TEST_CONFIG_1)
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
#define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
#define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
#define FEATURE_MEMORY_MACROS
// #define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
// #define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
// #define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
// #define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
// #define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
// #define FEATURE_SERIAL_HELP
// #define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer
// #define FEATURE_DEAD_OP_WATCHDOG
#define FEATURE_AUTOSPACE
// #define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
// #define FEATURE_LCD_4BIT // classic LCD display using 4 I/O lines
// #define FEATURE_LCD_8BIT // classic LCD display using 8 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library
// #define FEATURE_LCD_MATHERTEL_PCF8574 // https://github.com/mathertel/LiquidCrystal_PCF8574
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
// #define FEATURE_ROTARY_ENCODER // rotary encoder speed control
// #define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
// #define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
// #define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_EXPERIMENTAL_DDS_SINEWAVE_SIDETONE_MEGA // DDS output Mega Digital Pin 46
// #define FEATURE_CLOCK // NOT FINISHED YET
// #define FEATURE_SEQUENCER
// #define FEATURE_SD_CARD_SUPPORT
// #define FEATURE_SO2R_BASE // SO2R Box base protocol extensions
// #define FEATURE_SO2R_SWITCHES // SO2R Box TX and RX switches
// #define FEATURE_SO2R_ANTENNA // SO2R Box antenna selection (not fully implemented)
#define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// UNDER DEVELOPMENT
// #define FEATURE_SINEWAVE_SIDETONE_USING_TIMER_1 // Arduino Uno: sidetone_line = 9 or 10 ; Mega: sidetone_line = 11, 12, or 13 (Further info: https://www.pjrc.com/teensy/td_libs_TimerOne.html )
// #define FEATURE_SINEWAVE_SIDETONE_USING_TIMER_3 // Arduino Mega: sidetone_line = 2, 3, or 5 (Further info: https://www.pjrc.com/teensy/td_libs_TimerOne.html)
#define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
// #define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
//this is removed from other features files - may depricate totally - 2016-09-28 - #define OPTION_WINKEY_SEND_BREAKIN_STATUS_BYTE // additional code to check_dit_paddle() and check_dah_paddle() to send 0xC2 status byte when paddles are hit
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
// #define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
// #define OPTION_WINKEY_UCXLOG_SUPRESS_C4_STATUS_BYTE // use this only with UCXlog if having issues with function key macros
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // activate this when using Winkey 2 emulation and Win-Test
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
// #define OPTION_WINKEY_EXTENDED_COMMANDS_WITH_DOLLAR_SIGNS // experimental
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
// #define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_ECHO_7C_BYTE // For debugging purposes only (only in this test feature and options file) (7C = half space character)
// #define OPTION_WINKEY_DO_NOT_SEND_7C_BYTE_HALF_SPACE // For debugging purposes only (only in this test feature and options file)
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
// #define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
// #define OPTION_DO_NOT_SAY_HI
// #define OPTION_BLINK_HI_ON_PTT
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
#define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
#define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
#define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
// #define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_INTERNET_LINK_NO_UDP_SVC_DURING_KEY_DOWN
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
// #define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
// #define FEATURE_COMPETITION_COMPRESSION_DETECTION //(Experimental)
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
#define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns
#endif
//*********************************************************************************************************************
//*********************************************************************************************************************
//*********************************************************************************************************************
//*********************************************************************************************************************
//*********************************************************************************************************************
#if defined(TEST_CONFIG_2)
#endif //TEST_CONFIG_2
// ######## ######## ###### ########
// ## ## ## ## ##
// ## ## ## ##
// ## ###### ###### ##
// ## ## ## ##
// ## ## ## ## ##
// ## ######## ###### ##

View File

@ -0,0 +1,145 @@
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
#define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
#define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
#define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
#define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
#define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
#define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
#define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
#define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
#define FEATURE_SERIAL_HELP
#define FEATURE_HELL
#define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer
#define FEATURE_DEAD_OP_WATCHDOG
#define FEATURE_AUTOSPACE
#define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
#define FEATURE_LCD_4BIT // classic LCD display using 4 I/O lines
// #define FEATURE_LCD_8BIT // classic LCD display using 8 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
#define FEATURE_CW_DECODER // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
#define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
#define FEATURE_ROTARY_ENCODER // rotary encoder speed control
#define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
#define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
#define FEATURE_LED_RING // Mayhew Labs Led Ring support
#define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
#define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
#define FEATURE_PTT_INTERLOCK
#define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
#define FEATURE_STRAIGHT_KEY
#define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define FEATURE_PADDLE_ECHO
#define FEATURE_STRAIGHT_KEY_ECHO
#define FEATURE_WEB_SERVER
#define FEATURE_INTERNET_LINK
#define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_EXPERIMENTAL_DDS_SINEWAVE_SIDETONE_MEGA // DDS output Mega Digital Pin 46
// #define FEATURE_CLOCK // NOT FINISHED YET
#define FEATURE_SD_CARD_SUPPORT
#define FEATURE_SEQUENCER
#define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
#define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
// #define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
//this is removed from other features files - may depricate totally - 2016-09-28 - #define OPTION_WINKEY_SEND_BREAKIN_STATUS_BYTE // additional code to check_dit_paddle() and check_dah_paddle() to send 0xC2 status byte when paddles are hit
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_UCXLOG_SUPRESS_C4_STATUS_BYTE // use this only with UCXlog if having issues with function key macros
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // activate this when using Winkey 2 emulation and Win-Test
#define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
// #define OPTION_WINKEY_EXTENDED_COMMANDS_WITH_DOLLAR_SIGNS // experimental
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
#define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
#define OPTION_WINKEY_ECHO_7C_BYTE // For debugging purposes only (only in this test feature and options file) (7C = half space character)
// #define OPTION_WINKEY_DO_NOT_SEND_7C_BYTE_HALF_SPACE // For debugging purposes only (only in this test feature and options file)
#define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
#define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
#define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
#define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
#define OPTION_KEEP_PTT_KEYED_WHEN_CHARS_BUFFERED // this option keeps PTT high if there are characters buffered from the keyboard, the serial interface, or Winkey
#define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
#define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
// #define OPTION_DO_NOT_SAY_HI
#define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
#define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
#define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
#define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
#define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
#define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_INTERNET_LINK_NO_UDP_SVC_DURING_KEY_DOWN
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
// #define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
#define FEATURE_SD_CARD_SUPPORT
#define FEATURE_SO2R_BASE // SO2R Box base protocol extensions
#define FEATURE_SO2R_SWITCHES // SO2R Box TX and RX switches
#define FEATURE_SO2R_ANTENNA // SO2R Box antenna selection (not fully implemented)
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
// #define FEATURE_COMPETITION_COMPRESSION_DETECTION //(Experimental)
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase... maybe?
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
// #define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
#define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
#define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
#define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
#define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,95 @@
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
// features & options for TinyKeyer by OK1RR
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
//#define FEATURE_COMMAND_LINE_INTERFACE // (this no longer requires FEATURE_SERIAL)
#define FEATURE_MEMORIES
//#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation) (this no longer requires FEATURE_SERIAL)
//#define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
//#define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
//#define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
//#define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
//#define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
//#define FEATURE_DEAD_OP_WATCHDOG
#define FEATURE_AUTOSPACE
//#define FEATURE_FARNSWORTH
//#define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
//#define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power
//#define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
#define FEATURE_ROTARY_ENCODER // rotary encoder speed control
//#define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
//#define FEATURE_DIT_DAH_BUFFER_CONTROL
//#define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
//#define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
//#define FEATURE_PTT_INTERLOCK
//#define FEATURE_QLF
//#define FEATURE_EEPROM_E24C1024
//#define FEATURE_STRAIGHT_KEY
//#define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
//#define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_SEQUENCER
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
#define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
//#define OPTION_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE simultaneously. This will make Winkey emulation be the default at boot up; hold command button down at boot up to activate CLI mode
//#define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
//#define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
#define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
//#define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
//#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround bug)
// #define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
//#define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
//#define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
//#define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
//#define OPTION_DO_NOT_SAY_HI
#define OPTION_SAVE_MEMORY_NANOKEYER
//#define OPTION_INVERT_PADDLE_PIN_LOGIC
//#define OPTION_DIT_DAH_BUFFERS_OFF_BY_DEFAULT_FOR_FEATURE_DIT_DAH_BUFFER_CONTROL
//#define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
//#define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
//#define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
//#define FEATURE_SD_CARD_SUPPORT
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
#define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
#define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,126 @@
// This file is for the Yaacwk interface http://i1cra.briata.org/yaacwk/
// YAACWK stands for Yet Another Arduino CW Keyer, it's based on AtMega 644p
// see http://i1cra.briata.org/yaacwk/ for more info
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
#define FEATURE_COMMAND_LINE_INTERFACE // (this no longer requires FEATURE_SERIAL)
#define FEATURE_MEMORIES
//#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation) (this no longer requires FEATURE_SERIAL)
//#define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
//#define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
//#define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
#define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
//#define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
//#define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
//#define FEATURE_SERIAL_HELP
//#define FEATURE_HELL
#define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
//#define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
//#define FEATURE_DEAD_OP_WATCHDOG
//#define FEATURE_AUTOSPACE
//#define FEATURE_FARNSWORTH
//#define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
#define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
//#define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
//#define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
//#define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library
#define FEATURE_CW_DECODER
//#define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power
//#define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
//#define FEATURE_ROTARY_ENCODER // rotary encoder speed control
//#define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
//#define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
//#define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
//#define FEATURE_LED_RING // Mayhew Labs Led Ring support
#define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
//#define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
//#define FEATURE_PTT_INTERLOCK
//#define FEATURE_QLF
//#define FEATURE_EEPROM_E24C1024
//#define FEATURE_STRAIGHT_KEY
//#define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
//#define FEATURE_PADDLE_ECHO
//#define FEATURE_STRAIGHT_KEY_ECHO
//#define FEATURE_AMERICAN_MORSE
//#define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
//#define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
//#define FEATURE_SEQUENCER
//#define FEATURE_SD_CARD_SUPPORT
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
//#define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
//#define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
#define OPTION_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE simultaneously. This will make Winkey emulation be the default at boot up; hold command button down at boot up to activate CLI mode
//#define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
//#define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
//#define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // activate this when using Winkey 2 emulation and Win-Test
#define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround bug)
//#define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE
//#define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
//#define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
//#define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
//#define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
//#define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
//#define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
//#define OPTION_KEEP_PTT_KEYED_WHEN_CHARS_BUFFERED // this option keeps PTT high if there are characters buffered from the keyboard, the serial interface, or Winkey
//#define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
//#define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
//#define OPTION_DO_NOT_SAY_HI
//#define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
//#define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
//#define OPTION_SAVE_MEMORY_NANOKEYER
//#define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
#define OPTION_CW_KEYBOARD_ITALIAN
//#define OPTION_INVERT_PADDLE_PIN_LOGIC
#define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
//#define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
//#define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
//#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
//#define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
//#define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
#define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

View File

@ -0,0 +1,140 @@
// Y Y CCCCC CCCCC CCCCC SSSS OOOOO 222 RRRR M M IIIII N N IIIII
// Y Y C C C S O O 2 R R M M M I NN N I
// Y C C C SSSSS O O 2 RRRR M M I N N N I
// Y C C C S O O 2 R R M M I N NN I
// Y CCCCC CCCCC CCCCC SSSS OOOOO 22222 R R M M IIIII N N IIIII
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior
// #define FEATURE_BUTTONS
// #define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality
// #define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
// #define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation)
// #define FEATURE_BEACON // Go into beacon mode if paddle_left pin is LOW at boot up
// #define FEATURE_BEACON_SETTING // Go into beacon mode at boot up if EEPROM setting is enabled (\_ CLI Command)
// #define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
// #define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h).
// #define FEATURE_SIDETONE_NEWTONE // Use the NewTone library, ~1k smaller code size than the standard tone library. Uses timer1 (pins 9 or 10) https://bitbucket.org/teckel12/arduino-new-tone/wiki/Home
// #define FEATURE_SERIAL_HELP
// #define FEATURE_HELL
// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below.
// #define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include <Keyboard.h>
// #define FEATURE_DEAD_OP_WATCHDOG
// #define FEATURE_AUTOSPACE
// #define FEATURE_FARNSWORTH
// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english
// #define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines
// #define FEATURE_LCD_8BIT // classic LCD display using 8 I/O lines
// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20
// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL)
// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic
// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino
// #define FEATURE_LCD_SAINSMART_I2C
// #define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library
// #define FEATURE_LCD_MATHERTEL_PCF8574 // https://github.com/mathertel/LiquidCrystal_PCF8574
// #define FEATURE_LCD_I2C_FDEBRABANDER //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// #define FEATURE_LCD_HD44780
// #define FEATURE_CW_DECODER
// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
// #define FEATURE_LCD_BACKLIGHT_AUTO_DIM // turn off LCD backlight and/or dim Power Indicator LED after x minutes (LED requires a PWM pin)
// #define FEATURE_ROTARY_ENCODER // rotary encoder speed control
// #define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING
// #define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines)
// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles
// #define FEATURE_LED_RING // Mayhew Labs Led Ring support
// #define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM
// #define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
// #define FEATURE_PTT_INTERLOCK
// #define FEATURE_QLF
// #define FEATURE_EEPROM_E24C1024
// #define FEATURE_STRAIGHT_KEY
// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
// #define FEATURE_PADDLE_ECHO
// #define FEATURE_STRAIGHT_KEY_ECHO
// #define FEATURE_AMERICAN_MORSE
// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad
// #define FEATURE_SEQUENCER
#define FEATURE_SO2R_BASE // SO2R Box base protocol extensions
//#define FEATURE_SO2R_SWITCHES // SO2R Box TX and RX switches
// #define FEATURE_SO2R_ANTENNA // SO2R Box antenna selection (not fully implemented)
// #define FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
// #define FEATURE_WEB_SERVER // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_INTERNET_LINK // Details: https://github.com/k3ng/k3ng_cw_keyer/wiki/390-Feature:-Ethernet,-Web-Server,-and-Internet-Linking
// #define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE
// simultaneously. This will make Winkey emulation be the default at boot up;
// hold command button down at boot up to activate CLI mode
// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
// #define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup
// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands
// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER
// #define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function)
// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped
#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
// #define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN
// #define OPTION_WINKEY_PINCONFIG_PTT_CONTROLS_PTT_LINE // Have Winkeyer PTT setting activate/deactivate PTT line rather than control buffered character PTT hold
// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother
// #define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory
// #define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only
// #define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle
// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.)
// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM
// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE
#define OPTION_DO_NOT_SAY_HI
// #define OPTION_BLINK_HI_ON_PTT
// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou)
// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL)
// #define OPTION_SAVE_MEMORY_NANOKEYER
// #define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP
// #define OPTION_CW_KEYBOARD_ITALIAN
// #define OPTION_CW_KEYBOARD_GERMAN
// #define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// #define OPTION_INVERT_PADDLE_PIN_LOGIC
// #define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ)
// #define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage
// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC)
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
#define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE
// #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase
// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins
// #define OPTION_WORDSWORTH_CZECH
// #define OPTION_WORDSWORTH_DEUTSCH
// #define OPTION_WORDSWORTH_NORSK
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS
// #define OPTION_EXCLUDE_MILL_MODE
// #define OPTION_NO_ULTIMATIC // reduce memory usage by removing ultimatic code.
// #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW
// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI
// #define OPTION_SWAP_PADDLE_PARAMETER_CHANGE_DIRECTION // reverses the up/down direction when using the paddles to change the wpm or sidetone frequency
// #define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
// #define OPTION_BEACON_MODE_MEMORY_REPEAT_TIME // to space out the repeated playing of memory 1 when in beacon mode
// #define OPTION_BEACON_MODE_PTT_TAIL_TIME // adds the ptt tail time to each playing of memory 1 in beacon mode
// #define OPTION_WINKEY_PROSIGN_COMPATIBILITY // Additional character mappings to support K1EL Winkey emulation prosigns

97
k3ng_keyer/keyer_hardware.h Executable file
View File

@ -0,0 +1,97 @@
/* keyer_hardware.h
Edit this file to enable specific hardware profiles.
When enabling a hardware option below, the default keyer_pin_settings.h, keyer_features_and_options.h, and keyer_settings.h files are not compiled.
See the comments on each line to determine what files are compiled and should be customized.
*/
// #define HARDWARE_NANOKEYER_REV_B // https://nanokeyer.wordpress.com/nanokeyer-info/ edit these files: keyer_pin_settings_nanokeyer_rev_b.h, keyer_features_and_options_nanokeyer_rev_b.h, keyer_settings_nanokeyer_rev_b.h
// #define HARDWARE_NANOKEYER_REV_D // https://nanokeyer.wordpress.com/nanokeyer-info/ edit these files: keyer_pin_settings_nanokeyer_rev_d.h, keyer_features_and_options_nanokeyer_rev_d.h, keyer_settings_nanokeyer_rev_d.h
// #define HARDWARE_OPEN_INTERFACE // http://remoteqth.com/open-interface.php edit these files: keyer_pin_settings_open_interface.h, keyer_features_and_options_open_interface.h, keyer_settings_open_interface.h
// #define HARDWARE_TINYKEYER // http://www.ok1rr.com/index.php/technical-topics/122-the-tinykeyer edit these files: keyer_pin_settings_tinykeyer.h, keyer_features_and_options_tinykeyer.h, keyer_settings_tinykeyer.h
// #define HARDWARE_FK_10 // Funtronics K3NG Keyer FK-10 - See notes below!!! http://www.elekitsorparts.com/product/funtronics-k3ng-keyer-fk-10-99-winkey-emulation/ files: keyer_pin_settings_fk_10.h, keyer_features_and_options_fk_10.h, keyer_settings_fk_10.h
// #define HARDWARE_FK_11 // Funtronics K3NG Keyer FK-11 - See notes below! https://www.elekitsorparts.com/?product=funtronics-k3ng-keyer-with-99-winkey-emulation files: keyer_pin_settings_fk_11.h, keyer_features_and_options_fk_11.h, keyer_settings_fk_11.h
// #define HARDWARE_MAPLE_MINI // edit these files: keyer_pin_settings_maple_mini.h, keyer_settings_maple_mini.h, keyer_features_and_options_maple_mini.h
// #define HARDWARE_GENERIC_STM32F103C // edit these files: keyer_pin_settings_generic_STM32F103C.h, keyer_settings_generic_STM32F103C.h, keyer_features_and_options_generic_STM32F103C.h //sp5iou 20180329
// #define HARDWARE_MORTTY // edit these files: keyer_pin_settings_mortty.h, keyer_settings_mortty.h, keyer_features_and_options_mortty.h
// #define HARDWARE_MORTTY_REGULAR // edit these files: keyer_pin_settings_mortty_regular.h, keyer_settings_mortty_regular.h, keyer_features_and_options_mortty_regular.h
// #define HARDWARE_MORTTY_REGULAR_WITH_POTENTIOMETER // edit these files: keyer_pin_settings_mortty_regular_with_potentiometer.h, keyer_settings_mortty_regular_with_potentiometer.h, keyer_features_and_options_mortty_regular_with_potentiometer.h
// #define HARDWARE_MORTTY_SO2R // edit these files: keyer_pin_settings_mortty_so2r.h, keyer_settings_mortty_so2r.h, keyer_features_and_options_mortty_so2r.h
// #define HARDWARE_MORTTY_SO2R_WITH_POTENTIOMETER // edit these files: keyer_pin_settings_mortty_so2r_with_potentiometer.h, keyer_settings_mortty_so2r_with_potentiometer.h, keyer_features_and_options_mortty_so2r_with_potentiometer.h
// #define HARDWARE_YAACWK // http://i1cra.briata.org/yaacwk/ files: keyer_pin_settings_yaacwk.h, keyer_features_and_options_yaacwk.h, keyer_settings_yaacwk.h
// #define HARDWARE_K5BCQ // edit these files: keyer_pin_settings_k5bcq.h, keyer_features_and_options_k5bcq.h, keyer_settings_k5bcq.h
// #define HARDWARE_MEGAKEYER // https://github.com/w6ipa/megakeyer
// #define HARDWARE_OPENCWKEYER_MK2 // https://github.com/ok1cdj/OpenCWKeyerMK2 edit these files: keyer_features_and_options_opencwkeyer_mk2.h keyer_pin_settings_opencwkeyer_mk2.h keyer_settings_opencwkeyer_mk2.h
// #define HARDWARE_IZ3GME // https://github.com/iz3gme/k3ng_cw_keyer edit these files: keyer_features_and_options_iz3gme.h keyer_pin_settings_iz3gme.h keyer_settings.h
// #define HARDWARE_YCCC_SO2R_MINI // edit these files: keyer_pin_settings_yccc_so2r_mini.h, keyer_settings_yccc_so2r_mini.h, keyer_features_and_options_yccc_so2r_mini.h
// #define HARDWARE_TEST_EVERYTHING
// #define HARDWARE_TEST
/*
HARDWARE_GENERIC_STM32F103C (Contributed by sp5iou)
How to deal with those boards with Arduino: https://www.techshopbd.com/uploads/product_document/STM32bluepillarduinoguide(1).pdf
Funtronics FK-10 Programming Notes (Contributed by Disneysw 2016-12-10)
Programming the unit is accomplished by selecting "Mega2560" as the target processor and uploading to the rear USB port with the front
switch set to the Arduino position
Note: in order to get the FK-10 USB Host port working correctly you will need to patch the file "UsbCore.h" in the USB_Host_Shield library.
At the time of writing it is line 41 that needs modified to change "P10" to "P53" i.e. from
#else
typedef MAX3421e<P10, P9> MAX3421E; // Official Arduinos (UNO, Duemilanove, Mega, 2560, Leonardo, Due etc.) or Teensy 2.0 and 3.0
#endif
to:
#else
typedef MAX3421e<P53, P9> MAX3421E; // Official Arduinos (UNO, Duemilanove, Mega, 2560, Leonardo, Due etc.) or Teensy 2.0 and 3.0
#endif
Funtronics FK-11 Programming Notes
Programming the unit is accomplished by selecting "Arduino Mega 2560" as the target processor and uploading to the rear USB port with the
front switch set to the Arduino position.
Note: in order to get the FK-11 display working correctly you will need to:
- Install FaBo_212_LCD_PCF8574 library
- Set the slave address to 0x27 in FaBo_212_LCD_PCF8574/src/FaBoLCD_PCF8574.h
#define PCF8574_SLAVE_ADDRESS 0x27
Note: in order to get the FK-11 USB Host port working correctly you will need to:
- Uncomment three lines in in file: k3ng_keyer.ino below 'note_usb_uncomment_lines'.
- Add line to file k3ng_cw_keyer/libraries/USB_Host_Shield/settings.h, below 'Manual board activation':
#define BOARD_MEGA_ADK
*/
// Serial port class definitions for various devices
#if defined(ARDUINO_MAPLE_MINI)||defined(ARDUINO_GENERIC_STM32F103C) //sp5iou 20180329
#define PRIMARY_SERIAL_CLS USBSerial
#define SECONDARY_SERIAL_CLS USBSerial
#elif defined(ARDUINO_AVR_PROMICRO) || defined(ARDUINO_AVR_LEONARDO) || defined(ARDUINO_AVR_MICRO) || defined(ARDUINO_AVR_YUN) || defined(ARDUINO_AVR_ESPLORA) || defined(ARDUINO_AVR_LILYPAD_USB) || defined(ARDUINO_AVR_ROBOT_CONTROL) || defined(ARDUINO_AVR_ROBOT_MOTOR) || defined(ARDUINO_AVR_LEONARDO_ETH) || defined(ARDUINO_SAMD_VARIANT_COMPLIANCE)
#define PRIMARY_SERIAL_CLS Serial_
#define SECONDARY_SERIAL_CLS Serial_
#elif defined(TEENSYDUINO)
#define PRIMARY_SERIAL_CLS usb_serial_class
#define SECONDARY_SERIAL_CLS usb_serial_class
#elif defined(_BOARD_PIC32_PINGUINO_) // || defined(_BOARD_PIC32_PINGUINO_OTG_)
#define PRIMARY_SERIAL_CLS USBSerial
#define SECONDARY_SERIAL_CLS HardwareSerial
#else
#define PRIMARY_SERIAL_CLS HardwareSerial
#define SECONDARY_SERIAL_CLS HardwareSerial
#endif

161
k3ng_keyer/keyer_pin_settings.h Executable file
View File

@ -0,0 +1,161 @@
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 6
#define paddle_right 5
#define tx_key_line_1 12 // (high = key down/tx on)
#define tx_key_line_2 0
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 4 // connect a speaker for sidetone
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 11 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
#define command_mode_active_led 7
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#if defined(FEATURE_LCD_4BIT) || defined(FEATURE_LCD_8BIT)
#define lcd_rs A2
#define lcd_enable 10 // pin 10 is used by Ethernet shield and will conflict with that
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#if defined(FEATURE_LCD_8BIT) // addition four data lines for 8 bit LCD control
#define lcd_d0 20
#define lcd_d1 21
#define lcd_d2 22
#define lcd_d3 23
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data 2
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,142 @@
/* Pins - you must review these and configure ! */
// ######## ## ## ## ## ## ## ######## ## ## ######## ########
// ## ## ## ### ## ## ## ## ## ## ## ## ##
// ## ## ## #### ## ## ## ## #### ## ## ##
// ###### ## ## ## ## ## ##### ###### ## ###### ########
// ## ## ## ## #### ## ## ## ## ## ## ##
// ## ## ## ## ### ## ## ## ## ## ## ##
// ## ####### ## ## ## ## ######## ## ######## ## ##
// ######## ## ## ## #####
// ## ## ## #### ## ##
// ## ## ## ## ## ##
// ###### ##### ## ## ##
// ## ## ## ## ## ##
// ## ## ## ## ## ##
// ## ## ## ###### #####
// Contributed by Disneysw
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2
#define paddle_right 5
#define tx_key_line_1 39 // (high = key down/tx on)
#define tx_key_line_2 0
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 3 // connect a speaker for sidetone
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 40 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A2
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
//lcd pins
#ifdef FEATURE_LCD_4BIT
#define lcd_rs 49
#define lcd_enable 48
#define lcd_d4 47
#define lcd_d5 46
#define lcd_d6 45
#define lcd_d7 44
#endif //FEATURE_LCD_4BIT
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 42 // CW Encoder Pin
#define rotary_pin2 43 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin A4 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin A4 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 4 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,164 @@
// Funtronics FK-11
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2
#define paddle_right 5
#define tx_key_line_1 39 // (high = key down/tx on)
#define tx_key_line_2 0
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 3 // connect a speaker for sidetone
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 40 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A2
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#if defined(FEATURE_LCD_4BIT) || defined(FEATURE_LCD_8BIT)
#define lcd_rs A2
#define lcd_enable 10 // pin 10 is used by Ethernet shield and will conflict with that
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#if defined(FEATURE_LCD_8BIT) // addition four data lines for 8 bit LCD control
#define lcd_d0 20
#define lcd_d1 21
#define lcd_d2 22
#define lcd_d3 23
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 43 // CW Encoder Pin
#define rotary_pin2 42 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin A4 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin A4 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 4 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,169 @@
/*
GENERIC STM32F103C Blue Pill board
*/
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left PA1
#define paddle_right PA0
#define tx_key_line_1 PC15 // (high = key down/tx on)
#define tx_key_line_2 0
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line PB9 // connect a speaker for sidetone
#define potentiometer 0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 PC14 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin PA3
#define command_mode_active_led PC13 //for Generic STM32103C On Board LED
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 0 //PA15
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#ifdef FEATURE_LCD_4BIT
#define lcd_rs PB12
#define lcd_enable PB13
#define lcd_d4 PB14
#define lcd_d5 PB15
#define lcd_d6 PA8
#define lcd_d7 PA9
#endif //FEATURE_LCD_4BIT
#if defined(FEATURE_LCD_8BIT) // addition four data lines for 8 bit LCD control
#define lcd_d0 20
#define lcd_d1 21
#define lcd_d2 22
#define lcd_d3 23
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs PB12
#define lcd_enable PB13
#define lcd_d4 PB14
#define lcd_d5 PB15
#define lcd_d6 PA8
#define lcd_d7 PA9
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data 0 // for STM boards it can not be Ax - muste use pin numbers only or PBx, PCx etc... sp5iou
#define ps2_keyboard_clock 0 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 PB7 // CW Encoder Pin
#define rotary_pin2 PB8 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi 0 //Data
#define led_ring_clk 0 //Clock
#define led_ring_le 0 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 0
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 PB11
#define Row2 PB10
#define Row1 PB1
#define Row0 PB0
#define Col3 PA7
#define Col2 PA6
#define Col1 PA5
#define Col0 PA4
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 PB11
#define Row2 PB10
#define Row1 PB1
#define Row0 PB0
#define Col2 PA7
#define Col1 PA6
#define Col0 PA5
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,161 @@
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left A3
#define paddle_right A4
#define tx_key_line_1 A2 // (high = key down/tx on)
#define tx_key_line_2 0
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 0 // connect a speaker for sidetone
#define potentiometer A5 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 0 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A6
#define command_mode_active_led 13
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#if defined(FEATURE_LCD_4BIT) || defined(FEATURE_LCD_8BIT)
#define lcd_rs 7
#define lcd_enable 6 // pin 10 is used by Ethernet shield and will conflict with that
#define lcd_d4 5
#define lcd_d5 4
#define lcd_d6 3
#define lcd_d7 1
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#if defined(FEATURE_LCD_8BIT) // addition four data lines for 8 bit LCD control
#define lcd_d0 20
#define lcd_d1 21
#define lcd_d2 22
#define lcd_d3 23
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,161 @@
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 5
#define paddle_right 4
#define tx_key_line_1 8 // (high = key down/tx on)
#define tx_key_line_2 9
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 31 // connect a speaker for sidetone Set to "12" if not using Twin T oscillator
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 10 // PTT ("push to talk") lines
#define ptt_tx_2 11 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
#define command_mode_active_led 29
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#if defined(FEATURE_LCD_4BIT) || defined(FEATURE_LCD_8BIT)
#define lcd_rs 38
#define lcd_enable 32 // pin 10 is used by Ethernet shield and will conflict with that
#define lcd_d4 33
#define lcd_d5 35
#define lcd_d6 37
#define lcd_d7 39
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#if defined(FEATURE_LCD_8BIT) // addition four data lines for 8 bit LCD control
#define lcd_d0 20
#define lcd_d1 21
#define lcd_d2 22
#define lcd_d3 23
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 6 // CW Encoder Pin
#define rotary_pin2 7 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 27
#define wrong_answer_led 25
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin A3 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin A0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 23 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 43
#define Row2 42
#define Row1 41
#define Row0 40
#define Col3 51
#define Col2 50
#define Col1 49
#define Col0 48
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 43
#define Row2 42
#define Row1 41
#define Row0 40
#define Col2 50
#define Col1 49
#define Col0 48
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,176 @@
/*
# # ## ##### # ###### # # # # # #
## ## # # # # # # ## ## # ## # #
# ## # # # # # # ##### # ## # # # # # #
# # ###### ##### # # # # # # # # #
# # # # # # # # # # # ## #
# # # # # ###### ###### # # # # # #
*/
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 10
#define paddle_right 11
#define tx_key_line_1 12 // (high = key down/tx on)
#define tx_key_line_2 15
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
//#define sidetone_line 8 // connect a speaker for sidetone
uint8_t sidetone_line = 8; // sp5iou must be variable declaration instead of #define... for STM32 boards.
#define potentiometer 4 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 13 // PTT ("push to talk") lines
#define ptt_tx_2 16 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin 3
#define command_mode_active_led PB1
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 0
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#ifdef FEATURE_LCD_4BIT
#define lcd_rs 17
#define lcd_enable 18
#define lcd_d4 19
#define lcd_d5 20
#define lcd_d6 21
#define lcd_d7 22
#endif //FEATURE_LCD_4BIT
#if defined(FEATURE_LCD_8BIT) // addition four data lines for 8 bit LCD control
#define lcd_d0 23
#define lcd_d1 24
#define lcd_d2 25
#define lcd_d3 26
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 17
#define lcd_enable 18
#define lcd_d4 19
#define lcd_d5 20
#define lcd_d6 21
#define lcd_d7 22
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3 // for maple it can not be Ax - muste use pin numbers only or PBx, PCx etc... sp5iou
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 6
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,162 @@
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 34
#define paddle_right 32
#define tx_key_line_1 46 // (high = key down/tx on)
#define tx_key_line_2 12
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 3 // connect a speaker for sidetone
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 40 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A3
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#if defined(FEATURE_LCD_4BIT) || defined(FEATURE_LCD_8BIT)
#define lcd_rs A2
#define lcd_enable 10 // pin 10 is used by Ethernet shield and will conflict with that
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#if defined(FEATURE_LCD_8BIT) // addition four data lines for 8 bit LCD control
#define lcd_d0 20
#define lcd_d1 21
#define lcd_d2 22
#define lcd_d3 23
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data 16
#define ps2_keyboard_clock 18 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 6 // CW Encoder Pin
#define rotary_pin2 8 // CCW Encoder Pin
// #define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,162 @@
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2
#define paddle_right 5
#define tx_key_line_1 11 // (high = key down/tx on)
#define tx_key_line_2 12
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 4 // connect a speaker for sidetone
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 13 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#if defined(FEATURE_LCD_4BIT) || defined(FEATURE_LCD_8BIT)
#define lcd_rs A2
#define lcd_enable 10 // pin 10 is used by Ethernet shield and will conflict with that
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#if defined(FEATURE_LCD_8BIT) // addition four data lines for 8 bit LCD control
#define lcd_d0 20
#define lcd_d1 21
#define lcd_d2 22
#define lcd_d3 23
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 40
#define sequencer_2_pin 41
#define sequencer_3_pin 42
#define sequencer_4_pin 43
#define sequencer_5_pin 44
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,157 @@
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2
#define paddle_right 5
#define tx_key_line_1 11 // (high = key down/tx on)
#define tx_key_line_2 12
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 4 // connect a speaker for sidetone
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 13 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#ifdef FEATURE_LCD_4BIT
#define lcd_rs A2
#define lcd_enable 10
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#endif //FEATURE_LCD_4BIT
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 40
#define sequencer_2_pin 41
#define sequencer_3_pin 42
#define sequencer_4_pin 43
#define sequencer_5_pin 44
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,155 @@
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2
#define paddle_right 5
#define tx_key_line_1 11 // (high = key down/tx on)
#define tx_key_line_2 12
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 4 // connect a speaker for sidetone
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 13 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#ifdef FEATURE_LCD_4BIT
#define lcd_rs A2
#define lcd_enable 10
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#endif //FEATURE_LCD_4BIT
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 40
#define sequencer_2_pin 41
#define sequencer_3_pin 42
#define sequencer_4_pin 43
#define sequencer_5_pin 44
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,155 @@
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2
#define paddle_right 5
#define tx_key_line_1 11 // (high = key down/tx on)
#define tx_key_line_2 13
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 4 // connect a speaker for sidetone
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 0 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#ifdef FEATURE_LCD_4BIT
#define lcd_rs A2
#define lcd_enable 10
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#endif //FEATURE_LCD_4BIT
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 40
#define sequencer_2_pin 41
#define sequencer_3_pin 42
#define sequencer_4_pin 43
#define sequencer_5_pin 44
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,155 @@
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2
#define paddle_right 5
#define tx_key_line_1 11 // (high = key down/tx on)
#define tx_key_line_2 13
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 4 // connect a speaker for sidetone
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 0 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#ifdef FEATURE_LCD_4BIT
#define lcd_rs A2
#define lcd_enable 10
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#endif //FEATURE_LCD_4BIT
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 40
#define sequencer_2_pin 41
#define sequencer_3_pin 42
#define sequencer_4_pin 43
#define sequencer_5_pin 44
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,96 @@
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2
#define paddle_right 5
#define tx_key_line_1 11 // (high = key down/tx on)
#define tx_key_line_2 13 // Rev A & B nanoKeyer PTT port
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 4 // connect a speaker for sidetone
#define potentiometer A7 // Rev A & B nanoKeyer
#define ptt_tx_1 0 // PTT ("push to talk") lines
//#define ptt_tx_1 13 // nanoKeyer PTT port
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define analog_buttons_pin A6 // Rev A & B nanokeyer
#define lcd_rs A2
#define lcd_enable 10
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#define ps2_keyboard_data A5 // Rev A & B nanokeyer
#define ps2_keyboard_clock 3
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#if defined(FEATURE_SLEEP)
#define keyer_awake 13 // Goes active when keyer is awake, inactive when in sleep mode; change active and inactive states in keyer_settings file
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,74 @@
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2
#define paddle_right 5
#define tx_key_line_1 11 // (high = key down/tx on)
#define tx_key_line_2 0 // nanoKeyer PTT port (Pin 13) may be used as 2nd keying line for SO2R
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 4 // connect a speaker for sidetone
#define potentiometer A0 // Rev D nanoKeyer
#define ptt_tx_1 13 // nanoKeyer PTT port (uncomment if using above as 2nd CW port for SO2R operation)
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define analog_buttons_pin A1 // Rev D nanokeyer
#define lcd_rs A2
#define lcd_enable 10
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#define ps2_keyboard_data A3 // Rev D nanokeyer
#define ps2_keyboard_clock 3
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#if defined(FEATURE_SLEEP)
#define keyer_awake 13 // Goes active when keyer is awake, inactive when in sleep mode; change active and inactive states in keyer_settings file
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,143 @@
// This file is for the Open Interface http://remoteqth.com/open-interface.php
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2
#define paddle_right 5
#define tx_key_line_1 11 // (high = key down/tx on)
#define tx_key_line_2 12
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 4 // connect a speaker for sidetone
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 0 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
//lcd pins
#ifdef FEATURE_LCD_4BIT
#define lcd_rs A2
#define lcd_enable 10
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#endif //FEATURE_LCD_4BIT
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 13 // Goes active when keyer is awake, inactive when in sleep mode; change active and inactive states in keyer_settings file
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,163 @@
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2
#define paddle_right 6
#define tx_key_line_1 11 // (high = key down/tx on)
#define tx_key_line_2 13
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 4 // connect a speaker for sidetone
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 12 // PTT ("push to talk") lines
#define ptt_tx_2 13 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#if defined(FEATURE_LCD_4BIT) || defined(FEATURE_LCD_8BIT)
#define lcd_rs A2
#define lcd_enable 10 // pin 10 is used by Ethernet shield and will conflict with that
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#if defined(FEATURE_LCD_8BIT) // addition four data lines for 8 bit LCD control
#define lcd_d0 20
#define lcd_d1 21
#define lcd_d2 22
#define lcd_d3 23
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,185 @@
// ######## ######## ###### ########
// ## ## ## ## ##
// ## ## ## ##
// ## ###### ###### ##
// ## ## ## ##
// ## ## ## ## ##
// ## ######## ###### ##
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2
#define paddle_right 5
#define tx_key_line_1 11 // (high = key down/tx on)
#define tx_key_line_2 13
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#if !defined(FEATURE_ETHERNET)
#define sidetone_line 4 // connect a speaker for sidetone (pin 4 is used by the Ethernet shield!)
#else
#define sidetone_line 12
#endif
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 13 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
//lcd pins
#if defined(FEATURE_LCD_4BIT) || defined(FEATURE_LCD_8BIT)
#define lcd_rs A2
#define lcd_enable 10 // pin 10 is used by Ethernet shield and will conflict with that
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#if defined(FEATURE_LCD_8BIT) // addition four data lines for 8 bit LCD control
#define lcd_d0 20
#define lcd_d1 21
#define lcd_d2 22
#define lcd_d3 23
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4 // pin 4 is used by Ethernet shield and will conflict with that
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key A5 //52 // pin 52 doesn't work right when FEATURE_WEB_SERVER is active. don't know why 2016-04-26
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 13 // Goes active when keyer is awake, inactive when in sleep mode; change active and inactive states in keyer_settings file
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 40
#define sequencer_2_pin 41
#define sequencer_3_pin 42
#define sequencer_4_pin 43
#define sequencer_5_pin 44
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h
// ######## ######## ###### ########
// ## ## ## ## ##
// ## ## ## ##
// ## ###### ###### ##
// ## ## ## ##
// ## ## ## ## ##
// ## ######## ###### ##

View File

@ -0,0 +1,199 @@
// ######## ######## ###### ########
// ## ## ## ## ##
// ## ## ## ##
// ## ###### ###### ##
// ## ## ## ##
// ## ## ## ## ##
// ## ######## ###### ##
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2
#define paddle_right 5
#define tx_key_line_1 11 // (high = key down/tx on)
#define tx_key_line_2 12
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#if !defined(FEATURE_ETHERNET)
#define sidetone_line 4 // connect a speaker for sidetone
#else
#define sidetone_line 31 // pin 4 is used by Ethernet shield so we'll use pin 31 on the test jig...
#endif
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 13 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define so2r_tx_1 0 // Radio 1 transmitter selected (optional, set to zero if not used)
#define so2r_tx_2 11 // Radio 2 transmitter selected (optional, set to zero if not used)
#define so2r_rx_1 0 // Radio 1 receiver selected (optional, set to zero if not used)
#define so2r_rx_2 0 // Radio 2 receiver selected (optional, set to zero if not used)
#define so2r_rx_1s 0 // Radio 1 receiver or stereo selected (optional, set to zero if not used)
#define so2r_rx_2s 9 // Radio 2 receiver or stereo selected (optional, set to zero if not used)
#define so2r_rx_s 10 // Stereo receive selected (optional, set to zero if not used)
#ifdef FEATURE_SO2R_SWITCHES
#define so2r_tx_switch A5 // TX switch, low if TX1, high if TX2
#define so2r_rx1_switch A4 // RX 1 switch, low if RX1, high if RX2 or stereo
#define so2r_rx2_switch A3 // RX 2 switch, low if RX2, high if RX1 or stereo
#endif
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
//lcd pins
#if defined(FEATURE_LCD_4BIT) || defined(FEATURE_LCD_8BIT)
#define lcd_rs A2
#define lcd_enable 10 // pin 10 is used by Ethernet shield and will conflict with that
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#if defined(FEATURE_LCD_8BIT) // addition four data lines for 8 bit LCD control
#define lcd_d0 20
#define lcd_d1 21
#define lcd_d2 22
#define lcd_d3 23
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4 // pin 4 is used by Ethernet shield and will conflict with that
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key A5 //52 // pin 52 doesn't work right when FEATURE_WEB_SERVER is active. don't know why 2016-04-26
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 13 // Goes active when keyer is awake, inactive when in sleep mode; change active and inactive states in keyer_settings file
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 40
#define sequencer_2_pin 41
#define sequencer_3_pin 42
#define sequencer_4_pin 43
#define sequencer_5_pin 44
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 50
#define tx_pause_pin 48
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h
// ######## ######## ###### ########
// ## ## ## ## ##
// ## ## ## ##
// ## ###### ###### ##
// ## ## ## ##
// ## ## ## ## ##
// ## ######## ###### ##

View File

@ -0,0 +1,94 @@
// features & options for TinyKeyer by OK1RR
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 2 // dit
#define paddle_right 5 // dah
#define tx_key_line_1 12 // tinykeyer keyed port (high = key down/tx on)
#define tx_key_line_2 0
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 4 // connect a speaker for sidetone
#define potentiometer 0 // tinykeyer no pot used
#define ptt_tx_1 0 // (put 13 instead 0 to activate) tinykeyer PTT port (high = PTT down/PTT on)
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define analog_buttons_pin A1 // tinykeyer
#define command_mode_active_led 9 // tinykeyer - command mode LED indicator
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 11 // CW Encoder Pin
#define rotary_pin2 10 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#if defined(FEATURE_SLEEP)
#define keyer_awake 8 // Goes active when keyer is awake, inactive when in sleep mode; change active and inactive states in keyer_settings file
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,143 @@
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 21
#define paddle_right 22
#define tx_key_line_1 28 // (high = key down/tx on)
#define tx_key_line_2 31
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 23 // connect a speaker for sidetone
#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 0 // PTT ("push to talk") lines
#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 0
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#ifdef FEATURE_LCD_4BIT
#define lcd_rs 26 // A2
#define lcd_enable 20
#define lcd_d4 12
#define lcd_d5 13
#define lcd_d6 14
#define lcd_d7 15
#endif //FEATURE_LCD_4BIT
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 2 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 0
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0 // Goes active when keyer is awake, inactive when in sleep mode; change active and inactive states in keyer_settings file
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 0
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

View File

@ -0,0 +1,176 @@
/* Pins - you must review these and configure ! */
#ifndef keyer_pin_settings_h
#define keyer_pin_settings_h
#define paddle_left 6
#define paddle_right 7
#define tx_key_line_1 5 // (high = key down/tx on)
#define tx_key_line_2 4
#define tx_key_line_3 0
#define tx_key_line_4 0
#define tx_key_line_5 0
#define tx_key_line_6 0
#define sidetone_line 0 // connect a buzzer for sidetone (optional, set to zero if not used)
#define potentiometer A7 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k
#define ptt_tx_1 3 // Radio 1 PTT ("push to talk") line
#define ptt_tx_2 2 // Radio 2 PTT ("push to talk") line
#define ptt_tx_3 0 // These are optional - set to 0 if unused
#define ptt_tx_4 0
#define ptt_tx_5 0
#define ptt_tx_6 0
#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state
#define so2r_tx_1 0 // Radio 1 transmitter selected (optional, set to zero if not used)
#define so2r_tx_2 11 // Radio 2 transmitter selected (optional, set to zero if not used)
#define so2r_rx_1 0 // Radio 1 receiver selected (optional, set to zero if not used)
#define so2r_rx_2 0 // Radio 2 receiver selected (optional, set to zero if not used)
#define so2r_rx_1s 0 // Radio 1 receiver or stereo selected (optional, set to zero if not used)
#define so2r_rx_2s 9 // Radio 2 receiver or stereo selected (optional, set to zero if not used)
#define so2r_rx_s 10 // Stereo receive selected (optional, set to zero if not used)
#ifdef FEATURE_SO2R_SWITCHES
#define so2r_tx_switch A5 // TX switch, low if TX1, high if TX2
#define so2r_rx1_switch A4 // RX 1 switch, low if RX1, high if RX2 or stereo
#define so2r_rx2_switch A3 // RX 2 switch, low if RX2, high if RX1 or stereo
#endif
#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
#define command_mode_active_led 0
#endif //FEATURE_BUTTONS
/*
FEATURE_SIDETONE_SWITCH
Enabling this feature and an external toggle switch adds switch control for playing cw sidetone.
ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o).
Arduino pin is assigned by SIDETONE_SWITCH
*/
#ifdef FEATURE_SIDETONE_SWITCH
#define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH
//lcd pins
#if defined(FEATURE_LCD_4BIT) || defined(FEATURE_LCD_8BIT)
#define lcd_rs A2
#define lcd_enable 10 // pin 10 is used by Ethernet shield and will conflict with that
#define lcd_d4 6
#define lcd_d5 7
#define lcd_d6 8
#define lcd_d7 9
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#if defined(FEATURE_LCD_8BIT) // addition four data lines for 8 bit LCD control
#define lcd_d0 20
#define lcd_d1 21
#define lcd_d2 22
#define lcd_d3 23
#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT)
#ifdef FEATURE_LCD1602_N07DH
#define lcd_rs 8
#define lcd_enable 9
#define lcd_d4 4
#define lcd_d5 5
#define lcd_d6 6
#define lcd_d7 7
#endif //FEATURE_LCD1602_N07DH
//ps2 keyboard pins
#ifdef FEATURE_PS2_KEYBOARD
#define ps2_keyboard_data A3
#define ps2_keyboard_clock 3 // this must be on an interrupt capable pin!
#endif //FEATURE_PS2_KEYBOARD
// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE
#ifdef FEATURE_ROTARY_ENCODER
#define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode?
#define rotary_pin1 0 // CW Encoder Pin
#define rotary_pin2 0 // CCW Encoder Pin
#define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups.
#endif //FEATURE_ROTARY_ENCODER
#ifdef FEATURE_LED_RING
#define led_ring_sdi A10 //2 //Data
#define led_ring_clk A9 //3 //Clock
#define led_ring_le A8 //4 //Latch
#endif //FEATURE_LED_RING
#define correct_answer_led 0
#define wrong_answer_led 0
#ifdef FEATURE_PTT_INTERLOCK
#define ptt_interlock 0 // this pin disables PTT and TX KEY
#endif //FEATURE_PTT_INTERLOCK
#ifdef FEATURE_STRAIGHT_KEY
#define pin_straight_key 52
#endif //FEATURE_STRAIGHT_KEY
// FEATURE_CW_DECODER & OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
// See https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder for details
#define cw_decoder_pin 0 // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin 0 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator 0 // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define keyer_awake 0
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led 0 // must be a PWM-capable pin
#endif
#if defined(FEATURE_CAPACITIVE_PADDLE_PINS)
#define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode
#endif
#ifdef FEATURE_4x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col3 37
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_3x4_KEYPAD
#define Row3 33
#define Row2 32
#define Row1 31
#define Row0 30
#define Col2 36
#define Col1 35
#define Col0 34
#endif
#ifdef FEATURE_SEQUENCER
#define sequencer_1_pin 0
#define sequencer_2_pin 0
#define sequencer_3_pin 0
#define sequencer_4_pin 0
#define sequencer_5_pin 0
#endif //FEATURE_SEQUENCER
#define ptt_input_pin 8
#define tx_inhibit_pin 0
#define tx_pause_pin 0
#else
#error "Multiple pin_settings.h files included somehow..."
#endif //keyer_pin_settings_h

316
k3ng_keyer/keyer_settings.h Executable file
View File

@ -0,0 +1,316 @@
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 1.0 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 1.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 20
#define LCD_ROWS 4
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 1
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 6 // includes the command button (command button + 3 memory buttons = 4)
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#if defined(OPTION_WINKEY_UCXLOG_9600_BAUD) || defined(FEATURE_SO2R_BASE)
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD || FEATURE_SO2R_BASE
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#define FEATURE_INTERNET_LINK_SVC_DURING_LOOP_TIME_MS 20
#define FEATURE_INTERNET_LINK_KEY_DOWN_TIMEOUT_SECS 8
#if defined(FEATURE_4x4_KEYPAD) || defined(FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD) || defined(FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'R'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

338
k3ng_keyer/keyer_settings_fk_10.h Executable file
View File

@ -0,0 +1,338 @@
// Initial and hardcoded settings
// ######## ## ## ## ## ## ## ######## ## ## ######## ########
// ## ## ## ### ## ## ## ## ## ## ## ## ##
// ## ## ## #### ## ## ## ## #### ## ## ##
// ###### ## ## ## ## ## ##### ###### ## ###### ########
// ## ## ## ## #### ## ## ## ## ## ## ##
// ## ## ## ## ### ## ## ## ## ## ## ##
// ## ####### ## ## ## ## ######## ## ######## ## ##
// ######## ## ## ## #####
// ## ## ## #### ## ##
// ## ## ## ## ## ##
// ###### ##### ## ## ##
// ## ## ## ## ## ##
// ## ## ## ## ## ##
// ## ## ## ###### #####
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.178")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

318
k3ng_keyer/keyer_settings_fk_11.h Executable file
View File

@ -0,0 +1,318 @@
// Funtronics FK-11
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 5 // includes the command button (command button + 3 memory buttons = 4)
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD || defined(FEATURE_SO2R_BASE)
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD || FEATURE_SO2R_BASE
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,324 @@
/*
GENERIC STM32F103C
*/
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
//#define default_pot_full_scale_reading 1023 //For AVR boards
#define default_pot_full_scale_reading 4095 //SP5IOU 20180329 FOR stm32 Boards.
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 1 // For Keypad only command butrton is neaded 6 //4 // includes the command button (command button + 3 memory buttons = 4) //sp5iou 20180319
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
// #define number_of_memories byte(12)
#define number_of_memories byte(10) //sp5iou 20180329 With many memories, be carefull to not put to much content. It caould disable memory programming and eeprom formatting is then necessary
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI) || defined(ARDUINO_GENERIC_STM32f103C) //sp5iou 20180329
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,316 @@
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 5 // includes the command button (command button + 3 memory buttons = 4)
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

315
k3ng_keyer/keyer_settings_k5bcq.h Executable file
View File

@ -0,0 +1,315 @@
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 700 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16 //edit for 1602 or 1604 LCD
#define LCD_ROWS 2 //edit for 1602 or 1604 LCD
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 8 // includes the command button (command button + 3 memory buttons = 4)
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,329 @@
/*
# # ## ##### # ###### # # # # # #
## ## # # # # # # ## ## # ## # #
# ## # # # # # # ##### # ## # # # # # #
# # ###### ##### # # # # # # # # #
# # # # # # # # # # # ## #
# # # # # ###### ###### # # # # # #
*/
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4 // includes the command button (command button + 3 memory buttons = 4)
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,321 @@
//
// Initial setting for W6IPA megakeyer v1.1 (CC) BY-NC-SA
// Project files are available here https://github.com/w6ipa/megakeyer
//
#define initial_speed_wpm 20 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4 // includes the command button (command button + 3 memory buttons = 4)
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,318 @@
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 0 //=====150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,318 @@
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 0 //=====150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,318 @@
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 0 //=====150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,318 @@
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 0 //=====150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,318 @@
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 0 //=====150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,309 @@
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(3) //12
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 40 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.178")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,310 @@
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 40 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.178")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,312 @@
// This file is for the Open Interface http://remoteqth.com/open-interface.php
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 40 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.178")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,316 @@
// Initial and hardcoded settings
#define initial_speed_wpm 25 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 40 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 3 // includes the command button (command button + 3 memory buttons = 4)
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

652
k3ng_keyer/keyer_settings_test.h Executable file
View File

@ -0,0 +1,652 @@
// ######## ######## ###### ########
// ## ## ## ## ##
// ## ## ## ##
// ## ###### ###### ##
// ## ## ## ##
// ## ## ## ## ##
// ## ######## ###### ##
#define TEST_SETTINGS_1
// #define TEST_SETTINGS_2
#if defined(TEST_SETTINGS_1)
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state LOW
#define tx_key_dit_and_dah_pins_inactive_state HIGH
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
#define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
// #define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500 // increase this time if you have greater than 500 ms latency on your link
#define FEATURE_INTERNET_LINK_SVC_DURING_LOOP_TIME_MS 20
#define FEATURE_INTERNET_LINK_KEY_DOWN_TIMEOUT_SECS 8
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define command_mode_acknowledgement_character 'C'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
#endif //TEST_SETTINGS_1
//*********************************************************************************************************************
//*********************************************************************************************************************
//*********************************************************************************************************************
//*********************************************************************************************************************
//*********************************************************************************************************************
#if defined(TEST_SETTINGS_2)
#define initial_speed_wpm 17 // "factory default" keyer speed setting
#define initial_sidetone_freq 588 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 12 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 30 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define potentiometer_reading_threshold 1
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define cw_echo_timing_factor 0.25
#define winkey_paddle_echo_buffer_decode_time_factor 1600.0
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4 // includes the command button (command button + 3 memory buttons = 4)
#define analog_buttons_r1 10
#define analog_buttons_r2 1.2
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define initial_command_mode_speed_wpm 20
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'R'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT
#endif //TEST_SETTINGS_2
// ######## ######## ###### ########
// ## ## ## ## ##
// ## ## ## ##
// ## ###### ###### ##
// ## ## ## ##
// ## ## ## ## ##
// ## ######## ###### ##

View File

@ -0,0 +1,361 @@
// ######## ######## ###### ########
// ## ## ## ## ##
// ## ## ## ## EVERYTHING
// ## ###### ###### ##
// ## ## ## ##
// ## ## ## ## ##
// ## ######## ###### ##
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state LOW
#define tx_key_dit_and_dah_pins_inactive_state HIGH
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
#define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
// #define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500 // increase this time if you have greater than 500 ms latency on your link
#define FEATURE_INTERNET_LINK_SVC_DURING_LOOP_TIME_MS 20
#define FEATURE_INTERNET_LINK_KEY_DOWN_TIMEOUT_SECS 8
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#ifdef FEATURE_SO2R_BASE
#ifdef FEATURE_POTENTIOMETER
#ifdef FEATURE_SO2R_SWITCHES
#ifdef FEATURE_SO2R_ANTENNAS
#define SO2R_DEVICE_NAME "SO2R Mini PSA"
#else
#define SO2R_DEVICE_NAME "SO2R Mini PS"
#endif
#else
#ifdef FEATURE_SO2R_ANTENNAS
#define SO2R_DEVICE_NAME "SO2R Mini PA"
#else
#define SO2R_DEVICE_NAME "SO2R Mini P"
#endif
#endif
#else
#ifdef FEATURE_SO2R_SWITCHES
#ifdef FEATURE_SO2R_ANTENNAS
#define SO2R_DEVICE_NAME "SO2R Mini SA"
#else
#define SO2R_DEVICE_NAME "SO2R Mini S"
#endif
#else
#ifdef FEATURE_SO2R_ANTENNAS
#define SO2R_DEVICE_NAME "SO2R Mini A"
#else
#define SO2R_DEVICE_NAME "SO2R Mini"
#endif
#endif
#endif
#endif
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,310 @@
// Initial and hardcoded settings
// TinyKeyer by OK1RR
#define initial_speed_wpm 30 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 444 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 300 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 90
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 250
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 7
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 1
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(1)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 40 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.178")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,317 @@
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 20
#define LCD_ROWS 4
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 1
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 8
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#ifdef OPTION_WINKEY_UCXLOG_9600_BAUD
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 40 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.178")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095 //sp5iou contributed
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

View File

@ -0,0 +1,351 @@
// Initial and hardcoded settings
#define initial_speed_wpm 26 // "factory default" keyer speed setting
#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting
#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting
#define sidetone_hz_limit_low 299
#define sidetone_hz_limit_high 2001
#define hz_high_beep 1500 // frequency in hertz of high beep
#define hz_low_beep 400 // frequency in hertz of low beep
#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio
#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS
#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS
#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS
#define initial_qrss_dit_length 1 // QRSS dit length in seconds
#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW
#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW
#define wpm_limit_low 5
#define wpm_limit_high 60
#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this
#define send_buffer_size 150
#define default_length_letterspace 3
#define default_length_wordspace 7
#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors
#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah
#define default_pot_full_scale_reading 1023
#define default_weighting 50 // 50 = weighting factor of 1 (normal)
#define default_ptt_hang_time_wordspace_units 0.0
#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent
#define winkey_command_timeout_ms 5000
#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above
#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs
#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF
#define default_memory_repeat_time 3000 // time in milliseconds
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display for FEATURE_LCD_MATHERTEL_PCF8574
#define lcd_i2c_address_fdebrander_lcd 0x27 // I2C address of display for FEATURE_LCD_I2C_FDEBRABANDER
#define lcd_i2c_address_ydv1_lcd 0x27 // I2C address of display for FEATURE_LCD_YDv1
//#define lcd_i2c_address_ydv1_lcd 0x38 // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_sainsmart_lcd 0x27 // I2C address of display for FEATURE_LCD_SAINSMART_I2C
#define hell_pixel_microseconds 4025
#define program_memory_limit_consec_spaces 1
#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001)
#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N)
#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP
#define dim_backlight_inactive_time 5 // minutes - FEATURE_LCD_BACKLIGHT_AUTO_DIM
#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior)
#define default_cw_echo_timing_factor 1.75 // "factory default" setting
#define default_autospace_timing_factor 2.0 // "factory default" setting
#define winkey_paddle_echo_buffer_decode_timing_factor 0.25
#define potentiometer_always_on 0
#define ptt_interlock_check_every_ms 100
#define ptt_interlock_active_state HIGH
#define unknown_cw_character '*'
#define cli_paddle_echo_on_at_boot 1
#define cli_straight_key_echo_on_at_boot 1
#define tx_key_dit_and_dah_pins_active_state HIGH
#define tx_key_dit_and_dah_pins_inactive_state LOW
#define potentiometer_check_interval_ms 0 //=====150
#define potentiometer_reading_threshold 1
#define default_paddle_interruption_quiet_time_element_lengths 0
#define default_wordsworth_wordspace 6
#define default_wordsworth_repetition 1
#define serial_program_memory_buffer_size 500
#define eeprom_write_time_ms 30000
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 4
#define analog_buttons_r1 10
#define analog_buttons_r2 1
#endif
#if defined(FEATURE_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION)
#define number_of_memories byte(analog_buttons_number_of_buttons-1)
#else
#define number_of_memories byte(12)
#endif
#ifdef FEATURE_CAPACITIVE_PADDLE_PINS
#define capacitance_threshold 2
#endif //FEATURE_CAPACITIVE_PADDLE_PINS
#ifdef FEATURE_LED_RING
#define led_ring_low_limit 10
#define led_ring_high_limit 50
#endif //FEATURE_LED_RING
#ifdef FEATURE_QLF
#define qlf_dit_max 125
#define qlf_dit_min 75
#define qlf_dah_max 200
#define qlf_dah_min 100
#define qlf_on_by_default 0
#endif //FEATURE_QLF
#ifdef FEATURE_WINKEY_EMULATION
#if defined(OPTION_WINKEY_UCXLOG_9600_BAUD) || defined(FEATURE_SO2R_BASE)
#define WINKEY_DEFAULT_BAUD 9600
#else
#define WINKEY_DEFAULT_BAUD 1200
#endif //OPTION_WINKEY_UCXLOG_9600_BAUD || FEATURE_SO2R_BASE
// alter these below to map alternate sidetones for Winkey interface protocol emulation
#ifdef OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 3759
#define WINKEY_SIDETONE_2 1879
#define WINKEY_SIDETONE_3 1252
#define WINKEY_SIDETONE_4 940
#define WINKEY_SIDETONE_5 752
#define WINKEY_SIDETONE_6 625
#define WINKEY_SIDETONE_7 535
#define WINKEY_SIDETONE_8 469
#define WINKEY_SIDETONE_9 417
#define WINKEY_SIDETONE_10 375
#else //OPTION_WINKEY_2_SUPPORT
#define WINKEY_SIDETONE_1 4000
#define WINKEY_SIDETONE_2 2000
#define WINKEY_SIDETONE_3 1333
#define WINKEY_SIDETONE_4 1000
#define WINKEY_SIDETONE_5 800
#define WINKEY_SIDETONE_6 666
#define WINKEY_SIDETONE_7 571
#define WINKEY_SIDETONE_8 500
#define WINKEY_SIDETONE_9 444
#define WINKEY_SIDETONE_10 400
#endif //OPTION_WINKEY_2_SUPPORT
#define WINKEY_1_REPORT_VERSION_NUMBER 10
#define WINKEY_2_REPORT_VERSION_NUMBER 23
// alter these to map to alternate hang time wordspace units
#define WINKEY_HANG_TIME_1_0 1.0
#define WINKEY_HANG_TIME_1_33 1.33
#define WINKEY_HANG_TIME_1_66 1.66
#define WINKEY_HANG_TIME_2_0 2.0
#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16
#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE
#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00
#endif //FEATURE_WINKEY_EMULATION
#define PRIMARY_SERIAL_PORT &Serial
#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200.
#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT
#define SECONDARY_SERIAL_PORT &Serial1
#define SECONDARY_SERIAL_PORT_BAUD 115200
#endif
#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns
#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths
#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths
#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS)
#define STRAIGHT_KEY_ACTIVE_STATE LOW
#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30
#define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70
#define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio
#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO
#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
#define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1
#define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0
#define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION
#if defined(FEATURE_SLEEP)
#define KEYER_AWAKE_PIN_AWAKE_STATE HIGH
#define KEYER_AWAKE_PIN_ASLEEP_STATE LOW
#endif
#if defined(FEATURE_LCD_BACKLIGHT_AUTO_DIM)
#define keyer_power_led_awake_duty 255 // PWM duty cycle. 0 is 0%, 255 is 100%
#define keyer_power_led_asleep_duty 25 // 25 is quite dim. Use 0 for off
#endif
#if defined(FEATURE_ETHERNET)
// #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178")
// #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}
#define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179")
#define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE}
#define FEATURE_ETHERNET_DNS {8,8,8,8}
#define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway
#define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask
#define FEATURE_ETHERNET_WEB_LISTENER_PORT 80
#define FEATURE_UDP_SEND_BUFFER_SIZE 128
#define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128
#endif //FEATURE_ETHERNET
#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10
#define FEATURE_INTERNET_LINK_MAX_LINKS 2
#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888
#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500
#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define KEYPAD_ROWS 4 //KeyPad Rows
#if defined(FEATURE_4x4_KEYPAD)
#define KEYPAD_COLS 4 //keypad Columns
#else
#define KEYPAD_COLS 3
#endif
#define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0"
#define mem2 1
#define mem3 2
#define mem4 3
#define mem5 4
#define mem6 5
#define mem7 6
#define mem8 7
#define mem9 8
#define mem10 9
#define mem11 10
#define mem12 11
#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD)
#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY
#define sd_card_spi_ss_line 4
#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS)
// For V1.1 board use these values
#define dfrobot_btnRIGHT_analog 50
#define dfrobot_btnUP_analog 250
#define dfrobot_btnDOWN_analog 450
#define dfrobot_btnLEFT_analog 650
#define dfrobot_btnSELECT_analog 850
// For V1.0 board use these values
// #define dfrobot_btnRIGHT_analog 50
// #define dfrobot_btnUP_analog 195
// #define dfrobot_btnDOWN_analog 380
// #define dfrobot_btnLEFT_analog 555
// #define dfrobot_btnSELECT_analog 790
// button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.)
#define dfrobot_btnRIGHT 2
#define dfrobot_btnUP 1
#define dfrobot_btnDOWN 3
#define dfrobot_btnLEFT 4
#define dfrobot_btnSELECT 0
#define dfrobot_btnNONE 255 // do not change
#endif
#define sequencer_pins_active_state HIGH
#define sequencer_pins_inactive_state LOW
#define ptt_line_active_state HIGH
#define ptt_line_inactive_state LOW
#define tx_key_line_active_state HIGH
#define tx_key_line_inactive_state LOW
#define ptt_input_pin_active_state LOW
#define ptt_input_pin_inactive_state HIGH
#define tx_inhibit_pin_active_state LOW
#define tx_inhibit_pin_inactive_state HIGH
#define tx_pause_pin_active_state LOW
#define tx_pause_pin_inactive_state HIGH
#define sidetone_line_active_state HIGH
#define sidetone_line_inactive_state LOW
#if defined(ARDUINO_MAPLE_MINI)
#define button_value_factor 4095
#else
#define button_value_factor 1023
#endif
#define farnsworth_timing_calibration 1.15
#define sidetone_volume_low_limit 10
#define sidetone_volume_high_limit 500
#ifdef FEATURE_SO2R_BASE
#ifdef FEATURE_POTENTIOMETER
#ifdef FEATURE_SO2R_SWITCHES
#ifdef FEATURE_SO2R_ANTENNAS
#define SO2R_DEVICE_NAME "SO2R Mini PSA"
#else
#define SO2R_DEVICE_NAME "SO2R Mini PS"
#endif
#else
#ifdef FEATURE_SO2R_ANTENNAS
#define SO2R_DEVICE_NAME "SO2R Mini PA"
#else
#define SO2R_DEVICE_NAME "SO2R Mini P"
#endif
#endif
#else
#ifdef FEATURE_SO2R_SWITCHES
#ifdef FEATURE_SO2R_ANTENNAS
#define SO2R_DEVICE_NAME "SO2R Mini SA"
#else
#define SO2R_DEVICE_NAME "SO2R Mini S"
#endif
#else
#ifdef FEATURE_SO2R_ANTENNAS
#define SO2R_DEVICE_NAME "SO2R Mini A"
#else
#define SO2R_DEVICE_NAME "SO2R Mini"
#endif
#endif
#endif
#endif
#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display
#define command_mode_acknowledgement_character 'E'
#if defined(FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT)
#define command_a_iambic_a "A"
#define command_b_iambic_b "B"
#define command_c_single_paddle "SINGLE"
#define command_d_ultimatic "ULT"
#define command_h_weight_dit_dah_ratio_default "R"
#define command_i_tx_on "TX ON"
#define command_i_tx_off "TX OFF"
#define command_k_dit_dah_buffers_on "ON"
#define command_k_dit_dah_buffers_off "OFF"
#define command_n_paddle_reverse "REV"
#define command_n_paddle_normal "NORM"
#define command_o_sidetone_off "ST OFF"
#define command_o_sidetone_paddle_only "ST PD ONLY"
#define command_o_sidetone_on "ST ON"
#define command_t_tune_mode "TUNE"
#define command_v_potentiometer_on "POT ON"
#define command_v_potentiometer_off "POT OFF"
#define command_error "ERR"
#endif //FEATURE_COMMAND_MODE_ENHANCED_CMD_ACKNOWLEDGEMENT

39
k3ng_keyer/keyer_stm32duino.h Executable file
View File

@ -0,0 +1,39 @@
/* keyer_stm32fduino.h
Use this file to enables clean compilation using the STM32duino board support for STM32 ARM
processors. This requires the installation of https://github.com/rogerclarkmelbourne/Arduino_STM32
For more information about STM32duino visit the primary support forum: http://www.stm32duino.com/
*/
void initialize_pins(void);
void initialize_keyer_state(void);
void initialize_potentiometer(void);
void initialize_rotary_encoder(void);
void initialize_default_modes(void);
void initialize_watchdog(void);
void initialize_ethernet_variables(void);
void check_eeprom_for_initialization(void);
void check_for_beacon_mode(void);
void check_for_debug_modes(void);
void initialize_analog_button_array(void);
void initialize_serial_ports(void);
void initialize_ps2_keyboard(void);
void initialize_usb(void);
void initialize_cw_keyboard(void);
void initialize_display(void);
void initialize_ethernet(void);
void initialize_udp(void);
void initialize_web_server(void);
void initialize_debug_startup(void);
void check_paddles(void);
void service_dit_dah_buffers(void);
void service_send_buffer(byte);
void check_ptt_tail(void);
void check_for_dirty_configuration(void);
void tone(uint32_t, uint32_t, uint32_t);
void noTone(uint32_t);
void serial_status(PRIMARY_SERIAL_CLS*);

View File

@ -0,0 +1,266 @@
// keyer_training_text_czech.h
// Czech word list contributed by Martin, OK1RR
// English word list originally from gen_cw_words.pl - a program that generates words in a random order,
// intended to be used during morse code practice.
// Original gen_cw_words.pl code Copyright (C) 2015,2017 Andy Stewart (KB1OIQ)
// https://sourceforge.net/projects/kb1oiq-k1ig-wordsworth/
// two letter word array
const char s2_1[] PROGMEM = "DO";
const char s2_2[] PROGMEM = "NA";
const char s2_3[] PROGMEM = "PO";
const char s2_4[] PROGMEM = "MY";
const char s2_5[] PROGMEM = "TO";
const char s2_6[] PROGMEM = "NE";
const char s2_7[] PROGMEM = "VY";
const char s2_8[] PROGMEM = "ZE";
const char s2_9[] PROGMEM = "VE";
const char s2_10[] PROGMEM = "JA";
const char s2_11[] PROGMEM = "TY";
const char s2_12[] PROGMEM = "BY";
const char s2_13[] PROGMEM = "ON";
const char s2_14[] PROGMEM = "SE";
const char s2_15[] PROGMEM = "AZ";
const char s2_16[] PROGMEM = "TU";
const char s2_17[] PROGMEM = "TI";
const char s2_18[] PROGMEM = "ZA";
const char s2_19[] PROGMEM = "CI";
const char s2_20[] PROGMEM = "CO";
const char s2_21[] PROGMEM = "JI";
const char s2_22[] PROGMEM = "MU";
const char s2_23[] PROGMEM = "JE";
const char s2_24[] PROGMEM = "UZ";
const byte s2_size = 24;
const char* const s2_table[] PROGMEM =
{s2_1,s2_2,s2_3,s2_4,s2_5,s2_6,s2_7,s2_8,s2_9,s2_10,
s2_11,s2_12,s2_13,s2_14,s2_15,s2_16,s2_17,s2_18,s2_19,s2_20,
s2_21,s2_22,s2_23,s2_24};
// three letter word array
const char s3_1[] PROGMEM = "DVA";
const char s3_2[] PROGMEM = "TRI";
const char s3_3[] PROGMEM = "MUJ";
const char s3_4[] PROGMEM = "NAS";
const char s3_5[] PROGMEM = "ONA";
const char s3_6[] PROGMEM = "ONI";
const char s3_7[] PROGMEM = "ONO";
const char s3_8[] PROGMEM = "VAS";
const char s3_9[] PROGMEM = "VSE";
const char s3_10[] PROGMEM = "POD";
const char s3_11[] PROGMEM = "NAD";
const char s3_12[] PROGMEM = "KDE";
const char s3_13[] PROGMEM = "KDY";
const char s3_14[] PROGMEM = "KAM";
const char s3_15[] PROGMEM = "KUS";
const char s3_16[] PROGMEM = "DEN";
const char s3_17[] PROGMEM = "TAM";
const char s3_18[] PROGMEM = "DAT";
const char s3_19[] PROGMEM = "DAM";
const char s3_20[] PROGMEM = "DAS";
const char s3_21[] PROGMEM = "MIT";
const char s3_22[] PROGMEM = "JIT";
const char s3_23[] PROGMEM = "NEZ";
const char s3_24[] PROGMEM = "ROK";
const char s3_25[] PROGMEM = "PAK";
const char s3_26[] PROGMEM = "DIK";
const char s3_27[] PROGMEM = "DUM";
const char s3_28[] PROGMEM = "PRO";
const char s3_29[] PROGMEM = "PRI";
const char s3_30[] PROGMEM = "OKO";
const char s3_31[] PROGMEM = "CAS";
const char s3_32[] PROGMEM = "CAJ";
const char s3_33[] PROGMEM = "CIL";
const char s3_34[] PROGMEM = "COP";
const char s3_35[] PROGMEM = "MUZ";
const char s3_36[] PROGMEM = "ASI";
const char s3_37[] PROGMEM = "BEZ";
const char s3_38[] PROGMEM = "BOJ";
const char s3_39[] PROGMEM = "BUH";
const byte s3_size = 39;
const char* const s3_table[] PROGMEM =
{s3_1,s3_2,s3_3,s3_4,s3_5,s3_6,s3_7,s3_8,s3_9,s3_10,
s3_11,s3_12,s3_13,s3_14,s3_15,s3_16,s3_17,s3_18,s3_19,s3_20,
s3_21,s3_22,s3_23,s3_24,s3_25,s3_26,s3_27,s3_28,s3_29,s3_30,
s3_31,s3_32,s3_33,s3_34,s3_35,s3_36,s3_37,s3_38,s3_39};
// four letter word array
const char s4_1[] PROGMEM = "TATO";
const char s4_2[] PROGMEM = "TITO";
const char s4_3[] PROGMEM = "TOTO";
const char s4_4[] PROGMEM = "DOMA";
const char s4_5[] PROGMEM = "STAT";
const char s4_6[] PROGMEM = "TADY";
const char s4_7[] PROGMEM = "DOBA";
const char s4_8[] PROGMEM = "TAKE";
const char s4_9[] PROGMEM = "PRED";
const char s4_10[] PROGMEM = "SVET";
const char s4_11[] PROGMEM = "BRZY";
const char s4_12[] PROGMEM = "TVUJ";
const char s4_13[] PROGMEM = "TATA";
const char s4_14[] PROGMEM = "MAMA";
const char s4_15[] PROGMEM = "PSIK";
const char s4_16[] PROGMEM = "ZENA";
const char s4_17[] PROGMEM = "DITE";
const char s4_18[] PROGMEM = "DETI";
const char s4_19[] PROGMEM = "KONE";
const char s4_20[] PROGMEM = "DUHA";
const char s4_21[] PROGMEM = "RUKA";
const char s4_22[] PROGMEM = "NOHA";
const char s4_23[] PROGMEM = "PRST";
const char s4_24[] PROGMEM = "POLE";
const char s4_25[] PROGMEM = "MORE";
const char s4_26[] PROGMEM = "VITR";
const char s4_27[] PROGMEM = "MLHA";
const char s4_28[] PROGMEM = "VODA";
const char s4_29[] PROGMEM = "VAHA";
const char s4_30[] PROGMEM = "PIVO";
const char s4_31[] PROGMEM = "HRAT";
const char s4_32[] PROGMEM = "RADA";
const char s4_33[] PROGMEM = "PANI";
const byte s4_size = 33;
const char* const s4_table[] PROGMEM =
{s4_1,s4_2,s4_3,s4_4,s4_5,s4_6,s4_7,s4_8,s4_9,s4_10,
s4_11,s4_12,s4_13,s4_14,s4_15,s4_16,s4_17,s4_18,s4_19,s4_20,
s4_21,s4_22,s4_23,s4_24,s4_25,s4_26,s4_27,s4_28,s4_29,s4_30,
s4_31,s4_32,s4_33};
const char name_1[] PROGMEM = "ANDY";
const char name_2[] PROGMEM = "JOSEF";
const char name_3[] PROGMEM = "JIRI";
const char name_4[] PROGMEM = "KAREL";
const char name_5[] PROGMEM = "HONZA";
const char name_6[] PROGMEM = "FRANTA";
const char name_7[] PROGMEM = "PETR";
const char name_8[] PROGMEM = "PAVEL";
const char name_9[] PROGMEM = "JINDRA";
const char name_10[] PROGMEM = "FILIP";
const char name_11[] PROGMEM = "MILAN";
const char name_12[] PROGMEM = "MARTIN";
const char name_13[] PROGMEM = "DAVID";
const char name_14[] PROGMEM = "TOMAS";
const char name_15[] PROGMEM = "HANKA";
const char name_16[] PROGMEM = "SASA";
const char name_17[] PROGMEM = "IVAN";
const char name_18[] PROGMEM = "BERT";
const char name_19[] PROGMEM = "VASEK";
const char name_20[] PROGMEM = "ALAN";
const char name_21[] PROGMEM = "JIRKA";
const char name_22[] PROGMEM = "JERRY";
const char name_23[] PROGMEM = "PEPA";
const char name_24[] PROGMEM = "JIRINA";
const char name_25[] PROGMEM = "RISA";
const char name_26[] PROGMEM = "DAN";
const char name_27[] PROGMEM = "LUBOS";
const char name_28[] PROGMEM = "TONDA";
const char name_29[] PROGMEM = "LADA";
const char name_30[] PROGMEM = "VLADA";
const char name_31[] PROGMEM = "JENDA";
const char name_32[] PROGMEM = "CYRIL";
const char name_33[] PROGMEM = "BOHOUS";
const char name_34[] PROGMEM = "KAMIL";
const char name_35[] PROGMEM = "RENE";
const char name_36[] PROGMEM = "PATRIK";
const char name_37[] PROGMEM = "SIMON";
const char name_38[] PROGMEM = "ALEX";
const char name_39[] PROGMEM = "LOJZA";
const char name_40[] PROGMEM = "MATEJ";
const char name_41[] PROGMEM = "FERDA";
const char name_42[] PROGMEM = "MARIE";
const char name_43[] PROGMEM = "ZDENEK";
const char name_44[] PROGMEM = "JULEK";
const char name_45[] PROGMEM = "STANDA";
const char name_46[] PROGMEM = "SLAVEK";
const char name_47[] PROGMEM = "VILDA";
const char name_48[] PROGMEM = "VERA";
const char name_49[] PROGMEM = "GUSTA";
const byte name_size = 49;
const char* const name_table[] PROGMEM =
{name_1,name_2,name_3,name_4,name_5,name_6,name_7,name_8,name_9,name_10,
name_11,name_12,name_13,name_14,name_15,name_16,name_17,name_18,name_19,name_20,
name_21,name_22,name_23,name_24,name_25,name_26,name_27,name_28,name_29,name_30,
name_31,name_32,name_33,name_34,name_35,name_36,name_37,name_38,name_39,name_40,
name_41,name_42,name_43,name_44,name_45,name_46,name_47,name_48,name_49};
// CW QSO word array
const char qso_1[] PROGMEM = "QRL?";
const char qso_2[] PROGMEM = "QRM";
const char qso_3[] PROGMEM = "QRN";
const char qso_4[] PROGMEM = "QRS";
const char qso_5[] PROGMEM = "QRT";
const char qso_6[] PROGMEM = "QRZ";
const char qso_7[] PROGMEM = "QSL";
const char qso_8[] PROGMEM = "QSO";
const char qso_9[] PROGMEM = "QSY";
const char qso_10[] PROGMEM = "QTH";
const char qso_11[] PROGMEM = "QRX";
const char qso_12[] PROGMEM = "ABT";
const char qso_13[] PROGMEM = "AGE";
const char qso_14[] PROGMEM = "ANT";
const char qso_15[] PROGMEM = "BEAM";
const char qso_16[] PROGMEM = "BK";
const char qso_17[] PROGMEM = "QRP";
const char qso_18[] PROGMEM = "AGN";
const char qso_19[] PROGMEM = "C";
const char qso_20[] PROGMEM = "CL";
const char qso_21[] PROGMEM = "CPY";
const char qso_22[] PROGMEM = "CQ";
const char qso_23[] PROGMEM = "CUL";
const char qso_24[] PROGMEM = "DE";
const char qso_25[] PROGMEM = "DX";
const char qso_26[] PROGMEM = "ES";
const char qso_27[] PROGMEM = "EL";
const char qso_28[] PROGMEM = "FB";
const char qso_29[] PROGMEM = "HI";
const char qso_30[] PROGMEM = "HW?";
const char qso_31[] PROGMEM = "HR";
const char qso_32[] PROGMEM = "K";
const char qso_33[] PROGMEM = "=";
const char qso_34[] PROGMEM = "<";
const char qso_35[] PROGMEM = "%";
const char qso_36[] PROGMEM = ">";
const char qso_37[] PROGMEM = "LID";
const char qso_38[] PROGMEM = "LOOP";
const char qso_39[] PROGMEM = "NAME";
const char qso_40[] PROGMEM = "OM";
const char qso_41[] PROGMEM = "OP";
const char qso_42[] PROGMEM = "PKT";
const char qso_43[] PROGMEM = "PSE";
const char qso_44[] PROGMEM = "R";
const char qso_45[] PROGMEM = "RPT";
const char qso_46[] PROGMEM = "RST";
const char qso_47[] PROGMEM = "RIG";
const char qso_48[] PROGMEM = "TEMP";
const char qso_49[] PROGMEM = "TEST";
const char qso_50[] PROGMEM = "TU";
const char qso_51[] PROGMEM = "TKS";
const char qso_52[] PROGMEM = "TNX";
const char qso_53[] PROGMEM = "VERT";
const char qso_54[] PROGMEM = "WATT";
const char qso_55[] PROGMEM = "WX";
const char qso_56[] PROGMEM = "YAGI";
const char qso_57[] PROGMEM = "YRS";
const char qso_58[] PROGMEM = "73";
const char qso_59[] PROGMEM = "88";
const char qso_60[] PROGMEM = "?";
const char qso_61[] PROGMEM = "/";
const char qso_62[] PROGMEM = "VY";
const char qso_63[] PROGMEM = "YL";
const char qso_64[] PROGMEM = "XYL";
const char qso_65[] PROGMEM = "MY";
const char qso_66[] PROGMEM = "UR";
const char qso_67[] PROGMEM = "IS";
const char qso_68[] PROGMEM = "QSB";
const char qso_69[] PROGMEM = "QRQ";
const char qso_70[] PROGMEM = "HVE";
const char qso_71[] PROGMEM = "HPE";
const char qso_72[] PROGMEM = "BEST";
const byte qso_size = 72;
const char* const qso_table[] PROGMEM =
{qso_1,qso_2,qso_3,qso_4,qso_5,qso_6,qso_7,qso_8,qso_9,qso_10,qso_11,qso_12,qso_13,qso_14,qso_15,qso_16,qso_17,qso_18,qso_19,qso_20,
qso_21,qso_22,qso_23,qso_24,qso_25,qso_26,qso_27,qso_28,qso_29,qso_30,qso_31,qso_32,qso_33,qso_34,qso_35,qso_36,qso_37,qso_38,qso_39,qso_40,
qso_41,qso_42,qso_43,qso_44,qso_45,qso_46,qso_47,qso_48,qso_49,qso_50,qso_51,qso_52,qso_53,qso_54,qso_55,qso_56,qso_57,qso_58,qso_59,qso_60,
qso_61,qso_62,qso_63,qso_64,qso_65,qso_66,qso_67,qso_68,qso_69,qso_70,qso_71,qso_72};

View File

@ -0,0 +1,264 @@
// English word list originally from gen_cw_words.pl - a program that generates words in a random order,
// intended to be used during morse code practice.
// Original gen_cw_words.pl code Copyright (C) 2015,2017 Andy Stewart (KB1OIQ)
// https://sourceforge.net/projects/kb1oiq-k1ig-wordsworth/
// two letter word array
const char s2_1[] PROGMEM = "TO";
const char s2_2[] PROGMEM = "IN";
const char s2_3[] PROGMEM = "IT";
const char s2_4[] PROGMEM = "IS";
const char s2_5[] PROGMEM = "BE";
const char s2_6[] PROGMEM = "AS";
const char s2_7[] PROGMEM = "AT";
const char s2_8[] PROGMEM = "SO";
const char s2_9[] PROGMEM = "WE";
const char s2_10[] PROGMEM = "HE";
const char s2_11[] PROGMEM = "BY";
const char s2_12[] PROGMEM = "OR";
const char s2_13[] PROGMEM = "ON";
const char s2_14[] PROGMEM = "DO";
const char s2_15[] PROGMEM = "IF";
const char s2_16[] PROGMEM = "ME";
const char s2_17[] PROGMEM = "MY";
const char s2_18[] PROGMEM = "UP";
const char s2_19[] PROGMEM = "AN";
const char s2_20[] PROGMEM = "GO";
const char s2_21[] PROGMEM = "NO";
const char s2_22[] PROGMEM = "US";
const char s2_23[] PROGMEM = "AM";
const char s2_24[] PROGMEM = "OF";
const byte s2_size = 24;
const char* const s2_table[] PROGMEM =
{s2_1,s2_2,s2_3,s2_4,s2_5,s2_6,s2_7,s2_8,s2_9,s2_10,
s2_11,s2_12,s2_13,s2_14,s2_15,s2_16,s2_17,s2_18,s2_19,s2_20,
s2_21,s2_22,s2_23,s2_24};
// three letter word array
const char s3_1[] PROGMEM = "THE";
const char s3_2[] PROGMEM = "AND";
const char s3_3[] PROGMEM = "FOR";
const char s3_4[] PROGMEM = "ARE";
const char s3_5[] PROGMEM = "BUT";
const char s3_6[] PROGMEM = "NOT";
const char s3_7[] PROGMEM = "YOU";
const char s3_8[] PROGMEM = "ALL";
const char s3_9[] PROGMEM = "ANY";
const char s3_10[] PROGMEM = "CAN";
const char s3_11[] PROGMEM = "HAD";
const char s3_12[] PROGMEM = "HER";
const char s3_13[] PROGMEM = "WAS";
const char s3_14[] PROGMEM = "ONE";
const char s3_15[] PROGMEM = "OUR";
const char s3_16[] PROGMEM = "OUT";
const char s3_17[] PROGMEM = "DAY";
const char s3_18[] PROGMEM = "GET";
const char s3_19[] PROGMEM = "HAS";
const char s3_20[] PROGMEM = "HIM";
const char s3_21[] PROGMEM = "HIS";
const char s3_22[] PROGMEM = "HOW";
const char s3_23[] PROGMEM = "MAN";
const char s3_24[] PROGMEM = "NEW";
const char s3_25[] PROGMEM = "NOW";
const char s3_26[] PROGMEM = "OLD";
const char s3_27[] PROGMEM = "SEE";
const char s3_28[] PROGMEM = "TWO";
const char s3_29[] PROGMEM = "WAY";
const char s3_30[] PROGMEM = "WHO";
const char s3_31[] PROGMEM = "BOY";
const char s3_32[] PROGMEM = "DID";
const char s3_33[] PROGMEM = "ITS";
const char s3_34[] PROGMEM = "LET";
const char s3_35[] PROGMEM = "PUT";
const char s3_36[] PROGMEM = "SAY";
const char s3_37[] PROGMEM = "SHE";
const char s3_38[] PROGMEM = "TOO";
const char s3_39[] PROGMEM = "USE";
const byte s3_size = 39;
const char* const s3_table[] PROGMEM =
{s3_1,s3_2,s3_3,s3_4,s3_5,s3_6,s3_7,s3_8,s3_9,s3_10,
s3_11,s3_12,s3_13,s3_14,s3_15,s3_16,s3_17,s3_18,s3_19,s3_20,
s3_21,s3_22,s3_23,s3_24,s3_25,s3_26,s3_27,s3_28,s3_29,s3_30,
s3_31,s3_32,s3_33,s3_34,s3_35,s3_36,s3_37,s3_38,s3_39};
// four letter word array
const char s4_1[] PROGMEM = "THAT";
const char s4_2[] PROGMEM = "WITH";
const char s4_3[] PROGMEM = "HAVE";
const char s4_4[] PROGMEM = "THIS";
const char s4_5[] PROGMEM = "WILL";
const char s4_6[] PROGMEM = "YOUR";
const char s4_7[] PROGMEM = "FROM";
const char s4_8[] PROGMEM = "THEY";
const char s4_9[] PROGMEM = "KNOW";
const char s4_10[] PROGMEM = "WANT";
const char s4_11[] PROGMEM = "BEEN";
const char s4_12[] PROGMEM = "GOOD";
const char s4_13[] PROGMEM = "MUCH";
const char s4_14[] PROGMEM = "SOME";
const char s4_15[] PROGMEM = "TIME";
const char s4_16[] PROGMEM = "VERY";
const char s4_17[] PROGMEM = "WHEN";
const char s4_18[] PROGMEM = "COME";
const char s4_19[] PROGMEM = "HERE";
const char s4_20[] PROGMEM = "JUST";
const char s4_21[] PROGMEM = "LIKE";
const char s4_22[] PROGMEM = "LONG";
const char s4_23[] PROGMEM = "MAKE";
const char s4_24[] PROGMEM = "MANY";
const char s4_25[] PROGMEM = "MORE";
const char s4_26[] PROGMEM = "ONLY";
const char s4_27[] PROGMEM = "OVER";
const char s4_28[] PROGMEM = "SUCH";
const char s4_29[] PROGMEM = "TAKE";
const char s4_30[] PROGMEM = "THAN";
const char s4_31[] PROGMEM = "THEM";
const char s4_32[] PROGMEM = "WELL";
const char s4_33[] PROGMEM = "WERE";
const byte s4_size = 33;
const char* const s4_table[] PROGMEM =
{s4_1,s4_2,s4_3,s4_4,s4_5,s4_6,s4_7,s4_8,s4_9,s4_10,
s4_11,s4_12,s4_13,s4_14,s4_15,s4_16,s4_17,s4_18,s4_19,s4_20,
s4_21,s4_22,s4_23,s4_24,s4_25,s4_26,s4_27,s4_28,s4_29,s4_30,
s4_31,s4_32,s4_33};
const char name_1[] PROGMEM = "ANDY";
const char name_2[] PROGMEM = "BOB";
const char name_3[] PROGMEM = "BILL";
const char name_4[] PROGMEM = "JOHN";
const char name_5[] PROGMEM = "GEORGE";
const char name_6[] PROGMEM = "TOM";
const char name_7[] PROGMEM = "RICH";
const char name_8[] PROGMEM = "STEVE";
const char name_9[] PROGMEM = "TIM";
const char name_10[] PROGMEM = "SCOTT";
const char name_11[] PROGMEM = "FRED";
const char name_12[] PROGMEM = "DOUG";
const char name_13[] PROGMEM = "DAVE";
const char name_14[] PROGMEM = "GARY";
const char name_15[] PROGMEM = "JIM";
const char name_16[] PROGMEM = "CHRIS";
const char name_17[] PROGMEM = "MIKE";
const char name_18[] PROGMEM = "ED";
const char name_19[] PROGMEM = "AL";
const char name_20[] PROGMEM = "ALAN";
const char name_21[] PROGMEM = "RON";
const char name_22[] PROGMEM = "JERRY";
const char name_23[] PROGMEM = "ART";
const char name_24[] PROGMEM = "GREG";
const char name_25[] PROGMEM = "RICK";
const char name_26[] PROGMEM = "DAN";
const char name_27[] PROGMEM = "KEN";
const char name_28[] PROGMEM = "TONY";
const char name_29[] PROGMEM = "CARL";
const char name_30[] PROGMEM = "PHIL";
const char name_31[] PROGMEM = "JOE";
const char name_32[] PROGMEM = "JON";
const char name_33[] PROGMEM = "LARRY";
const char name_34[] PROGMEM = "DON";
const char name_35[] PROGMEM = "DICK";
const char name_36[] PROGMEM = "PAUL";
const char name_37[] PROGMEM = "SERGE";
const char name_38[] PROGMEM = "ALEX";
const char name_39[] PROGMEM = "VLAD";
const char name_40[] PROGMEM = "JEFF";
const char name_41[] PROGMEM = "CHAS";
const char name_42[] PROGMEM = "JACK";
const char name_43[] PROGMEM = "GENE";
const char name_44[] PROGMEM = "BERT";
const char name_45[] PROGMEM = "OLEG";
const char name_46[] PROGMEM = "PETE";
const char name_47[] PROGMEM = "PAT";
const char name_48[] PROGMEM = "JUAN";
const char name_49[] PROGMEM = "GUS";
const byte name_size = 49;
const char* const name_table[] PROGMEM =
{name_1,name_2,name_3,name_4,name_5,name_6,name_7,name_8,name_9,name_10,
name_11,name_12,name_13,name_14,name_15,name_16,name_17,name_18,name_19,name_20,
name_21,name_22,name_23,name_24,name_25,name_26,name_27,name_28,name_29,name_30,
name_31,name_32,name_33,name_34,name_35,name_36,name_37,name_38,name_39,name_40,
name_41,name_42,name_43,name_44,name_45,name_46,name_47,name_48,name_49};
// CW QSO word array
const char qso_1[] PROGMEM = "QRL?";
const char qso_2[] PROGMEM = "QRM";
const char qso_3[] PROGMEM = "QRN";
const char qso_4[] PROGMEM = "QRS";
const char qso_5[] PROGMEM = "QRT";
const char qso_6[] PROGMEM = "QRZ";
const char qso_7[] PROGMEM = "QSL";
const char qso_8[] PROGMEM = "QSO";
const char qso_9[] PROGMEM = "QSY";
const char qso_10[] PROGMEM = "QTH";
const char qso_11[] PROGMEM = "QRX";
const char qso_12[] PROGMEM = "ABT";
const char qso_13[] PROGMEM = "AGE";
const char qso_14[] PROGMEM = "ANT";
const char qso_15[] PROGMEM = "BEAM";
const char qso_16[] PROGMEM = "BK";
const char qso_17[] PROGMEM = "QRP";
const char qso_18[] PROGMEM = "AGN";
const char qso_19[] PROGMEM = "C";
const char qso_20[] PROGMEM = "CL";
const char qso_21[] PROGMEM = "CPY";
const char qso_22[] PROGMEM = "CQ";
const char qso_23[] PROGMEM = "CUL";
const char qso_24[] PROGMEM = "DE";
const char qso_25[] PROGMEM = "DX";
const char qso_26[] PROGMEM = "ES";
const char qso_27[] PROGMEM = "EL";
const char qso_28[] PROGMEM = "FB";
const char qso_29[] PROGMEM = "HI";
const char qso_30[] PROGMEM = "HW?";
const char qso_31[] PROGMEM = "HR";
const char qso_32[] PROGMEM = "K";
const char qso_33[] PROGMEM = "=";
const char qso_34[] PROGMEM = "<";
const char qso_35[] PROGMEM = "%";
const char qso_36[] PROGMEM = ">";
const char qso_37[] PROGMEM = "LID";
const char qso_38[] PROGMEM = "LOOP";
const char qso_39[] PROGMEM = "NAME";
const char qso_40[] PROGMEM = "OM";
const char qso_41[] PROGMEM = "OP";
const char qso_42[] PROGMEM = "PKT";
const char qso_43[] PROGMEM = "PSE";
const char qso_44[] PROGMEM = "R";
const char qso_45[] PROGMEM = "RPT";
const char qso_46[] PROGMEM = "RST";
const char qso_47[] PROGMEM = "RIG";
const char qso_48[] PROGMEM = "TEMP";
const char qso_49[] PROGMEM = "TEST";
const char qso_50[] PROGMEM = "TU";
const char qso_51[] PROGMEM = "TKS";
const char qso_52[] PROGMEM = "TNX";
const char qso_53[] PROGMEM = "VERT";
const char qso_54[] PROGMEM = "WATT";
const char qso_55[] PROGMEM = "WX";
const char qso_56[] PROGMEM = "YAGI";
const char qso_57[] PROGMEM = "YRS";
const char qso_58[] PROGMEM = "73";
const char qso_59[] PROGMEM = "88";
const char qso_60[] PROGMEM = "?";
const char qso_61[] PROGMEM = "/";
const char qso_62[] PROGMEM = "VY";
const char qso_63[] PROGMEM = "YL";
const char qso_64[] PROGMEM = "XYL";
const char qso_65[] PROGMEM = "MY";
const char qso_66[] PROGMEM = "UR";
const char qso_67[] PROGMEM = "IS";
const char qso_68[] PROGMEM = "QSB";
const char qso_69[] PROGMEM = "QRQ";
const char qso_70[] PROGMEM = "HVE";
const char qso_71[] PROGMEM = "HPE";
const char qso_72[] PROGMEM = "BEST";
const byte qso_size = 72;
const char* const qso_table[] PROGMEM =
{qso_1,qso_2,qso_3,qso_4,qso_5,qso_6,qso_7,qso_8,qso_9,qso_10,qso_11,qso_12,qso_13,qso_14,qso_15,qso_16,qso_17,qso_18,qso_19,qso_20,
qso_21,qso_22,qso_23,qso_24,qso_25,qso_26,qso_27,qso_28,qso_29,qso_30,qso_31,qso_32,qso_33,qso_34,qso_35,qso_36,qso_37,qso_38,qso_39,qso_40,
qso_41,qso_42,qso_43,qso_44,qso_45,qso_46,qso_47,qso_48,qso_49,qso_50,qso_51,qso_52,qso_53,qso_54,qso_55,qso_56,qso_57,qso_58,qso_59,qso_60,
qso_61,qso_62,qso_63,qso_64,qso_65,qso_66,qso_67,qso_68,qso_69,qso_70,qso_71,qso_72};

View File

@ -0,0 +1,248 @@
// keyer_training_text_norsk.h
// Norwegian word list contributed by Karl, LA3FY
// English word list originally from gen_cw_words.pl - a program that generates words in a random order,
// intended to be used during morse code practice.
// Original gen_cw_words.pl code Copyright (C) 2015,2017 Andy Stewart (KB1OIQ)
// https://sourceforge.net/projects/kb1oiq-k1ig-wordsworth/
// two letter word array
const char s2_1[] PROGMEM = "OG";
const char s2_2[] PROGMEM = "";
const char s2_3[] PROGMEM = "";
const char s2_4[] PROGMEM = "ER";
const char s2_5[] PROGMEM = "EN";
const char s2_6[] PROGMEM = "AV";
const char s2_7[] PROGMEM = "AT";
const char s2_8[] PROGMEM = "DE";
const char s2_9[] PROGMEM = "ET";
const char s2_10[] PROGMEM = "";
const char s2_11[] PROGMEM = "VI";
const char s2_12[] PROGMEM = "DU";
const char s2_13[] PROGMEM = "DA";
const char s2_14[] PROGMEM = "UT";
const char s2_15[] PROGMEM = "SA";
const char s2_16[] PROGMEM = "";
const char s2_17[] PROGMEM = "NY";
const char s2_18[] PROGMEM = "HA";
const char s2_19[] PROGMEM = "ÅR";
const char s2_20[] PROGMEM = "";
const char s2_21[] PROGMEM = "TO";
const char s2_22[] PROGMEM = "SE";
const byte s2_size = 22;
const char* const s2_table[] PROGMEM =
{s2_1,s2_2,s2_3,s2_4,s2_5,s2_6,s2_7,s2_8,s2_9,s2_10,
s2_11,s2_12,s2_13,s2_14,s2_15,s2_16,s2_17,s2_18,s2_19,s2_20,
s2_21,s2_22};
// three letter word array
const char s3_1[] PROGMEM = "DET";
const char s3_2[] PROGMEM = "SOM";
const char s3_3[] PROGMEM = "HAN";
const char s3_4[] PROGMEM = "FOR";
const char s3_5[] PROGMEM = "MED";
const char s3_6[] PROGMEM = "VAR";
const char s3_7[] PROGMEM = "DEN";
const char s3_8[] PROGMEM = "HAR";
const char s3_9[] PROGMEM = "JEG";
const char s3_10[] PROGMEM = "MEN";
const char s3_11[] PROGMEM = "SEG";
const char s3_12[] PROGMEM = "HUN";
const char s3_13[] PROGMEM = "VÅR";
const char s3_14[] PROGMEM = "FRA";
const char s3_15[] PROGMEM = "KAN";
const char s3_16[] PROGMEM = "BLE";
const char s3_17[] PROGMEM = "VIL";
const char s3_18[] PROGMEM = "HAM";
const char s3_19[] PROGMEM = "VED";
const char s3_20[] PROGMEM = "NOE";
const char s3_21[] PROGMEM = "MEG";
const char s3_22[] PROGMEM = "MOT";
const char s3_23[] PROGMEM = "OPP";
const char s3_24[] PROGMEM = "DER";
const char s3_25[] PROGMEM = "NÅR";
const char s3_26[] PROGMEM = "INN";
const char s3_27[] PROGMEM = "DEM";
const char s3_28[] PROGMEM = "SIN";
const char s3_29[] PROGMEM = "KOM";
const char s3_30[] PROGMEM = "ENN";
const char s3_31[] PROGMEM = "BLI";
const char s3_32[] PROGMEM = "FØR";
const char s3_33[] PROGMEM = "GÅR";
const char s3_34[] PROGMEM = "HER";
const char s3_35[] PROGMEM = "MER";
const char s3_36[] PROGMEM = "HVA";
const char s3_37[] PROGMEM = "ALT";
const char s3_38[] PROGMEM = "OSS";
const byte s3_size = 38;
const char* const s3_table[] PROGMEM =
{s3_1,s3_2,s3_3,s3_4,s3_5,s3_6,s3_7,s3_8,s3_9,s3_10,
s3_11,s3_12,s3_13,s3_14,s3_15,s3_16,s3_17,s3_18,s3_19,s3_20,
s3_21,s3_22,s3_23,s3_24,s3_25,s3_26,s3_27,s3_28,s3_29,s3_30,
s3_31,s3_32,s3_33,s3_34,s3_35,s3_36,s3_37,s3_38};
// four letter word array
const char s4_1[] PROGMEM = "IKKE";
const char s4_2[] PROGMEM = "OVER";
const char s4_3[] PROGMEM = "OGSÅ";
const char s4_4[] PROGMEM = "BARE";
const char s4_5[] PROGMEM = "VÆRE";
const char s4_6[] PROGMEM = "BLIR";
const char s4_7[] PROGMEM = "ALLE";
const char s4_8[] PROGMEM = "NOEN";
const char s4_9[] PROGMEM = "SELV";
const char s4_10[] PROGMEM = "SIER";
const char s4_11[] PROGMEM = "HANS";
const char s4_12[] PROGMEM = "GIKK";
const char s4_13[] PROGMEM = "FIKK";
const char s4_14[] PROGMEM = "DASH";
const char s4_15[] PROGMEM = "HVOR";
const char s4_16[] PROGMEM = "HELE";
const byte s4_size = 16;
const char* const s4_table[] PROGMEM =
{s4_1,s4_2,s4_3,s4_4,s4_5,s4_6,s4_7,s4_8,s4_9,s4_10,
s4_11,s4_12,s4_13,s4_14,s4_15,s4_16};
// common names
const char name_1[] PROGMEM = "JAN";
const char name_2[] PROGMEM = "PER";
const char name_3[] PROGMEM = "BJØRN";
const char name_4[] PROGMEM = "OLE";
const char name_5[] PROGMEM = "KJELL";
const char name_6[] PROGMEM = "LARS";
const char name_7[] PROGMEM = "ARNE";
const char name_8[] PROGMEM = "KNUT";
const char name_9[] PROGMEM = "SVEIN";
const char name_10[] PROGMEM = "HANS";
const char name_11[] PROGMEM = "ODD";
const char name_12[] PROGMEM = "TOR";
const char name_13[] PROGMEM = "GEIR";
const char name_14[] PROGMEM = "TERJE";
const char name_15[] PROGMEM = "THOMAS";
const char name_16[] PROGMEM = "MORTEN";
const char name_17[] PROGMEM = "JOHN";
const char name_18[] PROGMEM = "ERIK";
const char name_19[] PROGMEM = "ANDERS";
const char name_20[] PROGMEM = "RUNE";
const char name_21[] PROGMEM = "MARTIN";
const char name_22[] PROGMEM = "ANDREAS";
const char name_23[] PROGMEM = "TROND";
const char name_24[] PROGMEM = "TORE";
const char name_25[] PROGMEM = "HARALD";
const char name_26[] PROGMEM = "OLAV";
const char name_27[] PROGMEM = "GUNNAR";
const char name_28[] PROGMEM = "JON";
const char name_29[] PROGMEM = "ROLF";
const char name_30[] PROGMEM = "LEIF";
const char name_31[] PROGMEM = "TOM";
const char name_32[] PROGMEM = "STIAN";
const char name_33[] PROGMEM = "KRISTIAN";
const char name_34[] PROGMEM = "NILS";
const char name_35[] PROGMEM = "ØYVIND";
const char name_36[] PROGMEM = "HELGE";
const char name_37[] PROGMEM = "ESPEN";
const char name_38[] PROGMEM = "EINAR";
const char name_39[] PROGMEM = "MARIUS";
const char name_40[] PROGMEM = "KÅRE";
const char name_41[] PROGMEM = "DANIEL";
const char name_42[] PROGMEM = "MAGNUS";
const char name_43[] PROGMEM = "FREDRIK";
const char name_44[] PROGMEM = "CHRISTIAN";
const char name_45[] PROGMEM = "STEINAR";
const char name_46[] PROGMEM = "EIRIK";
const char name_47[] PROGMEM = "HÅKON";
const char name_48[] PROGMEM = "ØYSTEIN";
const char name_49[] PROGMEM = "HENRIK";
const char name_50[] PROGMEM = "KARL";
const byte name_size = 50;
const char* const name_table[] PROGMEM =
{name_1,name_2,name_3,name_4,name_5,name_6,name_7,name_8,name_9,name_10,
name_11,name_12,name_13,name_14,name_15,name_16,name_17,name_18,name_19,name_20,
name_21,name_22,name_23,name_24,name_25,name_26,name_27,name_28,name_29,name_30,
name_31,name_32,name_33,name_34,name_35,name_36,name_37,name_38,name_39,name_40,
name_41,name_42,name_43,name_44,name_45,name_46,name_47,name_48,name_49,name_50};
// CW QSO word array
const char qso_1[] PROGMEM = "QRL?";
const char qso_2[] PROGMEM = "QRM";
const char qso_3[] PROGMEM = "QRN";
const char qso_4[] PROGMEM = "QRS";
const char qso_5[] PROGMEM = "QRT";
const char qso_6[] PROGMEM = "QRZ";
const char qso_7[] PROGMEM = "QSL";
const char qso_8[] PROGMEM = "QSO";
const char qso_9[] PROGMEM = "QSY";
const char qso_10[] PROGMEM = "QTH";
const char qso_11[] PROGMEM = "QRX";
const char qso_12[] PROGMEM = "ABT";
const char qso_13[] PROGMEM = "AGE";
const char qso_14[] PROGMEM = "ANT";
const char qso_15[] PROGMEM = "BEAM";
const char qso_16[] PROGMEM = "BK";
const char qso_17[] PROGMEM = "QRP";
const char qso_18[] PROGMEM = "AGN";
const char qso_19[] PROGMEM = "C";
const char qso_20[] PROGMEM = "CL";
const char qso_21[] PROGMEM = "CPY";
const char qso_22[] PROGMEM = "CQ";
const char qso_23[] PROGMEM = "CUL";
const char qso_24[] PROGMEM = "DE";
const char qso_25[] PROGMEM = "DX";
const char qso_26[] PROGMEM = "ES";
const char qso_27[] PROGMEM = "EL";
const char qso_28[] PROGMEM = "FB";
const char qso_29[] PROGMEM = "HI";
const char qso_30[] PROGMEM = "HW?";
const char qso_31[] PROGMEM = "HR";
const char qso_32[] PROGMEM = "K";
const char qso_33[] PROGMEM = "=";
const char qso_34[] PROGMEM = "<";
const char qso_35[] PROGMEM = "%";
const char qso_36[] PROGMEM = ">";
const char qso_37[] PROGMEM = "LID";
const char qso_38[] PROGMEM = "LOOP";
const char qso_39[] PROGMEM = "NAME";
const char qso_40[] PROGMEM = "OM";
const char qso_41[] PROGMEM = "OP";
const char qso_42[] PROGMEM = "PKT";
const char qso_43[] PROGMEM = "PSE";
const char qso_44[] PROGMEM = "R";
const char qso_45[] PROGMEM = "RPT";
const char qso_46[] PROGMEM = "RST";
const char qso_47[] PROGMEM = "RIG";
const char qso_48[] PROGMEM = "TEMP";
const char qso_49[] PROGMEM = "TEST";
const char qso_50[] PROGMEM = "TU";
const char qso_51[] PROGMEM = "TKS";
const char qso_52[] PROGMEM = "TNX";
const char qso_53[] PROGMEM = "VERT";
const char qso_54[] PROGMEM = "WATT";
const char qso_55[] PROGMEM = "WX";
const char qso_56[] PROGMEM = "YAGI";
const char qso_57[] PROGMEM = "YRS";
const char qso_58[] PROGMEM = "73";
const char qso_59[] PROGMEM = "88";
const char qso_60[] PROGMEM = "?";
const char qso_61[] PROGMEM = "/";
const char qso_62[] PROGMEM = "VY";
const char qso_63[] PROGMEM = "YL";
const char qso_64[] PROGMEM = "XYL";
const char qso_65[] PROGMEM = "MY";
const char qso_66[] PROGMEM = "UR";
const char qso_67[] PROGMEM = "IS";
const char qso_68[] PROGMEM = "QSB";
const char qso_69[] PROGMEM = "QRQ";
const char qso_70[] PROGMEM = "HVE";
const char qso_71[] PROGMEM = "HPE";
const char qso_72[] PROGMEM = "BEST";
const byte qso_size = 72;
const char* const qso_table[] PROGMEM =
{qso_1,qso_2,qso_3,qso_4,qso_5,qso_6,qso_7,qso_8,qso_9,qso_10,qso_11,qso_12,qso_13,qso_14,qso_15,qso_16,qso_17,qso_18,qso_19,qso_20,
qso_21,qso_22,qso_23,qso_24,qso_25,qso_26,qso_27,qso_28,qso_29,qso_30,qso_31,qso_32,qso_33,qso_34,qso_35,qso_36,qso_37,qso_38,qso_39,qso_40,
qso_41,qso_42,qso_43,qso_44,qso_45,qso_46,qso_47,qso_48,qso_49,qso_50,qso_51,qso_52,qso_53,qso_54,qso_55,qso_56,qso_57,qso_58,qso_59,qso_60,
qso_61,qso_62,qso_63,qso_64,qso_65,qso_66,qso_67,qso_68,qso_69,qso_70,qso_71,qso_72};

View File

@ -0,0 +1,151 @@
#include "Arduino.h"
#include "buttonarray.h"
/* contributed by W6IPA */
void Button::InitLimits(uint8_t step){
/*
typical button values:
0: -56 - 46
1: 47 - 131
2: 132 - 203
3: 203 - 264
*/
int32_t button_value;
int32_t lower_button_value;
int32_t higher_button_value;
button_value = uint32_t(max_value * (float(step * r2_value)/float((step * r2_value) + r1_value)));
lower_button_value = uint32_t(max_value * (float((step-1) * r2_value)/float(((step-1) * r2_value) + r1_value)));
higher_button_value = uint32_t(max_value * (float((step+1) * r2_value)/float(((step+1) * r2_value) + r1_value)));
low_limit_= (button_value - ((button_value - lower_button_value)/2));
high_limit_= (button_value + ((higher_button_value - button_value)/2));
step_ = step;
}
void Button::InitLimits(uint8_t step, int32_t low_limit, int32_t high_limit){
low_limit_ = low_limit;
high_limit_ = high_limit;
step_ = step;
}
bool Button::Pressed(int32_t analog_reading){
if ((analog_reading > low_limit_) && (analog_reading <= high_limit_)) {
return true;
}
return false;
}
int32_t Button::high_limit(){
return high_limit_;
}
int32_t Button::low_limit(){
return low_limit_;
}
// Add all buttons in incremental order
void ButtonArray::AddAll(){
size_t index;
if (reversed_) {
index = nb_buttons_ - 1;
}
for(size_t i = 0; i < nb_buttons_; i++)
{
if (reversed_) {
Add(i, index);
index --;
} else {
Add(i, i);
}
}
}
// Adds a single button to the array
// Takes a step (rank in the resistor ladder), and the index in the button array.
void ButtonArray::Add(uint8_t step, uint8_t index){
Button button;
button.InitLimits(step);
button_array_[index] = button;
high_limit_ = max(button.high_limit() , high_limit_);
}
void ButtonArray::Add(uint8_t step, uint8_t index, int32_t low_limit, int32_t high_limit){
Button button;
button.InitLimits(step, low_limit, high_limit);
button_array_[index] = button;
high_limit_ = max(high_limit, high_limit_);
}
int32_t ButtonArray::high_limit(){
return high_limit_;
}
int8_t ButtonArray::ReadButtons(){
uint32_t analog_read_temp = 0;
uint32_t analog_line_read_average = 0;
//uint8_t number_of_samples = 0;
for (byte x = 0; x < NUMBER_OF_BUTTON_READS_TO_AVERAGE; x++){
analog_read_temp = analogRead(pin_);
if (analog_read_temp <= high_limit_){
analog_line_read_average = (analog_line_read_average + analog_read_temp) / 2;
//analog_line_read_average = analog_line_read_average + analog_read_temp;
//number_of_samples++;
}
}
//analog_line_read_average = analog_line_read_average / number_of_samples;
for (size_t x = 0; x < nb_buttons_; x++) {
Button button = button_array_[x];
if (button.Pressed(analog_line_read_average)) {
last_pressed_ms = millis();
return x;
}
}
return -1;
}
// returns true if analog reading indicate a pressed button
bool ButtonArray::AnyPressed() {
if (analogRead(pin_) <= high_limit_) {
return true;
}
return false;
}
// returns the index of the pressed button or -1 if none pressed
int8_t ButtonArray::Pressed() {
if (AnyPressed() && ((millis() - last_pressed_ms) > DEBOUNCE_MS )){
return ReadButtons();
}
return -1;
}
// returns true if button at the provided index is pressed
bool ButtonArray::Pressed(uint8_t index) {
uint32_t analog_read_temp =0;
analog_read_temp = analogRead(pin_);
if ((analog_read_temp <= high_limit_) && ( index < nb_buttons_)) {
Button button = button_array_[index];
return button.Pressed(analog_read_temp);
}
return false;
}
// Return true as long as the indicated button is held and the deadline not reached.
bool ButtonArray::Held(uint8_t index, uint32_t deadline) {
if (AnyPressed() &&
(millis() < deadline) &&
(ReadButtons() == index)) {
return true;
}
return false;
}
// Return true as long as the indicated button is held
bool ButtonArray::Held(uint8_t index) {
if (AnyPressed() && (ReadButtons() == index)) {
return true;
}
return false;
}

View File

@ -0,0 +1,59 @@
#ifndef buttonarray_h
#define buttonarray_h
#include "Arduino.h"
#ifndef MAX_ARRAY_BUTTONS
#define MAX_ARRAY_BUTTONS 13
#endif
#define DEBOUNCE_MS 200
#define NUMBER_OF_BUTTON_READS_TO_AVERAGE 19
#if defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_GENERIC_STM32F103C)
#define max_value 4095
#else
#define max_value 1023
#endif
#define r1_value 10
#define r2_value 1
/* contributed by W6IPA */
class Button {
private:
int32_t low_limit_;
int32_t high_limit_;
uint8_t step_;
public:
Button(){};
void InitLimits(uint8_t step);
void InitLimits(uint8_t step, int32_t low_limit, int32_t high_limit);
bool Pressed(int32_t analog_reading);
int32_t high_limit();
int32_t low_limit();
};
class ButtonArray {
private:
Button button_array_[MAX_ARRAY_BUTTONS];
uint8_t pin_;
uint8_t nb_buttons_;
int32_t high_limit_;
bool reversed_;
int8_t ReadButtons();
bool AnyPressed();
public:
uint32_t last_pressed_ms;
ButtonArray(uint8_t pin, uint8_t nb, bool reversed): pin_(pin), nb_buttons_(nb), reversed_(reversed){};
void AddAll();
void Add(uint8_t step, uint8_t index);
void Add(uint8_t step, uint8_t index, int32_t low_limit, int32_t high_limit);
int32_t high_limit();
int8_t Pressed();
bool Pressed(uint8_t index);
bool Held(uint8_t index);
bool Held(uint8_t index, uint32_t deadline );
};
#endif

View File

@ -0,0 +1,50 @@
// Button Array test
#include "buttonarray.h"
#define ARRAY_PIN A3
#define NB_BUTTONS 2
#define ENCODER_PIN A1
int button_array_high_limit[NB_BUTTONS];
int button_array_low_limit[NB_BUTTONS];
long button_depress_time;
ButtonArray button_array(ARRAY_PIN, NB_BUTTONS, false);
ButtonArray encoder(ENCODER_PIN, 1, false);
void setup() {
Serial.begin(115200);
delay(1000);
button_array.AddAll();
encoder.AddAll();
}
void loop() {
int analogbuttontemp = button_array.Pressed();
if (encoder.Pressed() == 0) {
Serial.println("encoder pressed ");
}
if (analogbuttontemp >= 0 ) {
// button pressed.
button_depress_time = button_array.last_pressed_ms;
while (button_array.Held(analogbuttontemp, button_depress_time + 1000)) {
}
if (millis() - button_depress_time < 400) {
Serial.print("button pressed ");
Serial.println(analogbuttontemp);
} else {
Serial.print("button ");
Serial.print(analogbuttontemp);
Serial.print(" held for ");
Serial.println(millis() - button_depress_time);
}
}
}

BIN
keyer.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

View File

@ -0,0 +1,453 @@
#include "Arduino.h"
#include "Adafruit_LiquidCrystal.h"
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
// FOR Arduino Due
#if !defined(_BV)
# define _BV(bit) (1 << (bit))
#endif
// When the display powers up, it is configured as follows:
//
// 1. Display clear
// 2. Function set:
// DL = 1; 8-bit interface data
// N = 0; 1-line display
// F = 0; 5x8 dot character font
// 3. Display on/off control:
// D = 0; Display off
// C = 0; Cursor off
// B = 0; Blinking off
// 4. Entry mode set:
// I/D = 1; Increment by 1
// S = 0; No shift
//
// Note, however, that resetting the Arduino doesn't reset the LCD, so we
// can't assume that its in that state when a sketch starts (and the
// Adafruit_LiquidCrystal constructor is called).
Adafruit_LiquidCrystal::Adafruit_LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
{
init(0, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7);
}
Adafruit_LiquidCrystal::Adafruit_LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
{
init(0, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7);
}
Adafruit_LiquidCrystal::Adafruit_LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
{
init(1, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0);
}
Adafruit_LiquidCrystal::Adafruit_LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
{
init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0);
}
Adafruit_LiquidCrystal::Adafruit_LiquidCrystal(uint8_t i2caddr) {
_i2cAddr = i2caddr;
_displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
// the I/O expander pinout
_rs_pin = 1;
_rw_pin = 255;
_enable_pin = 2;
_data_pins[0] = 3; // really d4
_data_pins[1] = 4; // really d5
_data_pins[2] = 5; // really d6
_data_pins[3] = 6; // really d7
// we can't begin() yet :(
}
Adafruit_LiquidCrystal::Adafruit_LiquidCrystal(uint8_t data, uint8_t clock, uint8_t latch ) {
_i2cAddr = 255;
_displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
// the SPI expander pinout
_rs_pin = 1;
_rw_pin = 255;
_enable_pin = 2;
_data_pins[0] = 6; // really d4
_data_pins[1] = 5; // really d5
_data_pins[2] = 4; // really d6
_data_pins[3] = 3; // really d7
_SPIdata = data;
_SPIclock = clock;
_SPIlatch = latch;
_SPIbuff = 0;
// we can't begin() yet :(
}
void Adafruit_LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
{
_rs_pin = rs;
_rw_pin = rw;
_enable_pin = enable;
_data_pins[0] = d0;
_data_pins[1] = d1;
_data_pins[2] = d2;
_data_pins[3] = d3;
_data_pins[4] = d4;
_data_pins[5] = d5;
_data_pins[6] = d6;
_data_pins[7] = d7;
_i2cAddr = 255;
_SPIclock = _SPIdata = _SPIlatch = 255;
if (fourbitmode)
_displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
else
_displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS;
}
void Adafruit_LiquidCrystal::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) {
// check if i2c
if (_i2cAddr != 255) {
_i2c.begin(_i2cAddr);
_i2c.pinMode(7, OUTPUT); // backlight
_i2c.digitalWrite(7, HIGH); // backlight
for (uint8_t i=0; i<4; i++)
_pinMode(_data_pins[i], OUTPUT);
_i2c.pinMode(_rs_pin, OUTPUT);
_i2c.pinMode(_enable_pin, OUTPUT);
} else if (_SPIclock != 255) {
pinMode(_SPIdata, OUTPUT);
pinMode(_SPIclock, OUTPUT);
pinMode(_SPIlatch, OUTPUT);
_SPIbuff = 0x80; // backlight
} else {
pinMode(_rs_pin, OUTPUT);
// we can save 1 pin by not using RW. Indicate by passing 255 instead of pin#
if (_rw_pin != 255) {
pinMode(_rw_pin, OUTPUT);
}
pinMode(_enable_pin, OUTPUT);
}
if (lines > 1) {
_displayfunction |= LCD_2LINE;
}
_numlines = lines;
_currline = 0;
// for some 1 line displays you can select a 10 pixel high font
if ((dotsize != 0) && (lines == 1)) {
_displayfunction |= LCD_5x10DOTS;
}
// SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION!
// according to datasheet, we need at least 40ms after power rises above 2.7V
// before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50
delayMicroseconds(50000);
// Now we pull both RS and R/W low to begin commands
_digitalWrite(_rs_pin, LOW);
_digitalWrite(_enable_pin, LOW);
if (_rw_pin != 255) {
_digitalWrite(_rw_pin, LOW);
}
//put the LCD into 4 bit or 8 bit mode
if (! (_displayfunction & LCD_8BITMODE)) {
// this is according to the hitachi HD44780 datasheet
// figure 24, pg 46
// we start in 8bit mode, try to set 4 bit mode
write4bits(0x03);
delayMicroseconds(4500); // wait min 4.1ms
// second try
write4bits(0x03);
delayMicroseconds(4500); // wait min 4.1ms
// third go!
write4bits(0x03);
delayMicroseconds(150);
// finally, set to 8-bit interface
write4bits(0x02);
} else {
// this is according to the hitachi HD44780 datasheet
// page 45 figure 23
// Send function set command sequence
command(LCD_FUNCTIONSET | _displayfunction);
delayMicroseconds(4500); // wait more than 4.1ms
// second try
command(LCD_FUNCTIONSET | _displayfunction);
delayMicroseconds(150);
// third go
command(LCD_FUNCTIONSET | _displayfunction);
}
// finally, set # lines, font size, etc.
command(LCD_FUNCTIONSET | _displayfunction);
// turn the display on with no cursor or blinking default
_displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF;
display();
// clear it off
clear();
// Initialize to default text direction (for romance languages)
_displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT;
// set the entry mode
command(LCD_ENTRYMODESET | _displaymode);
}
/********** high level commands, for the user! */
void Adafruit_LiquidCrystal::clear()
{
command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero
delayMicroseconds(2000); // this command takes a long time!
}
void Adafruit_LiquidCrystal::home()
{
command(LCD_RETURNHOME); // set cursor position to zero
delayMicroseconds(2000); // this command takes a long time!
}
void Adafruit_LiquidCrystal::setCursor(uint8_t col, uint8_t row)
{
int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
if ( row > _numlines ) {
row = _numlines-1; // we count rows starting w/0
}
command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
}
// Turn the display on/off (quickly)
void Adafruit_LiquidCrystal::noDisplay() {
_displaycontrol &= ~LCD_DISPLAYON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
void Adafruit_LiquidCrystal::display() {
_displaycontrol |= LCD_DISPLAYON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
// Turns the underline cursor on/off
void Adafruit_LiquidCrystal::noCursor() {
_displaycontrol &= ~LCD_CURSORON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
void Adafruit_LiquidCrystal::cursor() {
_displaycontrol |= LCD_CURSORON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
// Turn on and off the blinking cursor
void Adafruit_LiquidCrystal::noBlink() {
_displaycontrol &= ~LCD_BLINKON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
void Adafruit_LiquidCrystal::blink() {
_displaycontrol |= LCD_BLINKON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
// These commands scroll the display without changing the RAM
void Adafruit_LiquidCrystal::scrollDisplayLeft(void) {
command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT);
}
void Adafruit_LiquidCrystal::scrollDisplayRight(void) {
command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT);
}
// This is for text that flows Left to Right
void Adafruit_LiquidCrystal::leftToRight(void) {
_displaymode |= LCD_ENTRYLEFT;
command(LCD_ENTRYMODESET | _displaymode);
}
// This is for text that flows Right to Left
void Adafruit_LiquidCrystal::rightToLeft(void) {
_displaymode &= ~LCD_ENTRYLEFT;
command(LCD_ENTRYMODESET | _displaymode);
}
// This will 'right justify' text from the cursor
void Adafruit_LiquidCrystal::autoscroll(void) {
_displaymode |= LCD_ENTRYSHIFTINCREMENT;
command(LCD_ENTRYMODESET | _displaymode);
}
// This will 'left justify' text from the cursor
void Adafruit_LiquidCrystal::noAutoscroll(void) {
_displaymode &= ~LCD_ENTRYSHIFTINCREMENT;
command(LCD_ENTRYMODESET | _displaymode);
}
// Allows us to fill the first 8 CGRAM locations
// with custom characters
void Adafruit_LiquidCrystal::createChar(uint8_t location, uint8_t charmap[]) {
location &= 0x7; // we only have 8 locations 0-7
command(LCD_SETCGRAMADDR | (location << 3));
for (int i=0; i<8; i++) {
write(charmap[i]);
}
}
/*********** mid level commands, for sending data/cmds */
inline void Adafruit_LiquidCrystal::command(uint8_t value) {
send(value, LOW);
}
#if ARDUINO >= 100
inline size_t Adafruit_LiquidCrystal::write(uint8_t value) {
send(value, HIGH);
return 1;
}
#else
inline void Adafruit_LiquidCrystal::write(uint8_t value) {
send(value, HIGH);
}
#endif
/************ low level data pushing commands **********/
// little wrapper for i/o writes
void Adafruit_LiquidCrystal::_digitalWrite(uint8_t p, uint8_t d) {
if (_i2cAddr != 255) {
// an i2c command
_i2c.digitalWrite(p, d);
} else if (_SPIclock != 255) {
if (d == HIGH)
_SPIbuff |= (1 << p);
else
_SPIbuff &= ~(1 << p);
digitalWrite(_SPIlatch, LOW);
shiftOut(_SPIdata, _SPIclock, MSBFIRST,_SPIbuff);
digitalWrite(_SPIlatch, HIGH);
} else {
// straightup IO
digitalWrite(p, d);
}
}
// Allows to set the backlight, if the LCD backpack is used
void Adafruit_LiquidCrystal::setBacklight(uint8_t status) {
// check if i2c or SPI
if ((_i2cAddr != 255) || (_SPIclock != 255)) {
_digitalWrite(7, status); // backlight is on pin 7
}
}
// little wrapper for i/o directions
void Adafruit_LiquidCrystal::_pinMode(uint8_t p, uint8_t d) {
if (_i2cAddr != 255) {
// an i2c command
_i2c.pinMode(p, d);
} else if (_SPIclock != 255) {
// nothing!
} else {
// straightup IO
pinMode(p, d);
}
}
// write either command or data, with automatic 4/8-bit selection
void Adafruit_LiquidCrystal::send(uint8_t value, boolean mode) {
_digitalWrite(_rs_pin, mode);
// if there is a RW pin indicated, set it low to Write
if (_rw_pin != 255) {
_digitalWrite(_rw_pin, LOW);
}
if (_displayfunction & LCD_8BITMODE) {
write8bits(value);
} else {
write4bits(value>>4);
write4bits(value);
}
}
void Adafruit_LiquidCrystal::pulseEnable(void) {
_digitalWrite(_enable_pin, LOW);
delayMicroseconds(1);
_digitalWrite(_enable_pin, HIGH);
delayMicroseconds(1); // enable pulse must be >450ns
_digitalWrite(_enable_pin, LOW);
delayMicroseconds(100); // commands need > 37us to settle
}
void Adafruit_LiquidCrystal::write4bits(uint8_t value) {
if (_i2cAddr != 255) {
uint8_t out = 0;
out = _i2c.readGPIO();
// speed up for i2c since its sluggish
for (int i = 0; i < 4; i++) {
out &= ~_BV(_data_pins[i]);
out |= ((value >> i) & 0x1) << _data_pins[i];
}
// make sure enable is low
out &= ~ _BV(_enable_pin);
_i2c.writeGPIO(out);
// pulse enable
delayMicroseconds(1);
out |= _BV(_enable_pin);
_i2c.writeGPIO(out);
delayMicroseconds(1);
out &= ~_BV(_enable_pin);
_i2c.writeGPIO(out);
delayMicroseconds(100);
} else {
for (int i = 0; i < 4; i++) {
_pinMode(_data_pins[i], OUTPUT);
_digitalWrite(_data_pins[i], (value >> i) & 0x01);
}
pulseEnable();
}
}
void Adafruit_LiquidCrystal::write8bits(uint8_t value) {
for (int i = 0; i < 8; i++) {
_pinMode(_data_pins[i], OUTPUT);
_digitalWrite(_data_pins[i], (value >> i) & 0x01);
}
pulseEnable();
}

View File

@ -0,0 +1,124 @@
#ifndef Adafruit_LiquidCrystal_h
#define Adafruit_LiquidCrystal_h
#include "Arduino.h"
#include <inttypes.h>
#include "Print.h"
#include "utility/Adafruit_MCP23008.h"
// commands
#define LCD_CLEARDISPLAY 0x01
#define LCD_RETURNHOME 0x02
#define LCD_ENTRYMODESET 0x04
#define LCD_DISPLAYCONTROL 0x08
#define LCD_CURSORSHIFT 0x10
#define LCD_FUNCTIONSET 0x20
#define LCD_SETCGRAMADDR 0x40
#define LCD_SETDDRAMADDR 0x80
// flags for display entry mode
#define LCD_ENTRYRIGHT 0x00
#define LCD_ENTRYLEFT 0x02
#define LCD_ENTRYSHIFTINCREMENT 0x01
#define LCD_ENTRYSHIFTDECREMENT 0x00
// flags for display on/off control
#define LCD_DISPLAYON 0x04
#define LCD_DISPLAYOFF 0x00
#define LCD_CURSORON 0x02
#define LCD_CURSOROFF 0x00
#define LCD_BLINKON 0x01
#define LCD_BLINKOFF 0x00
// flags for display/cursor shift
#define LCD_DISPLAYMOVE 0x08
#define LCD_CURSORMOVE 0x00
#define LCD_MOVERIGHT 0x04
#define LCD_MOVELEFT 0x00
// flags for function set
#define LCD_8BITMODE 0x10
#define LCD_4BITMODE 0x00
#define LCD_2LINE 0x08
#define LCD_1LINE 0x00
#define LCD_5x10DOTS 0x04
#define LCD_5x8DOTS 0x00
class Adafruit_LiquidCrystal : public Print {
public:
Adafruit_LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
Adafruit_LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
Adafruit_LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
Adafruit_LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
Adafruit_LiquidCrystal(uint8_t i2cAddr);
Adafruit_LiquidCrystal(uint8_t data, uint8_t clock, uint8_t latch);
void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
void clear();
void home();
void noDisplay();
void display();
void noBlink();
void blink();
void noCursor();
void cursor();
void scrollDisplayLeft();
void scrollDisplayRight();
void leftToRight();
void rightToLeft();
void autoscroll();
void noAutoscroll();
// only if using backpack
void setBacklight(uint8_t status);
void createChar(uint8_t, uint8_t[]);
void setCursor(uint8_t, uint8_t);
#if ARDUINO >= 100
virtual size_t write(uint8_t);
#else
virtual void write(uint8_t);
#endif
void command(uint8_t);
private:
void send(uint8_t value, boolean mode);
void write4bits(uint8_t);
void write8bits(uint8_t);
void pulseEnable();
void _digitalWrite(uint8_t, uint8_t);
void _pinMode(uint8_t, uint8_t);
uint8_t _rs_pin; // LOW: command. HIGH: character.
uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD.
uint8_t _enable_pin; // activated by a HIGH pulse.
uint8_t _data_pins[8];
uint8_t _displayfunction;
uint8_t _displaycontrol;
uint8_t _displaymode;
uint8_t _initialized;
uint8_t _numlines,_currline;
uint8_t _SPIclock, _SPIdata, _SPIlatch;
uint8_t _SPIbuff;
uint8_t _i2cAddr;
Adafruit_MCP23008 _i2c;
};
#endif

View File

@ -0,0 +1,37 @@
# Adafruit_LiquidCrystal
This library has been renamed Adafruit_LiquidCrystal so as not to conflict with LiquidCrystal. Also, it now works with tiny85's if you have Adafruit AVR board pkg 1.4.3+
<!-- START COMPATIBILITY TABLE -->
## Compatibility
MCU | Tested Works | Doesn't Work | Not Tested | Notes
----------------- | :----------: | :----------: | :---------: | -----
Atmega328 @ 16MHz | X | | |
Atmega328 @ 12MHz | X | | | For SPI, Pro Trinket has no pin 2, can move to pin 5.
Atmega32u4 @ 16MHz | X | | |
Atmega32u4 @ 8MHz | X | | |
ESP8266 | X | | | For SPI, ESP8266 has no pin 3, moved to pin 5.
Atmega2560 @ 16MHz | X | | |
ATSAM3X8E | X | | |
ATSAM21D | | X | | I2C works, use SDA and SCL pins. For SPI, LCD blinks once on start up.
ATtiny85 @ 16MHz | | X | | Use TinyLiquidCrystal libray instead: https://github.com/adafruit/TinyLiquidCrystal
I2C uses SDA &amp; SCL pins 0 &amp; 2
ATtiny85 @ 8MHz | | X | | Use TinyLiquidCrystal libray instead: https://github.com/adafruit/TinyLiquidCrystal
I2C uses SDA &amp; SCL pins 0 &amp; 2
* ATmega328 @ 16MHz : Arduino UNO, Adafruit Pro Trinket 5V, Adafruit Metro 328, Adafruit Metro Mini
* ATmega328 @ 12MHz : Adafruit Pro Trinket 3V
* ATmega32u4 @ 16MHz : Arduino Leonardo, Arduino Micro, Arduino Yun, Teensy 2.0
* ATmega32u4 @ 8MHz : Adafruit Flora, Bluefruit Micro
* ESP8266 : Adafruit Huzzah
* ATmega2560 @ 16MHz : Arduino Mega
* ATSAM3X8E : Arduino Due
* ATSAM21D : Arduino Zero, M0 Pro
* ATtiny85 @ 16MHz : Adafruit Trinket 5V
* ATtiny85 @ 8MHz : Adafruit Gemma, Arduino Gemma, Adafruit Trinket 3V
<!-- END COMPATIBILITY TABLE -->

View File

@ -0,0 +1,38 @@
#######################################
# Syntax Coloring Map For LiquidCrystal
#######################################
#######################################
# Datatypes (KEYWORD1)
#######################################
Adafruit_LiquidCrystal KEYWORD1
#######################################
# Methods and Functions (KEYWORD2)
#######################################
begin KEYWORD2
clear KEYWORD2
home KEYWORD2
print KEYWORD2
setCursor KEYWORD2
cursor KEYWORD2
noCursor KEYWORD2
blink KEYWORD2
noBlink KEYWORD2
display KEYWORD2
noDisplay KEYWORD2
autoscroll KEYWORD2
noAutoscroll KEYWORD2
leftToRight KEYWORD2
rightToLeft KEYWORD2
scrollDisplayLeft KEYWORD2
scrollDisplayRight KEYWORD2
createChar KEYWORD2
setBacklight KEYWORD2
#######################################
# Constants (LITERAL1)
#######################################

View File

@ -0,0 +1,9 @@
name=Adafruit LiquidCrystal
version=1.0.0
author=Adafruit
maintainer=Adafruit <info@adafruit.com>
sentence=Fork of LiquidCrystal HD44780-compatible LCD driver library, now with support for ATtiny85.
paragraph=Fork of LiquidCrystal HD44780-compatible LCD driver library, now with support for ATtiny85.
category=Display
url=https://github.com/adafruit/LiquidCrystal/
architectures=*

View File

@ -0,0 +1,175 @@
/***************************************************
This is a library for the MCP23008 i2c port expander
These displays use I2C to communicate, 2 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include <Wire.h>
#include "Adafruit_MCP23008.h"
////////////////////////////////////////////////////////////////////////////////
// RTC_DS1307 implementation
void Adafruit_MCP23008::begin(uint8_t addr) {
addr &= 7;
i2caddr = addr;
Wire.begin();
// set defaults!
Wire.beginTransmission(MCP23008_ADDRESS | i2caddr);
#if ARDUINO >= 100
Wire.write((byte)MCP23008_IODIR);
Wire.write((byte)0xFF); // all inputs
Wire.write((byte)0x00);
Wire.write((byte)0x00);
Wire.write((byte)0x00);
Wire.write((byte)0x00);
Wire.write((byte)0x00);
Wire.write((byte)0x00);
Wire.write((byte)0x00);
Wire.write((byte)0x00);
Wire.write((byte)0x00);
#else
Wire.send(MCP23008_IODIR);
Wire.send(0xFF); // all inputs
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
Wire.send(0x00);
#endif
Wire.endTransmission();
}
void Adafruit_MCP23008::begin(void) {
begin(0);
}
void Adafruit_MCP23008::pinMode(uint8_t p, uint8_t d) {
uint8_t iodir;
// only 8 bits!
if (p > 7)
return;
iodir = read8(MCP23008_IODIR);
// set the pin and direction
if (d == INPUT) {
iodir |= 1 << p;
} else {
iodir &= ~(1 << p);
}
// write the new IODIR
write8(MCP23008_IODIR, iodir);
}
uint8_t Adafruit_MCP23008::readGPIO(void) {
// read the current GPIO input
return read8(MCP23008_GPIO);
}
void Adafruit_MCP23008::writeGPIO(uint8_t gpio) {
write8(MCP23008_GPIO, gpio);
}
void Adafruit_MCP23008::digitalWrite(uint8_t p, uint8_t d) {
uint8_t gpio;
// only 8 bits!
if (p > 7)
return;
// read the current GPIO output latches
gpio = readGPIO();
// set the pin and direction
if (d == HIGH) {
gpio |= 1 << p;
} else {
gpio &= ~(1 << p);
}
// write the new GPIO
writeGPIO(gpio);
}
void Adafruit_MCP23008::pullUp(uint8_t p, uint8_t d) {
uint8_t gppu;
// only 8 bits!
if (p > 7)
return;
gppu = read8(MCP23008_GPPU);
// set the pin and direction
if (d == HIGH) {
gppu |= 1 << p;
} else {
gppu &= ~(1 << p);
}
// write the new GPIO
write8(MCP23008_GPPU, gppu);
}
uint8_t Adafruit_MCP23008::digitalRead(uint8_t p) {
// only 8 bits!
if (p > 7)
return 0;
// read the current GPIO
return (readGPIO() >> p) & 0x1;
}
uint8_t Adafruit_MCP23008::read8(uint8_t addr) {
Wire.beginTransmission(MCP23008_ADDRESS | i2caddr);
#if ARDUINO >= 100
Wire.write((byte)addr);
#else
Wire.send(addr);
#endif
Wire.endTransmission();
Wire.requestFrom(MCP23008_ADDRESS | i2caddr, 1);
#if ARDUINO >= 100
return Wire.read();
#else
return Wire.receive();
#endif
}
void Adafruit_MCP23008::write8(uint8_t addr, uint8_t data) {
Wire.beginTransmission(MCP23008_ADDRESS | i2caddr);
#if ARDUINO >= 100
Wire.write((byte)addr);
Wire.write((byte)data);
#else
Wire.send(addr);
Wire.send(data);
#endif
Wire.endTransmission();
}

View File

@ -0,0 +1,50 @@
/***************************************************
This is a library for the MCP23008 i2c port expander
These displays use I2C to communicate, 2 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
#ifndef _ADAFRUIT_MCP23008_H
#define _ADAFRUIT_MCP23008_H
// Don't forget the Wire library
class Adafruit_MCP23008 {
public:
void begin(uint8_t addr);
void begin(void);
void pinMode(uint8_t p, uint8_t d);
void digitalWrite(uint8_t p, uint8_t d);
void pullUp(uint8_t p, uint8_t d);
uint8_t digitalRead(uint8_t p);
uint8_t readGPIO(void);
void writeGPIO(uint8_t);
private:
uint8_t i2caddr;
uint8_t read8(uint8_t addr);
void write8(uint8_t addr, uint8_t data);
};
#define MCP23008_ADDRESS 0x20
// registers
#define MCP23008_IODIR 0x00
#define MCP23008_IPOL 0x01
#define MCP23008_GPINTEN 0x02
#define MCP23008_DEFVAL 0x03
#define MCP23008_INTCON 0x04
#define MCP23008_IOCON 0x05
#define MCP23008_GPPU 0x06
#define MCP23008_INTF 0x07
#define MCP23008_INTCAP 0x08
#define MCP23008_GPIO 0x09
#define MCP23008_OLAT 0x0A
#endif

View File

@ -0,0 +1,230 @@
/***************************************************
This is a library for the MCP23017 i2c port expander
These displays use I2C to communicate, 2 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
#include <Wire.h>
#include <avr/pgmspace.h>
#include "Adafruit_MCP23017.h"
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
// minihelper
static inline void wiresend(uint8_t x) {
#if ARDUINO >= 100
Wire.write((uint8_t)x);
#else
Wire.send(x);
#endif
}
static inline uint8_t wirerecv(void) {
#if ARDUINO >= 100
return Wire.read();
#else
return Wire.receive();
#endif
}
////////////////////////////////////////////////////////////////////////////////
void Adafruit_MCP23017::begin(uint8_t addr) {
if (addr > 7) {
addr = 7;
}
i2caddr = addr;
Wire.begin();
// set defaults!
Wire.beginTransmission(MCP23017_ADDRESS | i2caddr);
wiresend(MCP23017_IODIRA);
wiresend(0xFF); // all inputs on port A
Wire.endTransmission();
Wire.beginTransmission(MCP23017_ADDRESS | i2caddr);
wiresend(MCP23017_IODIRB);
wiresend(0xFF); // all inputs on port B
Wire.endTransmission();
}
void Adafruit_MCP23017::begin(void) {
begin(0);
}
void Adafruit_MCP23017::pinMode(uint8_t p, uint8_t d) {
uint8_t iodir;
uint8_t iodiraddr;
// only 16 bits!
if (p > 15)
return;
if (p < 8)
iodiraddr = MCP23017_IODIRA;
else {
iodiraddr = MCP23017_IODIRB;
p -= 8;
}
// read the current IODIR
Wire.beginTransmission(MCP23017_ADDRESS | i2caddr);
wiresend(iodiraddr);
Wire.endTransmission();
Wire.requestFrom(MCP23017_ADDRESS | i2caddr, 1);
iodir = wirerecv();
// set the pin and direction
if (d == INPUT) {
iodir |= 1 << p;
} else {
iodir &= ~(1 << p);
}
// write the new IODIR
Wire.beginTransmission(MCP23017_ADDRESS | i2caddr);
wiresend(iodiraddr);
wiresend(iodir);
Wire.endTransmission();
}
uint16_t Adafruit_MCP23017::readGPIOAB() {
uint16_t ba = 0;
uint8_t a;
// read the current GPIO output latches
Wire.beginTransmission(MCP23017_ADDRESS | i2caddr);
wiresend(MCP23017_GPIOA);
Wire.endTransmission();
Wire.requestFrom(MCP23017_ADDRESS | i2caddr, 2);
a = wirerecv();
ba = wirerecv();
ba <<= 8;
ba |= a;
return ba;
}
void Adafruit_MCP23017::writeGPIOAB(uint16_t ba) {
Wire.beginTransmission(MCP23017_ADDRESS | i2caddr);
wiresend(MCP23017_GPIOA);
wiresend(ba & 0xFF);
wiresend(ba >> 8);
Wire.endTransmission();
}
void Adafruit_MCP23017::digitalWrite(uint8_t p, uint8_t d) {
uint8_t gpio;
uint8_t gpioaddr, olataddr;
// only 16 bits!
if (p > 15)
return;
if (p < 8) {
olataddr = MCP23017_OLATA;
gpioaddr = MCP23017_GPIOA;
} else {
olataddr = MCP23017_OLATB;
gpioaddr = MCP23017_GPIOB;
p -= 8;
}
// read the current GPIO output latches
Wire.beginTransmission(MCP23017_ADDRESS | i2caddr);
wiresend(olataddr);
Wire.endTransmission();
Wire.requestFrom(MCP23017_ADDRESS | i2caddr, 1);
gpio = wirerecv();
// set the pin and direction
if (d == HIGH) {
gpio |= 1 << p;
} else {
gpio &= ~(1 << p);
}
// write the new GPIO
Wire.beginTransmission(MCP23017_ADDRESS | i2caddr);
wiresend(gpioaddr);
wiresend(gpio);
Wire.endTransmission();
}
void Adafruit_MCP23017::pullUp(uint8_t p, uint8_t d) {
uint8_t gppu;
uint8_t gppuaddr;
// only 16 bits!
if (p > 15)
return;
if (p < 8)
gppuaddr = MCP23017_GPPUA;
else {
gppuaddr = MCP23017_GPPUB;
p -= 8;
}
// read the current pullup resistor set
Wire.beginTransmission(MCP23017_ADDRESS | i2caddr);
wiresend(gppuaddr);
Wire.endTransmission();
Wire.requestFrom(MCP23017_ADDRESS | i2caddr, 1);
gppu = wirerecv();
// set the pin and direction
if (d == HIGH) {
gppu |= 1 << p;
} else {
gppu &= ~(1 << p);
}
// write the new GPIO
Wire.beginTransmission(MCP23017_ADDRESS | i2caddr);
wiresend(gppuaddr);
wiresend(gppu);
Wire.endTransmission();
}
uint8_t Adafruit_MCP23017::digitalRead(uint8_t p) {
uint8_t gpioaddr;
// only 16 bits!
if (p > 15)
return 0;
if (p < 8)
gpioaddr = MCP23017_GPIOA;
else {
gpioaddr = MCP23017_GPIOB;
p -= 8;
}
// read the current GPIO
Wire.beginTransmission(MCP23017_ADDRESS | i2caddr);
wiresend(gpioaddr);
Wire.endTransmission();
Wire.requestFrom(MCP23017_ADDRESS | i2caddr, 1);
return (wirerecv() >> p) & 0x1;
}

View File

@ -0,0 +1,63 @@
/***************************************************
This is a library for the MCP23017 i2c port expander
These displays use I2C to communicate, 2 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
#ifndef _Adafruit_MCP23017_H_
#define _Adafruit_MCP23017_H_
// Don't forget the Wire library
class Adafruit_MCP23017 {
public:
void begin(uint8_t addr);
void begin(void);
void pinMode(uint8_t p, uint8_t d);
void digitalWrite(uint8_t p, uint8_t d);
void pullUp(uint8_t p, uint8_t d);
uint8_t digitalRead(uint8_t p);
void writeGPIOAB(uint16_t);
uint16_t readGPIOAB();
private:
uint8_t i2caddr;
};
#define MCP23017_ADDRESS 0x20
// registers
#define MCP23017_IODIRA 0x00
#define MCP23017_IPOLA 0x02
#define MCP23017_GPINTENA 0x04
#define MCP23017_DEFVALA 0x06
#define MCP23017_INTCONA 0x08
#define MCP23017_IOCONA 0x0A
#define MCP23017_GPPUA 0x0C
#define MCP23017_INTFA 0x0E
#define MCP23017_INTCAPA 0x10
#define MCP23017_GPIOA 0x12
#define MCP23017_OLATA 0x14
#define MCP23017_IODIRB 0x01
#define MCP23017_IPOLB 0x03
#define MCP23017_GPINTENB 0x05
#define MCP23017_DEFVALB 0x07
#define MCP23017_INTCONB 0x09
#define MCP23017_IOCONB 0x0B
#define MCP23017_GPPUB 0x0D
#define MCP23017_INTFB 0x0F
#define MCP23017_INTCAPB 0x11
#define MCP23017_GPIOB 0x13
#define MCP23017_OLATB 0x15
#endif

View File

@ -0,0 +1,431 @@
/***************************************************
This is a library for the Adafruit RGB 16x2 LCD Shield
Pick one up at the Adafruit shop!
---------> http://http://www.adafruit.com/products/714
The shield uses I2C to communicate, 2 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
#include "Adafruit_RGBLCDShield.h"
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include <Wire.h>
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
// When the display powers up, it is configured as follows:
//
// 1. Display clear
// 2. Function set:
// DL = 1; 8-bit interface data
// N = 0; 1-line display
// F = 0; 5x8 dot character font
// 3. Display on/off control:
// D = 0; Display off
// C = 0; Cursor off
// B = 0; Blinking off
// 4. Entry mode set:
// I/D = 1; Increment by 1
// S = 0; No shift
//
// Note, however, that resetting the Arduino doesn't reset the LCD, so we
// can't assume that its in that state when a sketch starts (and the
// RGBLCDShield constructor is called).
Adafruit_RGBLCDShield::Adafruit_RGBLCDShield() {
_i2cAddr = 0;
_displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
// the I/O expander pinout
_rs_pin = 15;
_rw_pin = 14;
_enable_pin = 13;
_data_pins[0] = 12; // really d4
_data_pins[1] = 11; // really d5
_data_pins[2] = 10; // really d6
_data_pins[3] = 9; // really d7
_button_pins[0] = 0;
_button_pins[1] = 1;
_button_pins[2] = 2;
_button_pins[3] = 3;
_button_pins[4] = 4;
// we can't begin() yet :(
}
void Adafruit_RGBLCDShield::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
{
_rs_pin = rs;
_rw_pin = rw;
_enable_pin = enable;
_data_pins[0] = d0;
_data_pins[1] = d1;
_data_pins[2] = d2;
_data_pins[3] = d3;
_data_pins[4] = d4;
_data_pins[5] = d5;
_data_pins[6] = d6;
_data_pins[7] = d7;
_i2cAddr = 255;
_pinMode(_rs_pin, OUTPUT);
// we can save 1 pin by not using RW. Indicate by passing 255 instead of pin#
if (_rw_pin != 255) {
_pinMode(_rw_pin, OUTPUT);
}
_pinMode(_enable_pin, OUTPUT);
if (fourbitmode)
_displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
else
_displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS;
begin(16, 1);
}
void Adafruit_RGBLCDShield::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) {
// check if i2c
if (_i2cAddr != 255) {
//_i2c.begin(_i2cAddr);
Wire.begin();
_i2c.begin();
_i2c.pinMode(8, OUTPUT);
_i2c.pinMode(6, OUTPUT);
_i2c.pinMode(7, OUTPUT);
setBacklight(0x7);
if (_rw_pin)
_i2c.pinMode(_rw_pin, OUTPUT);
_i2c.pinMode(_rs_pin, OUTPUT);
_i2c.pinMode(_enable_pin, OUTPUT);
for (uint8_t i=0; i<4; i++)
_i2c.pinMode(_data_pins[i], OUTPUT);
for (uint8_t i=0; i<5; i++) {
_i2c.pinMode(_button_pins[i], INPUT);
_i2c.pullUp(_button_pins[i], 1);
}
}
if (lines > 1) {
_displayfunction |= LCD_2LINE;
}
_numlines = lines;
_currline = 0;
// for some 1 line displays you can select a 10 pixel high font
if ((dotsize != 0) && (lines == 1)) {
_displayfunction |= LCD_5x10DOTS;
}
// SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION!
// according to datasheet, we need at least 40ms after power rises above 2.7V
// before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50
delayMicroseconds(50000);
// Now we pull both RS and R/W low to begin commands
_digitalWrite(_rs_pin, LOW);
_digitalWrite(_enable_pin, LOW);
if (_rw_pin != 255) {
_digitalWrite(_rw_pin, LOW);
}
//put the LCD into 4 bit or 8 bit mode
if (! (_displayfunction & LCD_8BITMODE)) {
// this is according to the hitachi HD44780 datasheet
// figure 24, pg 46
// we start in 8bit mode, try to set 4 bit mode
write4bits(0x03);
delayMicroseconds(4500); // wait min 4.1ms
// second try
write4bits(0x03);
delayMicroseconds(4500); // wait min 4.1ms
// third go!
write4bits(0x03);
delayMicroseconds(150);
// finally, set to 8-bit interface
write4bits(0x02);
} else {
// this is according to the hitachi HD44780 datasheet
// page 45 figure 23
// Send function set command sequence
command(LCD_FUNCTIONSET | _displayfunction);
delayMicroseconds(4500); // wait more than 4.1ms
// second try
command(LCD_FUNCTIONSET | _displayfunction);
delayMicroseconds(150);
// third go
command(LCD_FUNCTIONSET | _displayfunction);
}
// finally, set # lines, font size, etc.
command(LCD_FUNCTIONSET | _displayfunction);
// turn the display on with no cursor or blinking default
_displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF;
display();
// clear it off
clear();
// Initialize to default text direction (for romance languages)
_displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT;
// set the entry mode
command(LCD_ENTRYMODESET | _displaymode);
}
/********** high level commands, for the user! */
void Adafruit_RGBLCDShield::clear()
{
command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero
delayMicroseconds(2000); // this command takes a long time!
}
void Adafruit_RGBLCDShield::home()
{
command(LCD_RETURNHOME); // set cursor position to zero
delayMicroseconds(2000); // this command takes a long time!
}
void Adafruit_RGBLCDShield::setCursor(uint8_t col, uint8_t row)
{
int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
if ( row > _numlines ) {
row = _numlines-1; // we count rows starting w/0
}
command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
}
// Turn the display on/off (quickly)
void Adafruit_RGBLCDShield::noDisplay() {
_displaycontrol &= ~LCD_DISPLAYON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
void Adafruit_RGBLCDShield::display() {
_displaycontrol |= LCD_DISPLAYON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
// Turns the underline cursor on/off
void Adafruit_RGBLCDShield::noCursor() {
_displaycontrol &= ~LCD_CURSORON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
void Adafruit_RGBLCDShield::cursor() {
_displaycontrol |= LCD_CURSORON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
// Turn on and off the blinking cursor
void Adafruit_RGBLCDShield::noBlink() {
_displaycontrol &= ~LCD_BLINKON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
void Adafruit_RGBLCDShield::blink() {
_displaycontrol |= LCD_BLINKON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
// These commands scroll the display without changing the RAM
void Adafruit_RGBLCDShield::scrollDisplayLeft(void) {
command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT);
}
void Adafruit_RGBLCDShield::scrollDisplayRight(void) {
command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT);
}
// This is for text that flows Left to Right
void Adafruit_RGBLCDShield::leftToRight(void) {
_displaymode |= LCD_ENTRYLEFT;
command(LCD_ENTRYMODESET | _displaymode);
}
// This is for text that flows Right to Left
void Adafruit_RGBLCDShield::rightToLeft(void) {
_displaymode &= ~LCD_ENTRYLEFT;
command(LCD_ENTRYMODESET | _displaymode);
}
// This will 'right justify' text from the cursor
void Adafruit_RGBLCDShield::autoscroll(void) {
_displaymode |= LCD_ENTRYSHIFTINCREMENT;
command(LCD_ENTRYMODESET | _displaymode);
}
// This will 'left justify' text from the cursor
void Adafruit_RGBLCDShield::noAutoscroll(void) {
_displaymode &= ~LCD_ENTRYSHIFTINCREMENT;
command(LCD_ENTRYMODESET | _displaymode);
}
// Allows us to fill the first 8 CGRAM locations
// with custom characters
void Adafruit_RGBLCDShield::createChar(uint8_t location, uint8_t charmap[]) {
location &= 0x7; // we only have 8 locations 0-7
command(LCD_SETCGRAMADDR | (location << 3));
for (int i=0; i<8; i++) {
write(charmap[i]);
}
command(LCD_SETDDRAMADDR); // unfortunately resets the location to 0,0
}
/*********** mid level commands, for sending data/cmds */
inline void Adafruit_RGBLCDShield::command(uint8_t value) {
send(value, LOW);
}
#if ARDUINO >= 100
inline size_t Adafruit_RGBLCDShield::write(uint8_t value) {
send(value, HIGH);
return 1;
}
#else
inline void Adafruit_RGBLCDShield::write(uint8_t value) {
send(value, HIGH);
}
#endif
/************ low level data pushing commands **********/
// little wrapper for i/o writes
void Adafruit_RGBLCDShield::_digitalWrite(uint8_t p, uint8_t d) {
if (_i2cAddr != 255) {
// an i2c command
_i2c.digitalWrite(p, d);
} else {
// straightup IO
digitalWrite(p, d);
}
}
// Allows to set the backlight, if the LCD backpack is used
void Adafruit_RGBLCDShield::setBacklight(uint8_t status) {
// check if i2c or SPI
_i2c.digitalWrite(8, ~(status >> 2) & 0x1);
_i2c.digitalWrite(7, ~(status >> 1) & 0x1);
_i2c.digitalWrite(6, ~status & 0x1);
}
// little wrapper for i/o directions
void Adafruit_RGBLCDShield::_pinMode(uint8_t p, uint8_t d) {
if (_i2cAddr != 255) {
// an i2c command
_i2c.pinMode(p, d);
} else {
// straightup IO
pinMode(p, d);
}
}
// write either command or data, with automatic 4/8-bit selection
void Adafruit_RGBLCDShield::send(uint8_t value, uint8_t mode) {
_digitalWrite(_rs_pin, mode);
// if there is a RW pin indicated, set it low to Write
if (_rw_pin != 255) {
_digitalWrite(_rw_pin, LOW);
}
if (_displayfunction & LCD_8BITMODE) {
write8bits(value);
} else {
write4bits(value>>4);
write4bits(value);
}
}
void Adafruit_RGBLCDShield::pulseEnable(void) {
_digitalWrite(_enable_pin, LOW);
delayMicroseconds(1);
_digitalWrite(_enable_pin, HIGH);
delayMicroseconds(1); // enable pulse must be >450ns
_digitalWrite(_enable_pin, LOW);
delayMicroseconds(100); // commands need > 37us to settle
}
void Adafruit_RGBLCDShield::write4bits(uint8_t value) {
if (_i2cAddr != 255) {
uint16_t out = 0;
out = _i2c.readGPIOAB();
// speed up for i2c since its sluggish
for (int i = 0; i < 4; i++) {
out &= ~_BV(_data_pins[i]);
out |= ((value >> i) & 0x1) << _data_pins[i];
}
// make sure enable is low
out &= ~ _BV(_enable_pin);
_i2c.writeGPIOAB(out);
// pulse enable
delayMicroseconds(1);
out |= _BV(_enable_pin);
_i2c.writeGPIOAB(out);
delayMicroseconds(1);
out &= ~_BV(_enable_pin);
_i2c.writeGPIOAB(out);
delayMicroseconds(100);
} else {
for (int i = 0; i < 4; i++) {
_pinMode(_data_pins[i], OUTPUT);
_digitalWrite(_data_pins[i], (value >> i) & 0x01);
}
pulseEnable();
}
}
void Adafruit_RGBLCDShield::write8bits(uint8_t value) {
for (int i = 0; i < 8; i++) {
_pinMode(_data_pins[i], OUTPUT);
_digitalWrite(_data_pins[i], (value >> i) & 0x01);
}
pulseEnable();
}
uint8_t Adafruit_RGBLCDShield::readButtons(void) {
uint8_t reply = 0x1F;
for (uint8_t i=0; i<5; i++) {
reply &= ~((_i2c.digitalRead(_button_pins[i])) << i);
}
return reply;
}

View File

@ -0,0 +1,132 @@
/***************************************************
This is a library for the Adafruit RGB 16x2 LCD Shield
Pick one up at the Adafruit shop!
---------> http://http://www.adafruit.com/products/714
The shield uses I2C to communicate, 2 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
#ifndef Adafruit_RGBLCDShield_h
#define Adafruit_RGBLCDShield_h
#include <inttypes.h>
#include "Print.h"
#include <Adafruit_MCP23017.h>
// commands
#define LCD_CLEARDISPLAY 0x01
#define LCD_RETURNHOME 0x02
#define LCD_ENTRYMODESET 0x04
#define LCD_DISPLAYCONTROL 0x08
#define LCD_CURSORSHIFT 0x10
#define LCD_FUNCTIONSET 0x20
#define LCD_SETCGRAMADDR 0x40
#define LCD_SETDDRAMADDR 0x80
// flags for display entry mode
#define LCD_ENTRYRIGHT 0x00
#define LCD_ENTRYLEFT 0x02
#define LCD_ENTRYSHIFTINCREMENT 0x01
#define LCD_ENTRYSHIFTDECREMENT 0x00
// flags for display on/off control
#define LCD_DISPLAYON 0x04
#define LCD_DISPLAYOFF 0x00
#define LCD_CURSORON 0x02
#define LCD_CURSOROFF 0x00
#define LCD_BLINKON 0x01
#define LCD_BLINKOFF 0x00
// flags for display/cursor shift
#define LCD_DISPLAYMOVE 0x08
#define LCD_CURSORMOVE 0x00
#define LCD_MOVERIGHT 0x04
#define LCD_MOVELEFT 0x00
// flags for function set
#define LCD_8BITMODE 0x10
#define LCD_4BITMODE 0x00
#define LCD_2LINE 0x08
#define LCD_1LINE 0x00
#define LCD_5x10DOTS 0x04
#define LCD_5x8DOTS 0x00
#define BUTTON_UP 0x08
#define BUTTON_DOWN 0x04
#define BUTTON_LEFT 0x10
#define BUTTON_RIGHT 0x02
#define BUTTON_SELECT 0x01
class Adafruit_RGBLCDShield : public Print {
public:
Adafruit_RGBLCDShield();
void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
void clear();
void home();
void noDisplay();
void display();
void noBlink();
void blink();
void noCursor();
void cursor();
void scrollDisplayLeft();
void scrollDisplayRight();
void leftToRight();
void rightToLeft();
void autoscroll();
void noAutoscroll();
// only if using backpack
void setBacklight(uint8_t status);
void createChar(uint8_t, uint8_t[]);
void setCursor(uint8_t, uint8_t);
#if ARDUINO >= 100
virtual size_t write(uint8_t);
#else
virtual void write(uint8_t);
#endif
void command(uint8_t);
uint8_t readButtons();
private:
void send(uint8_t, uint8_t);
void write4bits(uint8_t);
void write8bits(uint8_t);
void pulseEnable();
void _digitalWrite(uint8_t, uint8_t);
void _pinMode(uint8_t, uint8_t);
uint8_t _rs_pin; // LOW: command. HIGH: character.
uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD.
uint8_t _enable_pin; // activated by a HIGH pulse.
uint8_t _data_pins[8];
uint8_t _button_pins[5];
uint8_t _displayfunction;
uint8_t _displaycontrol;
uint8_t _displaymode;
uint8_t _initialized;
uint8_t _numlines,_currline;
uint8_t _i2cAddr;
Adafruit_MCP23017 _i2c;
};
#endif

137
libraries/BasicTerm/BasicTerm.cpp Executable file
View File

@ -0,0 +1,137 @@
/*
* BasicTerm.cpp
* Provides basic ANSI/VT220 terminal control over a serial interface
* Copyright 2011 Trannie Carter <borys@nottwo.org>
* Licensed for use under the terms of the GNU Lesser General Public License v3
*/
#include "BasicTerm.h"
BasicTerm::BasicTerm(Stream *ser) {
serial = ser;
}
int BasicTerm::available(void) {
return serial->available();
}
int BasicTerm::peek(void) {
return serial->peek();
}
int BasicTerm::read(void) {
return serial->read();
}
void BasicTerm::flush(void) {
serial->flush();
}
size_t BasicTerm::write(uint8_t c) {
return serial->write(c);
}
void BasicTerm::init(void) {
serial->print(F("\x1b\x63"));
}
void BasicTerm::cls(void) {
serial->print(F("\x1b[2J"));
}
void BasicTerm::position(uint8_t row, uint8_t col) {
serial->print(F("\x1b["));
serial->print((uint8_t)row + 1);
serial->print(F(";"));
serial->print((uint8_t)col + 1);
serial->print(F("H"));
}
void BasicTerm::show_cursor(boolean show) {
if(show) {
serial->print(F("\x1b[?25h"));
} else {
serial->print(F("\x1b[?25l"));
}
}
int16_t BasicTerm::get_key(void) {
int16_t key;
uint16_t when;
key = serial->read();
if(key == 0x1b) { /* escape sequence */
when = millis();
while(serial->available() < 2) {
if(((uint16_t) millis() - when) > 1000) {
return key;
}
}
key = serial->read();
switch(key) {
case '[':
key = serial->read();
switch(key) {
case 'A':
return BT_KEY_UP;
case 'B':
return BT_KEY_DOWN;
case 'C':
return BT_KEY_RIGHT;
case 'D':
return BT_KEY_LEFT;
default:
return key;
}
break;
case 'O':
key = serial->read();
switch(key) {
case 'P':
return BT_KEY_F(1);
case 'Q':
return BT_KEY_F(2);
case 'R':
return BT_KEY_F(3);
case 'S':
return BT_KEY_F(4);
default:
return key;
}
break;
default:
return key;
}
}
return key;
}
void BasicTerm::set_attribute(uint8_t attr) {
if(attr & BT_REVERSE) {
serial->print(F("\x1b[7m"));
}
if(attr & BT_UNDERLINE) {
serial->print(F("\x1b[4m"));
}
if(attr & BT_BOLD) {
serial->print(F("\x1b[1m"));
}
if(attr & BT_BLINK) {
serial->print(F("\x1b[5m"));
}
if(attr == BT_NORMAL) {
serial->print(F("\x1b[0m"));
}
}
void BasicTerm::set_color(uint8_t fg, uint8_t bg) {
serial->print(F("\x1b["));
serial->print(30 + fg);
serial->print(";");
serial->print(40 + bg);
serial->print("m");
}

60
libraries/BasicTerm/BasicTerm.h Executable file
View File

@ -0,0 +1,60 @@
/*
* BasicTerm.h
* Provides basic ANSI/VT220 terminal control over a serial interface
* Copyright 2011 Trannie Carter <borys@nottwo.org>
* Licensed for use under the terms of the GNU Lesser General Public License v3
*/
#ifndef BASICTERM_H
#define BASICTERM_H
#include <Arduino.h>
class BasicTerm : public Stream {
#define BT_NORMAL 0
#define BT_BOLD 1
#define BT_UNDERLINE 2
#define BT_BLINK 4
#define BT_REVERSE 8
#define BT_BLACK 0
#define BT_RED 1
#define BT_GREEN 2
#define BT_YELLOW 3
#define BT_BLUE 4
#define BT_MAGENTA 5
#define BT_CYAN 6
#define BT_WHITE 7
#define BT_KEY_UNKNOWN 0401
#define BT_KEY_DOWN 0402
#define BT_KEY_UP 0403
#define BT_KEY_LEFT 0404
#define BT_KEY_RIGHT 0405
#define BT_KEY_F0 0410
#define BT_KEY_F(n) (BT_KEY_F0 + (n))
private:
Stream *serial;
public:
BasicTerm(Stream *);
void init(void);
void cls(void);
void position(uint8_t, uint8_t);
void show_cursor(boolean);
void set_attribute(uint8_t);
void set_color(uint8_t, uint8_t);
int16_t get_key(void);
virtual int available(void);
virtual int peek(void);
virtual int read(void);
virtual void flush(void);
virtual size_t write(uint8_t);
using Print::write;
};
#endif

84
libraries/E24C1024/E24C1024.cpp Executable file
View File

@ -0,0 +1,84 @@
/*
E24C1024.cpp
AT24C1024 Library for Arduino
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
This library is based on several projects:
The Arduino EEPROM library found here:
http://arduino.cc/en/Reference/EEPROM
The 24C256 library found here:
http://www.arduino.cc/playground/Code/I2CEEPROM
The 24C512 library found here:
http://www.arduino.cc/playground/Code/I2CEEPROM24LC512
Our project page is here:
http://www.arduino.cc/playground/Code/I2CEEPROM24C1024
From the datasheet:
The AT24C1024B provides 1,048,576 bits of serial electrically
erasable and programmable read only memory (EEPROM) organized
as 131,072 words of 8 bits each. The devices cascadable
feature allows up to four devices to share a common two-wire
bus.
http://www.atmel.com/dyn/resources/prod_documents/doc5194.pdf
*/
// Note: This is written for Arduino versions before 1.0. If you are using Arduino 1.0 and above
// then you need to change Wire.Send to Wire.write and Wire.receive to Wire.read
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include <Wire.h>
#include "E24C1024.h"
E24C1024::E24C1024(void)
{
Wire.begin();
}
void E24C1024::write(unsigned long dataAddress, uint8_t data)
{
Wire.beginTransmission((uint8_t)((0x500000 | dataAddress) >> 16)); // B1010xxx
Wire.write((uint8_t)((dataAddress & WORD_MASK) >> 8)); // MSB
Wire.write((uint8_t)(dataAddress & 0xFF)); // LSB
Wire.write(data);
Wire.endTransmission();
delay(5);
}
uint8_t E24C1024::read(unsigned long dataAddress)
{
uint8_t data = 0x00;
Wire.beginTransmission((uint8_t)((0x500000 | dataAddress) >> 16)); // B1010xxx
Wire.write((uint8_t)((dataAddress & WORD_MASK) >> 8)); // MSB
Wire.write((uint8_t)(dataAddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(0x50,1);
if (Wire.available()) data = Wire.read();
return data;
}
E24C1024 EEPROM1024;

Some files were not shown because too many files have changed in this diff Show More