From 748f5d2c7f73f83ef5ca57b4b3a641a9e8cdcce1 Mon Sep 17 00:00:00 2001 From: kenji Date: Wed, 28 May 2025 19:44:24 -0400 Subject: [PATCH] Add licensing and README --- COPYING | 15 ++ LICENSE | 674 +++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 57 +++++ lwipopts.h | 27 ++- web-ui.jpg | Bin 0 -> 58557 bytes 5 files changed, 770 insertions(+), 3 deletions(-) create mode 100644 COPYING create mode 100644 LICENSE create mode 100644 README.md create mode 100644 web-ui.jpg diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..8f9b819 --- /dev/null +++ b/COPYING @@ -0,0 +1,15 @@ +Picokeyboard - Web-based USB HID device using Raspberry Pi Pico W +Copyright (C) 2025 Kenji Kozai + + 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 . diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + 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. + + + Copyright (C) + + 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 . + +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: + + Copyright (C) + 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 +. + + 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 +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..821b018 --- /dev/null +++ b/README.md @@ -0,0 +1,57 @@ +# Picokeyboard + +## About + +This project turns a Raspberry Pi Pico W into a web-based USB HID keyboard +device. Users can access a webpage served over HTTP to enter keyboard input +onto the host device of the Raspberry Pi Pico W. Input keys can be entered +through a keyboard on the client device or by pressing on the keys on the +graphical interface served on the webpage. + +![Web interface for Picokeyboard](web-ui.jpg) + +## Setup + +Flash the [webkeyboard.uf2](raw/branch/main/build/webkeyboard.uf2) file onto +the Raspberry Pi Pico W and connect the Raspberry Pi Pico W with a micro USB +cable to the host computer or other device. + +On initial boot, the Raspberry Pi Pico W will enter Access Point mode with +SSID "picokb" and password "password". Connect to this network with another +device and open a browser window to [http://picokb](http://picokb). +Go to the "Configure W-Fi" page and enter the SSID and password to the +network that you would like the Raspberry Pi Pico W to connect. Optionally, +also enter a hostname for the device and static IP information. Hit the "Save" +button to save the network information to device flash. + +Browse back to the main UI page at [http://picokb](http://picokb) and press +"Reboot". The device should automatically connect to the network with the +saved information. You can then connect to the device using a web browser +at the device's assigned IP or hostname by accessing http://IP_ADDRESS or +http://HOSTNAME + +If the fails to connect to the saved Wi-Fi network, it will once again enter +Access Point mode, and you can connect to the device directly to modify the +network information. + +Alternatively, you can use the device directly in Access Point mode by +accessing the device at [http://picokb](http://picokb). The program is +set to reboot automatically to try to reconnect to the nextwork after 10 +minutes of inactivity if no keyboard input is received during that time. + +## Licensing + +This software is distributed under the [GNU General Public License version 3] +(LICENSE), with the exception of the libraries in the following section. + +## Attributions + +The project uses code from the following sources: + +- [MicroPython Project](https://github.com/micropython/micropython) for + (dhcpserver.c/h)[dhcpserver.c] distributed under the MIT license +- [Raspberry Pi Pico SDK Examples](https://github.com/raspberrypi/pico-examples) + for a modified version of [pico_w/wifi/lwipopts_examples_common.h](lwipopts.h) + distributed under the BSD-3-Clause license +- [TinyUSB](https://github.com/hathach/tinyusb) for the base version of + [tusb_config.h](tusb_config.h) distributed under the MIT license diff --git a/lwipopts.h b/lwipopts.h index 60c177f..daf6604 100644 --- a/lwipopts.h +++ b/lwipopts.h @@ -1,9 +1,30 @@ +/* + * Copyright 2020 (c) 2020 Raspberry Pi (Trading) Ltd. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + #ifndef __LWIPOPTS_H__ #define __LWIPOPTS_H__ -// Common settings used in most of the pico_w examples -// (see https://www.nongnu.org/lwip/2_1_x/group__lwip__opts.html for details) - // allow override in some examples #ifndef NO_SYS #define NO_SYS 1 diff --git a/web-ui.jpg b/web-ui.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6882c71cd023397b543b953c1d24807835764b55 GIT binary patch literal 58557 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 K@H+Nw;{O1uzk_W6 literal 0 HcmV?d00001