From d0ccf253d7109a4f79e37114f70f8f604c1262d6 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Mon, 24 Jan 2022 16:43:55 +0100 Subject: [PATCH 01/41] Create LICENCE.md Fix #80 --- LICENCE.md | 1544 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1544 insertions(+) create mode 100644 LICENCE.md diff --git a/LICENCE.md b/LICENCE.md new file mode 100644 index 000000000..7c005d888 --- /dev/null +++ b/LICENCE.md @@ -0,0 +1,1544 @@ +This files includes licensing information for parts of this repository. + +[GPLv2](#gplv2) is used for: +* [busybox-w32](https://frippery.org/busybox/) +* [dfu-util](http://dfu-util.sourceforge.net/) (also available [here](src/dfu-util/COPYING)) +* maple_loader +* upload-reset + +[GPLv3](#gplv3) is used for: +* [HID-flash](https://github.com/Serasidis/STM32_HID_Bootloader) + +[LGPLv2.1](#lgplv21) is used for: +* [libusb](https://github.com/libusb/libusb) +* All other shell and batch scripts: massStorageCopy, run_arduino_gen, stm32CubeProg,... + +------------------------------------------------------------------------------- +## GPLv2 + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This 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. + +------------------------------------------------------------------------------- +## GPLv3 + + 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 +. + +------------------------------------------------------------------------------- +## LGPLv2.1 + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey 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 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 Street, Fifth Floor, Boston, MA 02110-1301 + USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random + Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + +------------------------------------------------------------------------------- From 4502933938c66d97e2cb677545d2a0f37487b693 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 15 Mar 2022 15:17:28 +0100 Subject: [PATCH 02/41] fix: double quote to prevent globbing and word splitting shellcheck(SC2086) Signed-off-by: Frederic Pillon --- linux/maple_upload.sh | 2 +- macosx/maple_upload.sh | 2 +- stm32CubeProg.sh | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/linux/maple_upload.sh b/linux/maple_upload.sh index df751aae4..37d21ce20 100755 --- a/linux/maple_upload.sh +++ b/linux/maple_upload.sh @@ -36,7 +36,7 @@ fi COUNTER=5 while - "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" ${dfuse_addr} -R + "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" "${dfuse_addr}" -R ((ret = $?)) do if [ $ret -eq 74 ] && [ $((--COUNTER)) -gt 0 ]; then diff --git a/macosx/maple_upload.sh b/macosx/maple_upload.sh index df751aae4..37d21ce20 100755 --- a/macosx/maple_upload.sh +++ b/macosx/maple_upload.sh @@ -36,7 +36,7 @@ fi COUNTER=5 while - "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" ${dfuse_addr} -R + "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" "${dfuse_addr}" -R ((ret = $?)) do if [ $ret -eq 74 ] && [ $((--COUNTER)) -gt 0 ]; then diff --git a/stm32CubeProg.sh b/stm32CubeProg.sh index 62b8d5f9b..e79ef71dd 100644 --- a/stm32CubeProg.sh +++ b/stm32CubeProg.sh @@ -41,10 +41,10 @@ case "${UNAME_OS}" in Linux*) STM32CP_CLI=STM32_Programmer.sh if ! command -v $STM32CP_CLI >/dev/null 2>&1; then - export PATH="$HOME/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin":$PATH + export PATH="$HOME/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin":"$PATH" fi if ! command -v $STM32CP_CLI >/dev/null 2>&1; then - export PATH="/opt/stm32cubeprog/bin":$PATH + export PATH="/opt/stm32cubeprog/bin":"$PATH" fi if ! command -v $STM32CP_CLI >/dev/null 2>&1; then echo "STM32CubeProgrammer not found ($STM32CP_CLI)." @@ -57,7 +57,7 @@ case "${UNAME_OS}" in Darwin*) STM32CP_CLI=STM32_Programmer_CLI if ! command -v $STM32CP_CLI >/dev/null 2>&1; then - export PATH="/Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/Contents/MacOs/bin":$PATH + export PATH="/Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/Contents/MacOs/bin":"$PATH" fi if ! command -v $STM32CP_CLI >/dev/null 2>&1; then echo "STM32CubeProgrammer not found ($STM32CP_CLI)." @@ -72,11 +72,11 @@ case "${UNAME_OS}" in if ! command -v $STM32CP_CLI >/dev/null 2>&1; then if [ -n "${PROGRAMFILES+x}" ]; then STM32CP86=${PROGRAMFILES}/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin - export PATH=${STM32CP86}:$PATH + export PATH="${STM32CP86}":"$PATH" fi if [ -n "${PROGRAMW6432+x}" ]; then STM32CP=${PROGRAMW6432}/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin - export PATH=${STM32CP}:$PATH + export PATH="${STM32CP}":"$PATH" fi if ! command -v $STM32CP_CLI >/dev/null 2>&1; then echo "STM32CubeProgrammer not found ($STM32CP_CLI)." From 556da4ad6a03c2b52c423da4bd4423db2c6aad76 Mon Sep 17 00:00:00 2001 From: INOUETAICHI Date: Tue, 15 Nov 2022 02:27:39 +0900 Subject: [PATCH 03/41] Resolve upload issues on macOS Ventura The df -l option on macOS Ventura ignores Mass Storage Volume of STM32. If you remove the -l option it works fine. --- macosx/massStorageCopy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macosx/massStorageCopy.sh b/macosx/massStorageCopy.sh index 84c738271..0f176d15b 100755 --- a/macosx/massStorageCopy.sh +++ b/macosx/massStorageCopy.sh @@ -67,7 +67,7 @@ done # Search the mountpoint IFS=' ,\t' read -ra mnt_list <<< "$mountpoint_name" for mnt in "${mnt_list[@]}"; do - mnt_path_list=($(df -Hl | grep -v "Mounted on" | rev | cut -d' ' -f1 | rev | sort -u | grep "$mnt")) + mnt_path_list=($(df -H | grep -v "Mounted on" | rev | cut -d' ' -f1 | rev | sort -u | grep "$mnt")) if [ ${#mnt_path_list[@]} -ne 0 ]; then # Ensure to have exact match for mnt_path in "${mnt_path_list[@]}"; do From 12feffb9d0e7f2b79e59da38d7ae9ce85a8a4ba8 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Fri, 10 Feb 2023 16:20:55 +0100 Subject: [PATCH 04/41] chore: remove duplicate upload-reset.c source file Signed-off-by: Frederic Pillon --- linux/src/upload-reset/upload-reset.c | 161 ------------------------- macosx/src/upload-reset/upload-reset.c | 161 ------------------------- 2 files changed, 322 deletions(-) delete mode 100644 linux/src/upload-reset/upload-reset.c delete mode 100644 macosx/src/upload-reset/upload-reset.c diff --git a/linux/src/upload-reset/upload-reset.c b/linux/src/upload-reset/upload-reset.c deleted file mode 100644 index 1d03bff51..000000000 --- a/linux/src/upload-reset/upload-reset.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (C) 2015 Roger Clark - * - * 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 2 of the License, or - * (at your option) any later version. - * - * - * Utility to send the reset sequence on RTS and DTR and chars - * which resets the libmaple and causes the bootloader to be run - * - * - * - * Terminal control code by Heiko Noordhof (see copyright below) - */ - - - -/* Copyright (C) 2003 Heiko Noordhof - * - * 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 2 of the License, or - * (at your option) any later version. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* Function prototypes (belong in a seperate header file) */ -int openserial(char *devicename); -void closeserial(void); -int setDTR(unsigned short level); -int setRTS(unsigned short level); - - -/* Two globals for use by this module only */ -static int fd; -static struct termios oldterminfo; - - -void closeserial(void) -{ - tcsetattr(fd, TCSANOW, &oldterminfo); - close(fd); -} - - -int openserial(char *devicename) -{ - struct termios attr; - - if ((fd = open(devicename, O_RDWR)) == -1) return 0; /* Error */ - atexit(closeserial); - - if (tcgetattr(fd, &oldterminfo) == -1) return 0; /* Error */ - attr = oldterminfo; - attr.c_cflag |= CRTSCTS | CLOCAL; - attr.c_oflag = 0; - if (tcflush(fd, TCIOFLUSH) == -1) return 0; /* Error */ - if (tcsetattr(fd, TCSANOW, &attr) == -1) return 0; /* Error */ - - /* Set the lines to a known state, and */ - /* finally return non-zero is successful. */ - return setRTS(0) && setDTR(0); -} - - -/* For the two functions below: - * level=0 to set line to LOW - * level=1 to set line to HIGH - */ - -int setRTS(unsigned short level) -{ - int status; - - if (ioctl(fd, TIOCMGET, &status) == -1) { - perror("setRTS(): TIOCMGET"); - return 0; - } - if (level) status |= TIOCM_RTS; - else status &= ~TIOCM_RTS; - if (ioctl(fd, TIOCMSET, &status) == -1) { - perror("setRTS(): TIOCMSET"); - return 0; - } - return 1; -} - - -int setDTR(unsigned short level) -{ - int status; - - if (ioctl(fd, TIOCMGET, &status) == -1) { - perror("setDTR(): TIOCMGET"); - return 0; - } - if (level) status |= TIOCM_DTR; - else status &= ~TIOCM_DTR; - if (ioctl(fd, TIOCMSET, &status) == -1) { - perror("setDTR: TIOCMSET"); - return 0; - } - return 1; -} - -/* This portion of code was written by Roger Clark - * It was informed by various other pieces of code written by Leaflabs to reset their - * Maple and Maple mini boards - */ - -main(int argc, char *argv[]) -{ - - if (argc<2 || argc >3) - { - printf("Usage upload-reset \n\r"); - return; - } - - if (openserial(argv[1])) - { - // Send magic sequence of DTR and RTS followed by the magic word "1EAF" - setRTS(false); - setDTR(false); - setDTR(true); - - usleep(50000L); - - setDTR(false); - setRTS(true); - setDTR(true); - - usleep(50000L); - - setDTR(false); - - usleep(50000L); - - write(fd,"1EAF",4); - - closeserial(); - if (argc==3) - { - usleep(atol(argv[2])*1000L); - } - } - else - { - printf("Failed to open serial device.\n\r"); - } -} diff --git a/macosx/src/upload-reset/upload-reset.c b/macosx/src/upload-reset/upload-reset.c deleted file mode 100644 index 1d03bff51..000000000 --- a/macosx/src/upload-reset/upload-reset.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (C) 2015 Roger Clark - * - * 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 2 of the License, or - * (at your option) any later version. - * - * - * Utility to send the reset sequence on RTS and DTR and chars - * which resets the libmaple and causes the bootloader to be run - * - * - * - * Terminal control code by Heiko Noordhof (see copyright below) - */ - - - -/* Copyright (C) 2003 Heiko Noordhof - * - * 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 2 of the License, or - * (at your option) any later version. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* Function prototypes (belong in a seperate header file) */ -int openserial(char *devicename); -void closeserial(void); -int setDTR(unsigned short level); -int setRTS(unsigned short level); - - -/* Two globals for use by this module only */ -static int fd; -static struct termios oldterminfo; - - -void closeserial(void) -{ - tcsetattr(fd, TCSANOW, &oldterminfo); - close(fd); -} - - -int openserial(char *devicename) -{ - struct termios attr; - - if ((fd = open(devicename, O_RDWR)) == -1) return 0; /* Error */ - atexit(closeserial); - - if (tcgetattr(fd, &oldterminfo) == -1) return 0; /* Error */ - attr = oldterminfo; - attr.c_cflag |= CRTSCTS | CLOCAL; - attr.c_oflag = 0; - if (tcflush(fd, TCIOFLUSH) == -1) return 0; /* Error */ - if (tcsetattr(fd, TCSANOW, &attr) == -1) return 0; /* Error */ - - /* Set the lines to a known state, and */ - /* finally return non-zero is successful. */ - return setRTS(0) && setDTR(0); -} - - -/* For the two functions below: - * level=0 to set line to LOW - * level=1 to set line to HIGH - */ - -int setRTS(unsigned short level) -{ - int status; - - if (ioctl(fd, TIOCMGET, &status) == -1) { - perror("setRTS(): TIOCMGET"); - return 0; - } - if (level) status |= TIOCM_RTS; - else status &= ~TIOCM_RTS; - if (ioctl(fd, TIOCMSET, &status) == -1) { - perror("setRTS(): TIOCMSET"); - return 0; - } - return 1; -} - - -int setDTR(unsigned short level) -{ - int status; - - if (ioctl(fd, TIOCMGET, &status) == -1) { - perror("setDTR(): TIOCMGET"); - return 0; - } - if (level) status |= TIOCM_DTR; - else status &= ~TIOCM_DTR; - if (ioctl(fd, TIOCMSET, &status) == -1) { - perror("setDTR: TIOCMSET"); - return 0; - } - return 1; -} - -/* This portion of code was written by Roger Clark - * It was informed by various other pieces of code written by Leaflabs to reset their - * Maple and Maple mini boards - */ - -main(int argc, char *argv[]) -{ - - if (argc<2 || argc >3) - { - printf("Usage upload-reset \n\r"); - return; - } - - if (openserial(argv[1])) - { - // Send magic sequence of DTR and RTS followed by the magic word "1EAF" - setRTS(false); - setDTR(false); - setDTR(true); - - usleep(50000L); - - setDTR(false); - setRTS(true); - setDTR(true); - - usleep(50000L); - - setDTR(false); - - usleep(50000L); - - write(fd,"1EAF",4); - - closeserial(); - if (argc==3) - { - usleep(atol(argv[2])*1000L); - } - } - else - { - printf("Failed to open serial device.\n\r"); - } -} From 52dd8582dbd75ddc9af24d4bc3e9418d38f31486 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Fri, 10 Feb 2023 16:21:45 +0100 Subject: [PATCH 05/41] chore: remove deprecated maple_loader source files Signed-off-by: Frederic Pillon --- src/maple_loader/README.md | 5 - src/maple_loader/build.xml | 73 - src/maple_loader/build/built-jar.properties | 4 - .../build/classes/CliTemplate/CliMain.class | Bin 1753 -> 0 bytes .../classes/CliTemplate/DFUUploader.class | Bin 7476 -> 0 bytes .../classes/CliTemplate/ExecCommand.class | Bin 3243 -> 0 bytes .../build/classes/processing/app/Base.class | Bin 639 -> 0 bytes .../classes/processing/app/Preferences.class | Bin 2215 -> 0 bytes .../build/classes/processing/app/Serial.class | Bin 7732 -> 0 bytes .../processing/app/SerialException.class | Bin 735 -> 0 bytes .../app/debug/MessageConsumer.class | Bin 174 -> 0 bytes .../processing/app/debug/MessageSiphon.class | Bin 2325 -> 0 bytes .../app/debug/RunnerException.class | Bin 2509 -> 0 bytes .../processing/app/helpers/ProcessUtils.class | Bin 1399 -> 0 bytes src/maple_loader/dist/README.TXT | 32 - src/maple_loader/dist/lib/jssc.jar | Bin 152418 -> 0 bytes src/maple_loader/dist/maple_loader.jar | Bin 32791 -> 0 bytes src/maple_loader/jars/jssc.jar | Bin 152418 -> 0 bytes src/maple_loader/manifest.mf | 3 - src/maple_loader/nbproject/build-impl.xml | 1413 ----------------- .../nbproject/genfiles.properties | 8 - .../nbproject/private/config.properties | 0 .../nbproject/private/private.properties | 6 - .../nbproject/private/private.xml | 10 - src/maple_loader/nbproject/project.properties | 79 - src/maple_loader/nbproject/project.xml | 15 - src/maple_loader/src/CliTemplate/CliMain.java | 60 - .../src/CliTemplate/DFUUploader.java | 345 ---- .../src/CliTemplate/ExecCommand.java | 119 -- src/maple_loader/src/processing/app/Base.java | 53 - .../src/processing/app/Preferences.java | 157 -- .../src/processing/app/Serial.java | 527 ------ .../src/processing/app/SerialException.java | 39 - .../processing/app/debug/MessageConsumer.java | 42 - .../processing/app/debug/MessageSiphon.java | 104 -- .../processing/app/debug/RunnerException.java | 161 -- .../processing/app/helpers/ProcessUtils.java | 32 - 37 files changed, 3287 deletions(-) delete mode 100644 src/maple_loader/README.md delete mode 100644 src/maple_loader/build.xml delete mode 100644 src/maple_loader/build/built-jar.properties delete mode 100644 src/maple_loader/build/classes/CliTemplate/CliMain.class delete mode 100644 src/maple_loader/build/classes/CliTemplate/DFUUploader.class delete mode 100644 src/maple_loader/build/classes/CliTemplate/ExecCommand.class delete mode 100644 src/maple_loader/build/classes/processing/app/Base.class delete mode 100644 src/maple_loader/build/classes/processing/app/Preferences.class delete mode 100644 src/maple_loader/build/classes/processing/app/Serial.class delete mode 100644 src/maple_loader/build/classes/processing/app/SerialException.class delete mode 100644 src/maple_loader/build/classes/processing/app/debug/MessageConsumer.class delete mode 100644 src/maple_loader/build/classes/processing/app/debug/MessageSiphon.class delete mode 100644 src/maple_loader/build/classes/processing/app/debug/RunnerException.class delete mode 100644 src/maple_loader/build/classes/processing/app/helpers/ProcessUtils.class delete mode 100644 src/maple_loader/dist/README.TXT delete mode 100644 src/maple_loader/dist/lib/jssc.jar delete mode 100644 src/maple_loader/dist/maple_loader.jar delete mode 100644 src/maple_loader/jars/jssc.jar delete mode 100644 src/maple_loader/manifest.mf delete mode 100644 src/maple_loader/nbproject/build-impl.xml delete mode 100644 src/maple_loader/nbproject/genfiles.properties delete mode 100644 src/maple_loader/nbproject/private/config.properties delete mode 100644 src/maple_loader/nbproject/private/private.properties delete mode 100644 src/maple_loader/nbproject/private/private.xml delete mode 100644 src/maple_loader/nbproject/project.properties delete mode 100644 src/maple_loader/nbproject/project.xml delete mode 100644 src/maple_loader/src/CliTemplate/CliMain.java delete mode 100644 src/maple_loader/src/CliTemplate/DFUUploader.java delete mode 100644 src/maple_loader/src/CliTemplate/ExecCommand.java delete mode 100644 src/maple_loader/src/processing/app/Base.java delete mode 100644 src/maple_loader/src/processing/app/Preferences.java delete mode 100644 src/maple_loader/src/processing/app/Serial.java delete mode 100644 src/maple_loader/src/processing/app/SerialException.java delete mode 100644 src/maple_loader/src/processing/app/debug/MessageConsumer.java delete mode 100644 src/maple_loader/src/processing/app/debug/MessageSiphon.java delete mode 100644 src/maple_loader/src/processing/app/debug/RunnerException.java delete mode 100644 src/maple_loader/src/processing/app/helpers/ProcessUtils.java diff --git a/src/maple_loader/README.md b/src/maple_loader/README.md deleted file mode 100644 index c6c937950..000000000 --- a/src/maple_loader/README.md +++ /dev/null @@ -1,5 +0,0 @@ -These files build the maple_loader.jar file used on Windows to reset the Sketch via USB Serial, so that the bootloader will run in dfu upload mode, ready for a new sketch to be uploaded - -The files were written by @bobC (github) and have been slightly modified by me (Roger Clark), so that dfu-util no longer attempts to reset the board after upload. -This change to dfu-util's reset command line argument, was required because dfu-util was showing errors on some Windows systems, because the bootloader had reset its self after upload, -before dfu-util had chance to tell it to reset. \ No newline at end of file diff --git a/src/maple_loader/build.xml b/src/maple_loader/build.xml deleted file mode 100644 index 80bdd6fdb..000000000 --- a/src/maple_loader/build.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - Builds, tests, and runs the project maple_loader. - - - diff --git a/src/maple_loader/build/built-jar.properties b/src/maple_loader/build/built-jar.properties deleted file mode 100644 index 10752d534..000000000 --- a/src/maple_loader/build/built-jar.properties +++ /dev/null @@ -1,4 +0,0 @@ -#Mon, 20 Jul 2015 11:21:26 +1000 - - -C\:\\Users\\rclark\\Desktop\\maple-asp-master\\installer\\maple_loader= diff --git a/src/maple_loader/build/classes/CliTemplate/CliMain.class b/src/maple_loader/build/classes/CliTemplate/CliMain.class deleted file mode 100644 index 37ee63000b20df7528829288b7f0fbeb28eb3b98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1753 zcmZ`(?^7F96g^8e*(Ke!Bot_BEkSJ?Qc5V;R-jfb6dMgcG>{5a@g;erOE=l=X2Z~N zI-?()v44qQZ9mYCj{X7uQR;cgB4LP`%)9&UJMY|k&%L{U{r%gY0A}FDk-}_0<}h#K zP8=WNu8EK0_!ysNj62~BB)v{_}O_60{U^nDSt6rA=x+pvJBnxgu zI3?lRY9BiF;IZA*FjQD@>~&f991+MIpO=N*m?v4CR>N@SQDIl?iJT)EwOldq?M7{0 z1=Gko)OB=!zaqWBcH4J_UnBKkkE}dUI6;1gw$&`>7YQ%hjU`)E zajLr0+VC7#RHd&Wbu912rH#WQ=6<>uh{}^?;k8ROkTtMLX(_0Nc+qY771^P*!g?oF zA{H)T)WDX7NBCMpqAol~Zg=9P_ogOq82HA*x7cPXO-U`CNso0H_|AernPCsT6gqfD ziB{N*&{q|KDBD5PLIqWlAG&3^RonI{{SmYoxSoP)usq+b`J%ok9YH>;)vkUrROWE2 z1fx)i@Km${ciWdu8CZ~@l4rt$J?WR-CIgLhcf3nE3pG4u+m5>OUsEmEN|O=MNK4;$ z{j^)Dw0vJy$I{IU`M8_2<0+8CF&@gCoHaGY7pQPWHk+L4obWud${p#; z27L@k4K-ZtakV#DocMerkTo@*!#%F$RY--p=emv*?bquh)s{kq%`Mr24f>z_x0oWk zLCTs8mRW_UvAgFo<0m=Ux^{yCxgX?0=#uN#1q+Prgb%YlQtp0*JB^+1Ngr)XjWN8< zkD&VXK~wJ&*EDxIT8%cEeGTnp`*@6NtnD1eJAAe}0KAL$xa-GdT%jioXby1(eJ`?+ z=|WbYUd~3RSF*9`IsFy-l92=G$>_B=h$W4rsZ9R>O+0xjarp;jEnTgr6Z)^pp1H0d zXD8G;z>`EW8R7an1~*^h+*~vjP3Z?1diV=2&c$9~Bza!{1F6kODt3Si#W#5C02f~} zu__!6^)Mo=87N_h>m}%{*ksZcy$P0*Vi}_>IX diff --git a/src/maple_loader/build/classes/CliTemplate/DFUUploader.class b/src/maple_loader/build/classes/CliTemplate/DFUUploader.class deleted file mode 100644 index 77087b052fbd03f77b9e1417f2754196beaf1844..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7476 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 diff --git a/src/maple_loader/build/classes/CliTemplate/ExecCommand.class b/src/maple_loader/build/classes/CliTemplate/ExecCommand.class deleted file mode 100644 index ad95f79845d3d1b0c1d2245d06800c06c37e8c08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3243 zcma)8TW}NS75;u{rC%0{F$RGJfhdV%e8DI8>iD5`@f$5 zobR0TowIuL-k)v*cpTT`Xu((=I*^sf#Sz9>9Ca|&Fun>Cm{fx$aYoHgOYE&f9t8WB885cO{+|kW;2R=9EkUaYA6t zxaF3-gRbkihn%vV6KE)zS;x-R9@UxCS+nR_jxEqKP;{NFSt?ofMA|48(>ZgjJdr+9 zwr$frxFEMnAiCSKEw5J~+}d_bK6Ts5zpt3hVZm@qR|ani9V8zv@!I)W%#c?OJOT$+=a;zC}UmqFTH zV?2m#49>}jGqW>Tz-F`Y~^#NtK+Bm8Ih%QT*6BdKiBapPV4xEf|14!9gks$#A`a{ z@XG~EOL@W!{XfN|<5vp$<4XIl@r1y`E52HiR*4sN{06^O&o1luom%}~A^U^!dF!H2 zD^XI%PIT$`gmS;(++*icuIZIs+sviT?L5CEVnbtR%&aGIMaNbAQQ~zS*HBSGI4w|b zPFr3o%ewDLQ42%)KGpnwaR@x>bL>*NV3MQti;1n4$l66m0`9Y3S?L9V^{s99bBPti zYM$^W{kFu44jVbv=n~phecIK=?x>ZlXGk{bIX;gBT9@>f1N} z$}HW*mNCrshI|tYLYF9FnPqJE{mK z6v5<_kuRG=8sTcI_HMSA5xSb;dhj19djx zgIwuVNxpfKJAoeTq6D>sPebyj48*Bh2#;QeHrR2v^LDou?v5lP3GEWLbtWQRJ<(*e zf=G3W&O+awjNXI{;rNA!n4AB{_U$(j6Lz106kD zQoG$933o>m(M04D+LKx$+SMbkLcfL8v|OK*6|8A&;84NZ3K}m&srv7{uV7t!_!`!$ zA<=OI8+x=kZ0?ENLepq6QbF=MHdUc*PDbzC!ULm8t%5BK%T^^+-9G4VqguC2$XRSv z?^4RCl#+d@H{31f=Ks|bo16b95kK-*#ME?Wi}orWyo%<=MqhnX3br`OQNu>~<~ z!&bE7QSLj@&bw{cO->APH$n~^B_ocrNuMSU&XNPqbG}F>yu$2WVpiuUeHr^{VGsLq zFEg+gf5ATd4SjeEAI97GDBeLo-o?l9Zw%lr25}EVLSR_bVN^8Wgh=3&*u*y84MX%` zOk|K1Pa!8xV%+D@n^;ebO|-NJQ8KKHcJ`8!^~AT2wl%CJmk)3iA;wL#yocN}=!=rm zsAZ=w7lFkWN-j#AF{10@>MGfK5Qh*EQAXq=#2X`m>TOK%GvKaT^-~|apcui&=nq*a zBJ^oLv0UaiZxDxR?JYdV=nWIg+nC~)ZJ0LRK?z4_TOvanswS#BMyTT`PmW;CJe`P2 z9FtfjahxMVgyy@5G|gijx0-$0j#Q*>R diff --git a/src/maple_loader/build/classes/processing/app/Base.class b/src/maple_loader/build/classes/processing/app/Base.class deleted file mode 100644 index 4aa0bde02049fbb6c4e035d952edc3f002cba1e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmaKp%TB^T6o&tSLZKAVg7^Ck!G)N(aDg#K6B84>Bp6NH4Q13pXq&cpc^a2)+_+KW z!Uyo7jHgH%(vSU{TL#iY#anNj3gnP^@bs|Q|HhKMoyE2H|Q1LIN$1qrOT-y|$C#{PD zcbvjD_e7B)F1=G}RqY$fA^jOcvg~v7YM(o8fhs+!)VyWT%68K=#jXsB#RI`gjbC#e zacB&x?X6h6Aymxhn8h5Cwpqozjs+|-MB1iwk7gM916!fasl&rcO_+WcD&Kj&XfPx$ zgn#7Pj&S`uhHS3%^Q!E-G+r_P8+DsnY1AJLE^ZIc>Fe~e?9mh|{hDBfK@&rxJwZ`{ zPDW>B`33BWE+Oc&M_X_PNxJLb3Ft$LqB#07KqPp)PT9fA7@=2$4doe;&^=V;0ZRCh ec&BR#29XFt##T^2{g)*ApJcUD!jNgz82kc&eSc^G diff --git a/src/maple_loader/build/classes/processing/app/Preferences.class b/src/maple_loader/build/classes/processing/app/Preferences.class deleted file mode 100644 index 89cf0100455af1f41500150e545c8bbd12583674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2215 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 L#S!xqDulu}Wzd50 diff --git a/src/maple_loader/build/classes/processing/app/debug/MessageConsumer.class b/src/maple_loader/build/classes/processing/app/debug/MessageConsumer.class deleted file mode 100644 index 37250e7704487822639cf03f4e4a333da994be50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174 zcmX^0Z`VEs1_omWPId-%b_Nbc2KL<4;^M^gR7M6-4WF#UvPAuy#JqI<;F6-uymV{L zFh&Nh;QZ2}36TD<=a zee$u-T}#4J*3vf~eDmkHmbdTB3`x3-T|Q)=efH(-y}z^fnf&_KPd@_~$Jc3`K|#YE z4ezEAM=^~U<~s2b<`r2`3FpOF@DY|1aeE`vQp>rz{0}ik26Y+<5P_3@WA4aH*G_Nr)yS)eXYYsjn$=fJOWF4tYZhC37l!#w}YMI5E!%pT%fP% z+dxal=PHf9X`?)_MwAB1vTAyk>pLES*6{_t)bW){_Z9doX zp*cQw*xW5Rg|$DEB4^Hd92&M1T~J--)m&ee8#S=#_5-Loy058<-UTH+9!Y~sI?QMy zn1HJE?|PQwSw7)TWD82zQS}XvWu(;85YEQY?D>`vXiP_vZ;Q0~d|YUa5UKy|5#2V& zD&;$eAPhYZ*KvUzx$BPrxE*8^HuS-Abd74{xS?(;X{fBvh&yULy=i|kxTlNf7 z;w+!=GZ1(g31n24^DB^1jm|Zu+BsO+^IQ|O%i=s~j=OJ>nhpw19x}OH;50efeMVe!jVSW-ua2gkw zO`dcdm+%Iz;Y~`x9D}Hok8;QOw0WI5DNf}bBYzQNVV2?>S|_O6VZ79L80C_z<4CD^ zfI;%wK6*-f=pC-(g-nK|j=mppG=?XC|CSTX_X(zo5p(&F87o^tr z9?2)rD19-q?V1mm3%@)Ksv5%;9Ag$^m_dKA7Fna(JET`I5v((~5v)b52P@x^V2u+I z;12HvxQ;$d({BZrQKIK8eOE9=eg?Pczk&k!BCY2zk3}rN#66z3f(qph*T;Ae;5fm_32#8&VW5Z_DWZjif-x5zCr=eMcl9{`-9>GD2Q?oaJ}>;w=qVZ)>>5-{ha@ zC)IHMcf={5(&)lhg-58CS>Z0m^@zIs;_yKL*=f}RVTnhAt9^(L80hAo19jc~p+^+7 zg8`@6lwrath(FM+v2>NRYR{Ye%`#rtqAGQjaxxcZ8#Y@_{ZRoV0mQotV5n6@E2k~%3N36at+NEB6-iZpQsd%&@c zA5A4Tuz*j%h6Rru8x|m8Sz^Hl;6tJQ&z#FqWkoT zMK-PSux61%52o=};bEPJ4IUoy@DZt?IbKWPfebnC6t{hn9-@}T2Yu_~Sl zGS`A;(5nc_7S3xI4+ZI)kPtM>f{*(rM}FtPJ8DRlR@G}9dYyph>Z9JP2VFsL?zKCu zDyTtN_S)_8v47OBl|St_n|^2OMb&Tjf>smk3khDIvfC>O3%k1#=<|Tx>kS#<)kHgK zXjWC=*OG0dpELW%Wb8=5OE#92@hTEq^Lvj*RhcgoV`foZtZvN4!3NHxs#B^^M5P>9 z#6Ic;$!!E-EuFg8jjdt}>NO(^_{eLkgxg9tthcQM)l3P5vl+EEYKIxMb2NuOg3i=~ zV?W*`vu(6lFaE{aZ}mG>e_NJeexjyJ+@KC+DaXSt9#$Nhp^QVbbjhJtc(}~N9L@9U zjzjO$ilE#7r(*=ojSoOn4?$!Z7 z;WTsKk=&3Rg9MWTqKiRx`z2eXhyHnb=qBD$(nntT@ZiJ1n(dZyi&;I%$qF{UC!H*ZrjZjn!nbMU#8yrqi8@^Z z7ANbLa`yv3Ot{OtLrS@&0qJgTK!&?GAk)q21C%6d3}|Yc!W&3B(JFM-5bOg~yMk1$ zgJ%Pt9!joCs2OqPBd&bJm5;dciVGAn>4qeHT@mhpkduXk3~Aa0QVb>|>$in8Y$GW< z(s|e;cI4cq+w=y+aADG0O0+EJXju0z(*J;Z*ls316FrtPj(j(ijG#i)trbON%6yG8 z6E^EUU=Cs+W&~nJ&00h|hn*h>F@B!_d6EcHqPNxNG01h)Y!c)dKt8(wXIWW>;Zp|t)R=_w{k$&(nS<|sy#QGvY!8-p}wg9Yy*v>)mJ{n9+<-P@KEO7OK70uz15(}q diff --git a/src/maple_loader/build/classes/processing/app/helpers/ProcessUtils.class b/src/maple_loader/build/classes/processing/app/helpers/ProcessUtils.class deleted file mode 100644 index 27eca62622c61bc21ae557714ca4fa2d4c1eb22b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1399 zcmah}Sy$6Q7`@XLQbO2@A}XTd)|Mr1C|W=TH?$PBD#zs|q@zUJBqpiLyT8ImUwqXU z+>ZPJe~HJR;5jZgC15~3=A6vTcjucs_gj+BKRzr2ID)Gxx-g_-7$Yil91Mp;3J#}n zB#omgnlP&1n2Hu04~MZdPNZ?N6$Olk_Jo2-1*Zg>$1U3mCIyn&+)aVhv{R7+9YxEQ zrFv~ade@DGDv?alF^%d?!?Qv=0#m`F^CTYS6zNcsy3f#h~aIPY8?ejDTV~wVGj91iJrnHr%gOLdgON zcR^s=pJY>Yt6GsBIg`?U97foXP^UC~)^LgUtdH=SyBg)_de`w7c_jW%WRiq!<-jl> zlDv^E1^oi*xu>Rd1Iw{}1*d73ow{er^H!MRu6VjeLU|f8=vHt>!xW|!oYim+=QV7_ zHi6EKDP*Pw82{Y?4Hs}xp!c^!L>%QHWS!A)371*^>01}(XG)~Aor>e%qmUrTHOw;8oku}GFUSD$z#b&AmmXn=E66?~`-!w6+5R1hf&=0k Rugelj(J99_&vgQWzW|+SRY?E< diff --git a/src/maple_loader/dist/README.TXT b/src/maple_loader/dist/README.TXT deleted file mode 100644 index 255b89c68..000000000 --- a/src/maple_loader/dist/README.TXT +++ /dev/null @@ -1,32 +0,0 @@ -======================== -BUILD OUTPUT DESCRIPTION -======================== - -When you build an Java application project that has a main class, the IDE -automatically copies all of the JAR -files on the projects classpath to your projects dist/lib folder. The IDE -also adds each of the JAR files to the Class-Path element in the application -JAR files manifest file (MANIFEST.MF). - -To run the project from the command line, go to the dist folder and -type the following: - -java -jar "maple_loader.jar" - -To distribute this project, zip up the dist folder (including the lib folder) -and distribute the ZIP file. - -Notes: - -* If two JAR files on the project classpath have the same name, only the first -JAR file is copied to the lib folder. -* Only JAR files are copied to the lib folder. -If the classpath contains other types of files or folders, these files (folders) -are not copied. -* If a library on the projects classpath also has a Class-Path element -specified in the manifest,the content of the Class-Path element has to be on -the projects runtime path. -* To set a main class in a standard Java project, right-click the project node -in the Projects window and choose Properties. Then click Run and enter the -class name in the Main Class field. Alternatively, you can manually type the -class name in the manifest Main-Class element. diff --git a/src/maple_loader/dist/lib/jssc.jar b/src/maple_loader/dist/lib/jssc.jar deleted file mode 100644 index eb74f154a01c8c16712233cca36b65120ea47986..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152418 zcmaHT18`>1wq`oEZQHhO+v+&^W81cEcWiZRCmkDql8&7Yrr*2s-prl*=APQCPSvTe z*50d5t#uZUvK$yVEC>iR2#6Qprzpt(b-{pugD6O-i!jJ2N-}*;f`BOhZzwc~=U=D= z6|qmkUwHXnLjOzu4OI|Pl#!HBQ)g6=RETbb9b`rpeir`Rmn1;dohRM40XRh>Mt4kb z@Z1tBlx2{9_*_u-ob{eE-=>h~;KdD!RTs5{X)3(2&ES2+7z5UiV$*0k${Xaj_ z7zlIf&Z1#8GiZX$gb-Qf$_@82dkk#dxGvW_ht70E#1zZps6mP1QFuY&gFyFEBM8}i zVgca}CI{Fpi|26vCBVPR3h`F}8y6QdrhgByvo>}4HxRhLT>cYcXYJtT`EP)T{{^%+ zF*9;>G5U8{g#W_2INF&wTmQTL{~PLI?O^Wc@qeJu|M_xxN7J#=;Xy#AFhM|w|8o6L zfz>RWtxfC{O`Yu-;>tkLc->o`%yiy`Kwb4EM5Z?u=4_n#Qwi)*!hNJOA>AF5 z^zr{LmCAkK#-!x*07E4(VZnb) zN+rOsz=kS7x8Q;*a9xfCl!!7+23kZJCIKCDFEyeJQ-E$pjeb(GSF=HGfEtao1dB`8QX;ou32_^v}k(* zU-871Evj>?CBAdJB^^U%dT1YA-*f~u2R1Z6Q9Ek5{HH9XTx}|mLdF_A;`gqJiOCn% z7$!sPSxc8u9!1WKB))n#x5};}3bfdx)yql6GR}H(Z(A~J1G$HKQ}!~JEapX7((R&Q zHrf)?EoiH#Qo@Oc2dj_bGUP;q3q4aFieR4W7sYNRyS&@m<6DRHsOxSiQJWdH-63>ti<13Ucz}+CW-p;h8Eh{haYarYos9yx)`)*D^ul`hm&S~3;39}i zd)c~3P_09Yt-6Jl*LuntHB9fZ6@(tv0%RNN1nC=JrE&xDp&e7#R6MtA7>de%u{LR{ zyE8X&PB3Qn4tM?k5Mc44dPGq89E4#)W@)R>{SK!2+v^j9aYTJvCnDAGY zw&qm}C22kqQk0WwQe-bwyS0)ZZddQ{SK?TAlpKr~YC42P9D0p%Qfx<90d06osGLPC z_naOg&BV7-3n^^%TDY~;?5e*dtEr-Msi>vu5y)T2(jyQ`(oxNS=}>P;M(|=QSiX?K z&gMXw+0e%MhLN~4TS@E3MDw?tRWHWL8H~$0v{~qdj8_&eCSdWH9K6Ki#a!r;Y7i45 zJ-C3T6v%yL^r zSe99yK;Mc+(&ek7+DZ{iEEV_G>(cOy6N}0>(GAX|2GKR_ZVq=>>-?{jwP;J8t54kc z6u}uVm2i2o>r6w&5umMhswfvFg<0G|t_9Ff?L5nUgcqD$UtnA8H-+8yoI3BH`;1&3V5yY%l%%8RHKsupZ8S3KI+Bt6cmWmohh8K{f;wIz=TRM|35=ojU^6`aj zWiKW?h1HX{_+S=lF+WA~K_GubP1>VDlxTAc6yYYdB+p_GrbJyqX2wa$)tKGtf5W!Cjx}k7{WtOMxxt9G=W9U3Ma>G}oT=MFPtPwrQECYr_(;jc~C)8Q4-yJ;w6PU?cTHW%tEueYR` zL`CjuaG{LL25%aeNcUR1wd<7G&yUdS9J753or>w4vW*24V7X{;=r%$2U9Y+#@df=c z&Mq9C5v`MfDcDRB%@U#FTNpZDlNmU~k3h-cz-|xj1I+`|E#~71oNkn2jY5tdu_iwR zz7$G-qtGObPBqKr%|`bNeCDb$ijqi?O!eTge~sovJm+peyj!V%@c5NCK$Iwq?kW~_ z$f#JHYo+nv&n{LnHl(@8?5GtLTkUG?NBn~ASZoZu_$FtRkW%;5zyVKlHB;v4<>u#Q z4@+ZU3sR#2rGcb3rYQNG#a#w)2{yFJ=h5kn;AoJ{S5)w|wiG8^6&)gUhkdq`>0ZRE zbG(t_)7>bJ-kJJP8)}BvbR1)^lf*6|Y|D?BQCSiI@At_x;%>3@5k&(+wk?Q#pV#7l z(CEvRGJ0;%%y0gtiHL9rgLb|VuL^c{^DP0F7W>?58viI|dI^!Gh8Y%t1vJr1B733q zOgV8m!l@F+a-Sy^{f(-zLZYfMqlGqIGqzxv+Vcw&+!pc`7V2&Y_K009gC zIg4=G2v-d?N5PLGg2;udAYJ8P)C9n6M$?D0^`g15G-|2fyIh)5H}OrwQN5#46+T5| z0kuP*;>O*qpje7nOJR>JdMcCCA9HkT!Bfo1h3GU1Cj$N+AE#|onMit7;_I~Tkj!)g zMcf6J05!ZRdSZ~X#&i&juxRnNWUFCcJt~8P2moDf$^Km7X%+n^P5nx5=v_29v6u&m z*Np=Mi=fw9HACTiGHUPwxEu5o^?l>Ts<`ARI}jdpSVSo>}!$al{pJJFd?I@^1cysbm48~kN~go&-5T1KNo`?TKs^s&rQ7kZWC zyC|4Fd7bfsZ`iFhx!5wxTXF17d&}FC>=w=@cXt)?!;3(N_Hm<`eY?$_i{Y+QK3Jh= zWn_PPrhDSb1&**WryYvPMtIL-5q`}V#ShF0%P*!Ll>K8tqPanE;;ShTD5#)zhST$; zQ(bauh0za>hZvdXe~wQrZVoS^!{A9Z(!v~#48w@ zj${=oh|(uOu;}qEUkPgksNS+QvA~+Bl_sL z+h9%SW;Zf2QDeLh9;NB$ryMZHm8Y0qYzU)a=-c{kIi1THtCloz)3%6(&+snTsBI_>+mJNBVEbG-ZjP#_n8iTxu#5b(4gE5#Q6-GJ^BA3$KhwC4fr2K7(q zW7x8Q6Ah4iqXRg7uU`yecAs@ud6E9@qrBf4d&v?q~D(qH@g$T;F;%^hc~n zIN=L^MCbs((iY7)Q>9I~NLo7x=SOf*&yAfoPe=ibGp2Z)ZfI{dlp%F^y)(&wAn*X) zUUKh1{pmF(#>~&wOtMLt;I&B{xj57(#w@H+s5HRsg4OjXv`#uOp?(Lmx64X?Bj5}6 zPOllx(yK@0cG6_{l?k=tT*vJ+As5npR&V2_lke{v--rKTTXT#C?j7b!S`Fo@Df;!OSG_+2*H^;1WbROcgUjuW z|BrPL*5fw6Xfsc3ie7`02~+`Bm=4b=O)=$t+_!RcF9S<4=#xl8Dyj{yZta5IWAD+? zcLAXro0Qcq^Hk0j#w0GwDvV1+Jf6fdbuuW4Y&pLRpV$*6K6#6w!f$2dNud?#|ho@4HQmC~1?t?R$b#hqln<(| zar{B}{~OEn|0S${j%kz~ zon6UU{t?O;$cy|(Aey^k(}GzmbhEd<$Q2n3r2>RA)whw8Caw~k4MDn5Ilx2;?*0wm zJUxB!;R#BeL_-~xnyC4S34e_{73wuowD5E!*6#3VF!lW+_OTK07}Q z^v|M%AW`((gMxs-L4tsg{12i?xLY{5s#`f*n3(_X_)J|-2~7q0bM|STVailb7?~!z zRM@%|i*cs|+PTg;wKOe~pTPo5Zjy7|AhPcdo$t+0EW_9Z@!*V5s)BcwgIs&L#?3-& zUYFTvF1Fp=tfybs*A*bF<87i6sw7FMqzv^q5SQ3$%<(WJloneUZ~4I>SMB@X2q!a> zS!R%(-5Crv8G);PCN}YXGXsXKFL?$-@#Q#!odTPT<#$~cR%NYC$MQ)o8_Wpb(~Ia% zZsY6OZo=-`W|60H%0C~B1LWFaH#DQ@2|Ars=;~}k%Y9bHC1}Fi%EY!^VHxotIc&4L zT9p^=^r*fEnB@T>*jes$peQFYD`(-~EOF2cgijdcd=%B`ELa#!e*)hpXMA{O5>&Q%4wO}be z8%5;@u)(wrB*n#Gd92zYwb4?UYAgw3>}}z+4k#FK+UP(EoGDt(hRJyk7y?}a z6*i5<={)rr^rs$}M!SZU96~e&53Y3*4{eU+P+^PgLR<#M&Ri2d-n!W^o!A&~F$J_- zu0#*|p{=6A{LEk3Gtnv%jC4|eY`Y16P0nA?obpELw=lgJ`c$@DDRF;O1ruT1} z-?Ad<267&f1{(7N;0c99BOJPF(50Oo_IQUipGi~|9#L3* zOW|&rj2&-d(Z65=X1UO0a{I1mwnTY2Ky7{3ZOlv);+j;@UgEz`w9QREAbyMa(7%uLkg2F7G^*tB&>9~v_S>AM z%^}w+tVy+L4|06`CU2q0fB@D;f1Z6PlEU?G`|ZV_mQXppE+=(hs%MrFBZ#)M3ricD zEBzst7=x=KF3woy6GjH#g^5SgaB#$VymdCCK){)l}J~ zCdB_RL#>P5r5xNYykKJNo#PQCAZ_HKyw>G+eymKjIMj~fa;=&!$2o8PmMjb1B&W|% zj>}Pq?Yxy4-mXkb4-Dmnp(C$NRc0y@5iJSTKt+}AVu}B7@P&QH7=f!U>06AG!B4Cq zVh4=JMI^G`HsD3vMh+mz`L+s=e9<)tuMZ|7dEKAJ$>XE!asDvel870%Q;$2=F+MpD zhl08kFSdE4y;`x5Ybhap)me9G zZ)~+IxWKHAgHL71JLLuUne(G=PNm4&VCr>uncKgA+43;@ih4P38+2Lm94kw-onUs1 zW+z2%JYi2|`z-73NIcy5X^ghh?};S+HZOm~9LH-49!t9)ZNGbI^E#v@WGdk5%Ntv{ zALV#=KBN;!OmXAsB&E_iG51sCJUXh*wM$)WI?@q)S~ZN}!w%W<`(8+vQ1=DBoEHwg z+$aL)$&njQc!LTD>q$T#8~DpK3F}6)f%#%~uu;O1(FouV`CTjZ$LdAMaPWCZc!DCJ zkG)@UJcdYGWaob1JMp!fv8=m*kWp&R{;A+=^Ut|iJ8sD4{Yc9p7Q!2xiv4NhW>tNh zt+Ld2_+VMU_XbrO2pn~qGUgE0GEY`&)#$V!HJY80u5sT6FU>Slg2Qh*gxSJ^2t|>9 zPfe&kZ>YY+d~S_u3k1mq5^n&JyMQG85=ds@h=)47!DK z*oH+^H@JR;j*D1MN%_N$KsnExzF47ots6o=j0~RB-80)4=pX%@-r84t!_SEikirwhTF5~g??&E)55@+4S#bV#`p3xLbffqP_mWokOdwMwoF zk;N?BlB@SvPa~w0l~?$QEE9D%#_|LdAKB6jQfCi!mZbs_RC7IazuIf`TJO8BN9$Ctz zKNDibOWr7)VD=z=jmVPJdKgQ|33@q8*$Mg^gVdz6{2}02pt>iY9g+6On4=EORJNqL z*E98xw9$`A+t*%D8vhCu)lbFa=ki9C*Ixe`QVR`vmjW5bxB^x7IN5?j@b}54X~*(u zYfsksLB?5}R9_-48*ZD(=@ruo4p+=F9BdEVEV_W~ zuzA>4(>idjW8AOZwQ=z>le=s}Z(IuYp_wl?!#A8Q#ku12z931)18?3a#5YRCyNUcV zM?gtHPR={eduU&X)>(IlaK$ZVZ=eSdp6i9j;flz~r9bp*9w|&w2vzZ|k-At*0_Q_r zebKf!+Ysvlh|n0s7>W7T2`r5UhDqM?xJ9p{%^sv~ z$$P2ti{(ti8DrEQ`ZCLeVzADb4lLd(JVQPy7#A^a84WNp;1%>aU1vn*tir<8=s00p zP|1wwIAA&Y_f;Yskn}4t`o}0;Z}zRx`!&brhP`jgdHoT$NI%Qt3yRX5eW|Wa$j%n@ z&tGnllFCikd^l2_r#t|d1pWYs=Ss0@DHac7j;$KzP|I{KfI80C^UgS?&=mC)N_qqS z7sNlisD|y=MmE?WAlf`2AQ=Dp!TpC@nx_lni*JDuu>0H2y(vpSr_?&TRG~b#FnFUymD)29_5dat7IcTJ zA`t5(V0U_UcG|%zptOH?`nm7$W7lW*&yLTo9g*LC-=X+&CH?IZhp7@Hq0eh$!o-Jv zm!|&sk;J1NXM*e(_I{y~D88)S?;LjfRtJoP zy?SUy4^d3Fp-lHcf$R<~G$WI@n)jD%$zQL-CPHqJaIY*A31r#alOaaWF@J_x4Bdr< z2Q zVPigNg+3=reS1zQUbUPl)PC3=ASk@Y0KR65KgOs&FVMd3qqrcFh5AyzY^#7l{q5iFQ<_tCMVW2&#X`IEA=R2n@!hbAWp znAkqJioBW_?qJA}4}qYvFA4gY(dXN>Czu5V;OBi0D;_d4X5@vi-daH0KwzDB^S4s6 zTF|EEZK@Q)Nf4J(h4UV3#J`KOpSSj)28hU!qTnPMe2V~Q7#iBrY2wSpk3(o5J8bm4 zo}U-zpY3I{dq3PaFxxLWDt6#O;r6zjDsS~;0K4SF#lr%t0-J0dDULFy&fdbu&4KnY zeyH@@SsaO3pu+v_r_iLd{x`qtFK1riozUyDZr#Loli2H0*64dx77V*MmBEnGTTusi zsAunRAojUlT#D^1aD8AjGP&_1><#1O$dJQ4$eF#ONQ~_^a&u+U*&**12oP-#u%8l^ zvmF!uia)l)_|aPt<>UNYfUaZg`!!FT5BtLd(t|^)K-?DDZvnXusUZ6$7kGB0Tz4}$ zqp^X#`23xG_bbz+>H3{k+oi+HoK2rabq~2+$Q!n*&o~Bq=f-G)wT>!Bzd!MPbqsaA zeqfwkbv3c)Pe696076Lcq91X3#K8FLuTL#JYU>{W{8=r#d z#nQ_4jrBDF3?9qERO<^Hzjm5}d{#@-Tb?HUS9Idj-J!dJPu& zgC~C*_@0k1mY-VO?Y18H%ewu$?RA%%vxHaMw@z{-(#NMu?O(qZ5r%z3&bMQq zDQlMyHkkPp>2VphKls)J`FK~K?aWJfco(itdM61EJy+uH5hEJ}lr_2!r}6dhhpcCL z$WY_RwZ#5xOc$!Q>m+Vq;z^Fvh>OEN%m3cNiAM@`kDnk$$AgWtM+{=IYF1N-mqZqd z*{&3x#Dk&Y(j}>FX=BtwULuWBhrVB4C5g0VN$i1#r$pTkir;B-_e6W@@!M7QvLMf}{9Wfe?{gv?`5ys7s22$Cb@V2{5|^k-ysJz{E94y^VU2UPG3wOGAFmBtyt%j{R}P`9w^ps5o50if_6Y>4M5G zHov^EnYP2(s#*MJP^FFh;rTkuZh!SdMp1faa3lxkJ>L*q<_f)c_O|l|qFpMdIv`&fj|J zdjxK(>V%Fl3e0Rm2^AFQz8E$2QJEn>Y;1JEc>yKU;oWCh*w_5M z4}q^sxrfNiMxa3m{4{Ou8>4!UD%JKhw2tb z&8?1wT*P10u=4EK))ASl_xppIye)>;TwdTDe72aUD6mj!&rdhzM46?(=z}cz7-?+t z+_m0zo3H&fJYT6Iv2l7d_7r-^+Jy~hz#ct=xpq_EZ06SKvB#y0itq?YniB66GiwaR zY4|8ADsm!afhxoAc9RTd<&;}*=N53IQOe7)uvxv^)NhH!;;=Mu4G!KlpC5*oZDt1U zRWos-5W)V4ajIvKM`AP&a#f*}b?XXpSU$t-(!k0Y!OSy6b3Aj!+pb?Ccz_O2PBr5GX_hfUSaetvQ;Yw@W@ZB{@V zsED`Mdjb^c%6!avNQ>|c?~k+Yr$hW z9z}KR4i|F_?OTOnrMihnn05@qQ`pAh=_2e#yB5I;sTOHaEU%uK()GqO(il~@u~L^* z4&p*QdgrIzdnp7ZlU@6_xyCz;jJXGdA)XaSQlYnm72oRwn#ZXiqQ`e=Mxsg_%8F~^ z%AeA7LdFG$Sm#*_7<_ZubsZ^?J>8<}7MGyq!iyhYJc_DUe+(ozMxb>ycf6WtR%LI7 zq3y~_R@HBCaUdFFSDD+)MhcG~9$S)#W5kRa>9WGazuS({qarmM+V7}Grw;2<74LA% zu%uKnk;Lj;o(8{pDtnt~x{{l)H-syOcvB)CrulJ4P>X zuCAX}ITgiRTKrOpd zWpUf$O9gQ2O(+C*NS9B$xQ(pMOZYed__sTGr(~9- zh>EW{9YX-z*16Y4UK83{c8=UTn6ja9zkgdc*VUsf+3>~rWcT=Zirn&LC~2D-e|7Xg zxH;z!Cjv5RF4?aXa8EM1lJN~kSIT?T06b{8V>&^{n7Qh&*5RyuwUlO6-6D-_J+V%Y z-^%Qsv6OQH&8jm)F2A}5`e2ypNYH`(BK&X{$p5$`BR2loML_cQvT1=EP* zRrvC;AgK)*J$vMIC;0v@LlJ@ITc~U1cdn#A`4}&n?p=qjwk;_-C}YSs*;bc(w>?JA z)Z%d3e`D$pNW}htZ*4++oWzrRGPP#g#b)bbs~(r+Vbk#Da6Z#WX`EKEy?cLOF387F*O8ymvZAsxlhHpvXP4r;RBZ4gF)eS+kz4J2L;}T#r*Rc&_^U-L^1&5 z;g{Wm$$Sdu8#J(l^X;PWx_Mztc-OIn2*htoQV9Bu1n&c3ez#>|7xcp(?}HgAW%uAA z9Pmpr0O{c`o@IWweIX&_Gbrwp1W2?FBntVAvi(ppxF~R{3s{u=f`6DZxG!*?c!tCJ zGU{6Wn&kLwiP>eVf9-d_4Oo>Ff_n49`@oy;Z(ZmI`|!d0fSM0zSqK3A_@3eSd60bl zgYotAB>DRK?`^->=r7BKMt{iOqk$X|CcYCo{g5fnNffVQ@LtIuhp&*8A4fl-RSa&R zy+ZPbQiqU;gjx!@S)vJ&QIM5%*G(8POwZ8nUjD*1Pzj@KM=PQ6-fjgl%T&L zLV%8>sFUUhJ|b7;vjt}s-j`0w&=+Zu%Sq35eL^x!Cww@+KJV|lQ}CA>l#LTdU5z3 zOTNq+L?)+r3I<2MV3V5KkZCC=DK~`AympuJg-pNl@`RDO~4yG|7u8_%L->(%W@ zW`BPqxzjq`k~DN{t(d^dq{SPoOpNh4wL#uqpPHh5^sSssLvz14j=jh0$N87C4H3y-Hqg^VbL!{! z@=zyXbRA?R5n{r14ESZR18NR@a{Nrl>$;;cxbh$HnuO&LY3<5{K9$$V#c*Rdj}AH9 za9SGc0$qX)kpjGC3L3iSmf!@z`_9HqI5$B$%(GR@asuRf^wHK))J1F(G_6sr=UB%r z67m%U#mV6kt;Afp=iZ|Q+4MUK!Ho;BwoK_lyrD}{rga-A|Z z@^A!ue(0^pU5KJw!oaXLY>fgyCHiM@8pSe$Qyyg_scq#H+7c^)Nz@WbdKbP(i)dFH z4SrE>LjMr6H)o`UV&t(yB%$y_KKrn%N)pV1c}QhJDTYI&ec+lP#4vnE5Lz*;qKU9; zHV+9heC{an`Nu|Kg|l(8W*3TN5OO04IDKefCXHn$vdyp^nu)*;e?K#}l_j`zfH&ro z&%jQ;I2^-M*a5m?G2&CjMtl#KMG4y?tbU3@2v}f;DJOleYoWWwfqi5>Vg59j(D5l zN7ZQJj*}9PKAhJRoxACw{1wr7{%Ul$HG$K8_~Jk!t6j+F2>UHK z`YQ;XPA1M8LPT@_*x2$8rNy`W0iBuZiiz$*o(j@a&y=~P(ll#}KEBF2(h7OK#az7; z0qLa#6)4)Dv#_Q22y5#IDa$Lh8+>%mYP~io&w-Fw9sQyTQw%O;o}kV`QR<&;sc1qG z6#2!Fw{SM-{iSXP*1UTBAVI$3|?FNahLFv(w9lnh0ml$%xsxK-OZqXLGuga^n zSW^oJxx6;(#>)*sb{r;k!F!%<+Ci;^N5HxR_J^vqBn4B7Q}u|t?2)q*MgFMu8=Vbw zc-Ne^^D_tTPmtCJ&+KK^)^CivTgv5({Ib0%Esg7X`+21vMK_hqGpInbW>1A?Pps4` zjGa#~TKfB&;1-kM9+Cqh=4m+Q=@@8YCY3bLESnKJ=II*c8;)~Hqkc~@TnmoS>axy7 zYQt2#n&YH>vd#(C0m>y1UfEDKCr@dScihg$S*CGSle+^kA4P1~*nzY*Dc-4^bvFkr zGkEoV2VFT59gnjM8neO`ksDFWHL z5hi%2GPEtKv3-#$Rj*b0B+W9%;3*||?zMK%9S9a=> zeeWgMP3D*}*%>QrZG)(b5%zV^~)`+8-VzWHWSHARiys(#IO6 zVwB~vNJ0K^&40NHFbhFUhg?ImQFqBtUs^V*J9IH4UgD(vzJKoM@x+Z_JZ=t@;8zut z3Y$DdvA=3M9&<($L?Ypo3$EZ|Bl%@6ntvJ24?F$?>`qXa5bOwy3Zau4?`T7Q++`~< z0rZYV*qe{H}QH**f;{?~vnX6D=`r+Zgx z<5C%zOJ2I8IHQ)~<%D_%pW6PTgOj=BF+^ZL^i2lH=cEi>5A1U+{P?H*I3X6f=h007 z)+4n#@K(8T%x5tXudc?l#!F*3i07APoZ=$loTwJV6%5FaVfQGynY*B4gLUqL)1z8T zr}}TF>r{JN8J964<2oYOu55Xp*-1#sc_MuCU97WDd*~4((^Y7>=~=B_duA3* z5_vJ^Bfhy}1PX!{)+m9vx^ot8D-vI;3v+z~T7qnY7HwC*e0>?@0Qx)8@$z^fHX{TMV{2|Ca& zJ2UtUxcLZT;4!~Rt25PdR(=uE$i!M^;Fk79>g2)3=8`Yn7S1?4=9BI_#~YuU!K3EV z=8(DG85B~b{<((|O;ippiCUGTg_^-As5QE6n@lN8ozgtBj;}MRLb=D7a^@nYBW0FkL{z@h9TrcEBgjtXi3g!V1ZNd>3oMN1n~qbaVWk zp7WAt@|j<$nZLiNGk;fQ{@zFT;1%rA`%|7Qzkl9g&WL8;E9=SgQ}NGD-}pVL!EdiL zM9)tdEw7!z9R9DiD;TnIb}?6~*jA+-?C^yy?Y62Hnr=2v( z;Yyq(NDHEcclrX>M>E$6VmqHRfiYmy&q8j|jBZ*1jUv?*xs~dE=!iS)%OH8blTA zjJPQ&a;(=2jIa2z9fY8bMlruxpB!CL9vhnD8Vls!+>^>Bno7<2vvYVGt(r=$x*|b0 z%Ey{!D`|l=$rYX!y*yij41e0>XHHGd^keLN$Epv*d%f8~JH< zqzd}PqpW=tL?kO8IXS)BH__YE$T20P?yN#<7DoJxJ9!q3&dxE1q)8HX`=25-Q>HIo zs)AHNwBcPMfd@cWc-A6?X8`I2)6gGp)lZ~38arWQT_?Vkbv+Yx~Kuf>V~>;w2m zg~BamQwdE3eRQs66V5^pRudTl;)lJ;as;BZ7)eMf1_+II3w;ZLc* zy`jTg9JdH@RXc{>hDd0 zk+^)>&q`<{KjUm>vVX0*NgAwk*sIBK6z5gY*a2oeoEG<@>WETn&e1BInJZ_SHCYM8Xc*ChF@rn zyLnu+pplW$f-Qu78U03GdW*A44UYb%$cVRTW^7lpZMlx@k(*sQ)}C^<2Lj)QmYZ$S znKn6YidQ))jh}H2A8rWX=SSgX-Y)a=w%A}3!Cv@J*P)i}V1#g(nql~YdDcZ^RCo^g z{lv9kfj9=w5UEM6i`Hbp?>FhB5nb3PT$*R-+v*ci{%IT3g{piIiL@8lDldg&P;|E5 z6R28@i^PKDOoS2?SX8$jC(JDEF`ZaG-+I)PhehWJ5DCJsT!D;0GDLzP!Sng;c>zQ} z_^w|?31WFpKtZ5?gkV%w(e1a`kjPXNHD;*;p~#U4_X&*aO$v{mfQ(cE6#%XoR~NY~ zu?zTiTyYG`mUHebF|OnCk`AvFx#kuWrREk)hBkm{D>AI%V;oqeYuXKQ{#vX+fgf6L;NL>6nU+XuQOZj}e*lGlKDF zpauK;{7==KS~=%*soBM!-tg%p76?;1f;<;A+8hn%s+z?UT^7y3xfoAVCUdu4OgHsR z1P#V$oQt5C=|hI!o^TtuRM)KF)&lXLFdIAqdou<{bqA82*Q5pnzdh-|;yDf`bJ7o+ zraGj`xH&Y;9I^1A z#2RlrQC??npE5dC6BKr_@Uign@Wcb-gX06!1E8iX4WKfVkevTd1JJ_elhZiZ-*K+L zDo^-7$lz&a;pA%V=Gm0*0pV#jV$+9xN^EP%|u@TbNBXFV8yzdnn@V>~^;k*~a6qUL=iO@B{pdTv zc{ftxU1p;#nPk%Vu*i4s%)rDw!9#i%l0p#PDT+Nj2q!*c>(&{53NI%HQ*-dN#DSj} z9F2aLuIB;YZaB-w#GVQ7k=k$0%cycGvhUkSjn;25&xE!GCR3S{ZoBqmvXWMd1z#iP zwMngIGX#%75$@C5cjw+`r);|IsvZy)ZI1_`C6=|HUaTEamJF+b&~4WxyJMP3G~4O{ z#J8?w-s<4L@IRg>bxt$s#7YE>H`A>3UTBb~c_0|F$6%}Tx7dK&oX$v%hRhMU2u*6} z;ruS$+R2TOBfvZsV0{yRGc+J@jhyd&4%N42;o0p*w-pv0_hj zKmHi6r%&jycB9L|bVqT;M>SkUv;zZhd^JNlw^qpx4aZ!4_bxbBkQd}XGnKoc(0Gd z$G@kr@n#rOgzb3(XXs=EWWn;@j0v#pu+6;{1~Ld?4o5gCcxR(HMts*l%|LB?Fx$E5Vj+?pcYiyl(_kt#AZ6H2&?rQaL~(@fBGYVNQLRTz z*yvMEvs~sM+kVNV#F>6lTSK7s?4^wY(0g=FfEiJ4v4`}L#?f=BWe98qQl+aTCJ9OqOpop97HHVf~LUWAS|NWVyeGNJTk4NQeP zQry7quYmU{02M)ZDSVlNcFErTK`%mop}v3(5>ehrg$gO|DM9Zl?YVga9je{RzjoBG zVGis_(iulB3O`kxhX4Sz> zTQ*@yf7L&@m}juatP)@P@ejE0kABPlIb3lx^FX`Mzi=9;YhM|EEc?V=uGusNxDy;0 z@=xILmRmJHK`QmfOU+iDjZRj4hW4`#XOg6xGgPRLlmB!!cYd?EOCU=jqFFuU`e!=^ z;hi@_{dazo8wLaf?_X`ef0(fU>H_xD*mgnFK>xCD%28<3qn>Y-)RPdg&hfvoSZ)iZ zKt~8ISEf$=(WH>>D%Yjw&ZV4xETWPLkQ}QzglFqnju71AM#HvP2H+EU-c3+_Vm^9s zSzB8(v-w6BLd_BVg@o`cU!;@rhIf&F2M4cMLZQ`b_G{be~uHUDKg{5Wk zGz0Y1AA~|0tetVwqyrjr7oBj?OnFKUYNKULJQYX0FtF71Q<3qS2>7^(NjBCwNJM5k zB;*E9axb+@(mJiD_$(ANCf2iE;4HlcAM612Y{$lhBO?c>%{GjIMy z0b9l1Uek}kxtCCU&+xL!a93MBXA7QM-yK$a9G)^1Dwc%^J=@f9x5m#VWg~skjcA}g z8$!olIZnk;QwL+ul9(*c*}aly5^NeTEIUmRVz#(C43bm@SibY|OwmBFnZL0;r5SsM z6)scjh#*9oRAjP!5MQ9zLF_b$JgqY(<*6HIi;ifQurw(*oPce*Ve_0r<%7>4$vckd zrJ#jpBGaJA&%x5>qvgM!22Lu?>4q6Qkx7AI=&bdAwz*{`{@zy@yG%A)Kp9sf?z zF!hnuAZ@wlEr$2QEAX=g(0+hXOV(x;Vt;Y5MMb|RMy6Qw`>loB0fNmzWrTu2rl;5p zHp4A5b5#XoJw2X|`Ybc3&QxQ&b<$=F$Acu3t%d2tZ0v2`9yp+@gG{iBJkbPWv zG{WRX{lSlg*%_pkWZ4PWObMQEi7kfVJGCX~>z)$TMOhsxCEp3Ju+PaVV>)bxhkEA? zmi!}Mgp0e&8Lb$yBA+N)t#$?2eG5{%#gH+T9jP$-ERQrN?yV`c5i~ zziMwZ7!nAH75GM;?9g)JG}3ZvEwFmakt8c6JGVTew5d08^n+Un%S<9+Ge)q5+UXJO z^xCoSsg=Lr=sM-}%&prP-FSOYcgtxzE*;oz&@Z0j1;5)v|B@M;SGfEDCzo`*jtHbq z1-m9zh|bUnvxL1~Ey^17S&m`ef!KI(b~FJ%LAP$PPLGE?!thASr24pcoO882-P8%w`Ei67^z3OpHd}3@JK}z(#x)8xJM(;%(97RoW}gidx>Y7Ioj_ znLPpV>7L}3LC${|7CU9gA46xTKjPBkn?I3}>8mpsi5F+s;WQI>!S63I2xn*~9zCIz z)kD2c!NhrJD{p9d=SKO1`4uw7v8mn>!{6rP=6n;iZ^&#i4zKpT+rf7(?z;OHjH{et z>wz>hHIzu!Qv(F_E=gQ;h3`<7x2_yQcCosi=9cX5bY_8CarMASev~UOZZ!70Aw@}^ z7FK^7bnW#u9`n!D2x}vIBOr*2(OmC9qALdq4!Nb3fhyQFs zA;G0)4FV`wFr&>~8CWD$k9n$Q`&tO4HT9jbo%bhS_YJ*tV-#jDvqN_olaGJ zg0v5N`k}rgiD&SqH8kBCjT%}V0fw6|g(aB!Yys8gdih94gGhaLRHKa*N8>;Yb|i2W zb14hw7qxlcJIEu|qkKa8EOHxvxuxfNjl8qDUr@CQpOFWort>95ueHWP$szhQAgF7g zTBU85p=^2%bmiM0?)qYmF6y5++NcpRRbkrr4Pz|`-M#r^_6H4;Sb9Qu2QCHzpZ!-x zA$m|+b4$ANe4Ub+9NOG1=>tDTPNKf>{ug0q6;x-?Wo?265AG1$-Gh5@_uvrR-Ge&> zcXxMpcXvCuLvTBX14Gq+^M5lnHFx`>yKmmEw|YOd_F5ju`Zjr11S{zEhl^)j1@EWv@CNaSe>mS%S0>dH{zHvKw?ayLq>pg zzUE>=!pe~~hHkA}2*1@UhdUu_q0p)|-*|B0U48V14Q1C64>ZSMg8DRJ(eH=1%_Cy# z-yX&07rbhUL{4_VpfI);Lxm?aLK?7ug=W0FO4&tvfbB=NSIXuWnmd`+pULLe&tkuq z%H|isP5Ye`uXn^Anpmr*-b5y9R84Qh-cfgiXi8;r8Wn-Qo&La9@|`G=;oo>$oHkzX z$q`>#;w=*ZW335@OszyRX38YVgu#n;wwwQ{R72W(ngsG%#U^&0SK@E0cV0iRKXS&* zPNa>J&>-fgc?nV|+4#Wg6RTS>XQQaBAq(y)E{s+;wK5s%cchjsm^(L0cSKTEo?8UX z9{ZJ7l_ssFOGLtLV6}o-{S8gMUA=YPIg6=I)0LVFE(ecGun7)tAc=|I#i!~#g3HjOZYeh!x4N<4&*iLB z$9QQIn^3&JvsjT^4i<7lXqOMQYnMf6d1)PNE}Og4CK9J6$ductRcH4hq_~PpNAM+b zXg{>US7F*{OB{X6bPu?jSgtBYwfeE1wKOiGnANuZJNuIjGCF~U3y?AehKh@)(cP)X z-DbGA54a{IE6Scd3T{nxI76}m3NIUnP$8gp*|S>CPS<2=_h7xm`1X$Mgd63zB%|ZK zB3V_W@}(^3r->{I-RpN##G0~sNb%2NA_sN_!udjf!YQZrSBX${V1+!Lzc-Gg46dYXH-)rI^ivYtHT$KNHh+~uqQ>1nb^5x1 z-xT&Ti5_ku$&XtQR)o8+L=3%-*7P0W?z^BqBwEQg$ZlC4TaFBoEA~DRBS;5+v>zd8 z`Dq2b`KN{@gaOWT#0>%Jyv@vfhYV9&yL&-~R3iX^fOdBMg7s352O26gVa$n=P?3+4 zQZ^}V{>_InC^P{hCE+4?EX>UNh8$DfAG-WF&H<+jZuJWEH>-9~RnM8^-=+vLKQ9#B z>6QpTg0_uV`C4p@F&r`Wm%%(Kxju>7R^2a$c$vpz?6#do8G~%L;gMz@{r-Dogxt4M zzxSpKXu2%c2@h45pOv8ar0r1)gO6VPtqUd9zDjw(&x5^#Z5|damJ>bmrhT_FKAxpHcA2Hjcye;@7 zcIJ&A+`nwK-eeivdE#eu`^ikL9Fq~ZY>7vYO4;v6SozP3zJTth44E?L8B`^~P9oTw zPnepR-gaG)36c9wYJjv*YgkmqDebBPo+zS0zf=RRgwuQq{l`wL>9@y~V>X^YPLWb@ z=i=1(!y-+QOu-V|u*0O$;e+833I z#WM+OwBk^B{FP>1EU}_@jLqZ=L~}SQi#f?-JMyJ z)D<^7##Rl4!!K$@Kl3Y+Xwc*A8f5f%-41!enfK^DAR>y;fBHa>grqf#(MANo%}&Lh zOl7fm?)dw>!Wxou{uUNq2%NRS+XNLf{#n-;nSYu@r$)@%Ij4Wfw=JP*|tiY$0ZO)F^JgAiuF$P^b zR~o|(9`BdoU@V?HYf2KMTDn43tZ^up)36cmu?|}4!H2(1Bu;do%c%@?)69f-hT;}X zao3hXf`UnFkVbXXM^rI~f}!v#+nC6yr|?%IKIJ~cbx)bM$qW&t^fI`GXssZm z`WL_GZQW&U-!EDZc|{^gNmkmU$hv131g>bvMA0SC@+Y1tqJ5$PF2n?;+-DCtbS8%c zK+QUCobbZ}_92;vqkYo}vY&rxr~Xb!V@}mM1tjTbkX5Ia{(T(4Ojq>#_}ul4x-*E* z&2o_rC4Z0CWvi%)SZ;uE3-;|Ni>V(4kL26Wx@Z+Q#1P(5d{1SpRUvZlt&`e-;=kAG zqdY@E#-0L=mOeB|aA0eG@E>*(?7kQ!hxytL5XOIk3%e4N-ct++h&UPu2$Ijc_y0LZ zeU?_Ls$z_6Ok4&=PPP`mnVjvLbx=LjmXmw!e<#Q#1Rzlb<2JAu4rzTy`NmjjL?r!< zR=Jcyrpe7b)Kqjt;rB>7d}s<&A+(?xS-f~r3P;dFG95S^%bgL14^pM#a-!y6E0b%h z{hfy_bjNT_hlc8J|C4P{#wcd6AL#0kkJtZS`$>-XHSY<4`+kMVs!cC}qQrlyDiY1z ziQj~?FIHwmF8XMR1#VJe(^Ny@D!ve9#O2hCkO6X}>UI`tk>~JR;_g+34P2P~w+Bck z3BD1ND+~Lbevyms8;`7lT*Ac=-B%Y@UCDZfCYJ^U)5-P2?%RV_LTet4yo+6j%iP2s zG_E6$BYDn_XU!IwsA*qlpr)|6cCjI6*QpFG)l6t$^tfdEwTaI;a$7x+=$et$aCKEZqTL zy+{Epfp-2eXFclj&EOeOE=cAmv9<@im=ibBYcBwt2cdFmGVo|raC|(aFRS9OFnT_% zgX|mM^gFK2CsH`gy%c;sifUb~whR1uL8$IKCzfx!IgQBF_T$~xgIENug5ay2rX6s0 zFZea$D6x{hRG+?^?LE<@?UfrxcgL2DXUe!#$NkiY)q5>Z>h|$jyNmUi&=@)T?YZHB zWP0D__K9$lIj$m3705T1vNoHu%}BnR(30AYu5~Z2jYN$%GH75Ot+L zn{4kupK6a_l&}zp@Z{>UP>vYLO@3oNU1Yy_EHpnt}E@!F+q=Wwi1HBWH{yw@|d6&Ag&SRe?vd$P%>Tl3bJmz>_+f5gY_1gy7Q+5 z=888EVqfjR^;QO+(B9q~wQlZS$29_L!@!Nj{Iz9Zrd?9ZDw&9TJ?;0UK0llhLNoBRNrK+XP3}SZDgLVgLeWop1=~=dJBll< z`4<6GlKU9M98Z3Fz5!B2hJR5b0>sDg!H|x}mQbRqvZ--D4Onh$h3 zI1G_Eg%vtVLf>zZc)f_M>|KYy9xwnJ7D%3l50qC{&?DjI*YI6x15w{CI53}}2N~6uwE>uK}fJMa9#2iegCzwpz5Sm~joy zy4NNy#gJ#j+hQr%qthZ;2s3W`EXwzyVT1mI!FEl5Wyyom>QR1@sq)EzLwFNYipKKL zj87cgqfrxgdMhwy{GQiKIrGzp5<_ooedRcAgagraZ${}&hRVsC<;_8l2Qw}-$URh- z`TAf&s8@E1#7Zw*+9xW+C*OhL^jV6=#@eug^xNGiKAKK;JyXJTnA`>KRrJs+MaNda zWNj1k_m)?gw-aPcC->JMZ<QE~QS3!(MdOf= z%ZL0tsQa82Vfm)JRcC6X=iF$n?~1JZOB2qAJk|49V>LW+lH#8~wvvfI_Mrd5+|k0v z?X||pwXX}(NbQbsv7^87UXD`dD%*Vv{st71@Y|j>}c(~=;yWi_x|6E<|g|K(W zj`!YLxsb2H9=#QdoyZRgP~F?Y&jhFPupOJiwXAcFP(&Pa)v&-XP}`6z(<@pbpedPy^xV^~X?L|&p% z7`DKpE~u-fW2({L>oC5@FXr;O^=1f9c~cQ?-OM$ZFv)YQjs2?B?CI=Sd6ZHr^AAK} zY8#CQb-Jjh1$|ju44RfE5BQ^XDR?8_{q&DRIo9z#5pKIfcC@uBG{Kj4 zFP4fW?!;R)8R+92h4o>7^u}Enfmw}%ZuV^3@H=T@8fh52@+GR)iI(iTIb8MLl*bAs zXrVC84CVZ=-8yTAZo+Kov43Wb#$CRQXi0FT>9Tqs8Dqys#s4@$2ZaXGYXqb}%*VNS z=bL}A&q!Z*k>5r9b6xsAj?|kd4}s$-zaO z&82RMb*B#rtR?fy(#4~GDZa7pQV@$Ze|I8S$-U%2+>|%2>J{ICCG8X&TY#|}raaY| z4^2?kC-;G$7la2Q;vyBFAGn;mcQtO>+aGi6kT&~XP zk-Jn6m`fY34v_tp5Kz$P3tInkl+4|5>ymcJY$(xJPTsiAvtR8wCHlfhKM6Af#p8BZ zPuRIK)Fnep50QPEGk_pn>km0e?W1H&Wymhvu=p%cW7OC(bLrTbxQa>jm`!Hzz?l(p ze?aK8;ij2S*q6y&L@EoF1Z;Ig|<~x(b#Qx|5W4J0jX?iy?Wzv&bfv@2T=dT zwb;90+#TA{Az8Gg>aURYZ77*Y=#K)Q(f8026BOcr?4!tOK(&Glv4-rIqFzYB^zZhC zI*?tzG8dgF3x+qHV4g#qGK8wbU^ov*>tQt!J*@`5`~1VR!*rIIx_0LMAZqxMyg|7X z>lNd_WaCK4Km~x_fW`+e+0FMVG}4zEY>7R_XQzawps2=V295e>z*So=d+N{HjCzO8 z=IhV+8)`bce^8f;CpXPS zfMqV_4(u@DR^FN=(k0Z@g~EIa<3|91TDAw-sX^!sPN%czu44BC%13bKZz{5h*|V?Q zX%FHyjFeSr zl*`aRnB`qi`rmcynCr(_DhBxzHqU&*wt~0l`n|d%+;nE$k-XeaW2_6jX=|Ci6jTl9 zkJy0;F*+`TUCd_Q zyRtT!hMN>N&%O~?&aFl>Wg;#uDfv%xp7Q23(ave-DA|Kk?dp{4b_t}hXTMhd5xe=7 z=4}}l+ ztjVmyEpgk25M9#=@;O=F&~w? zT%S#+%EMQ_?f*LTzJ9#JKwK%-E|6Jqr5GylRAB3#2C!${p_CnU=5a3x*oe#=8P#~+ z6z^=a+r;vdr5ZAR8N^<_FC&RLQ_kXxSfa3uX_}=Htx_Tkc>Q?JSm*`mu?FxXr<9Ab}LiVaC-m zR>OFJz8H_xP2(;4*oh0eM4qylx6cZYjOU3TSMJh-g#A(*A&)LSF7{h zy)jNWZ%NORhRW8>x~w)8OvC2!^K;?2FMaiKi%PqDLRthaEfQfl4{Xy`_n8x{1Y1xa z_7WHKcGuVw+9#__ZXvMX3$U92Oo!Pj=wo*V31;&&fP6W(fvyX4>C8N@@E&;lFLsy)kgS{G3Jfj6I~kIr2Q5 zpfA&%m4z8ryQlgYG8~yq8F?~@Gln&g+wOr(<4hW>g>jtX^V~QT@LaxPQ{daT78e_v zO`VIwN$XMM%c?L-GuA5@B~jwNsG`QF2n+Gn~w}oj>;OuR>^qw9t*>E&bdjcHxC*EBMrry~y)*}e%wSzNQ%?zn!nwDhi{yBvQ>a0yzS#BqORea8Tw8E>y zYJ*&Zy@Y6iTJ)3p1t&=-#a`OGK9oD!rHNdjc0vLA-5y~@bXPDH(dK>+EMHzz>(!t~ z+?)NDv#DgBtgQ>X{HE{qTh8iM?$Z=wYr=3gBTd1&c6odJCh<^5PFOG!BymR5>;1P1 zp-Ior#zOHm)weNE=@UTed}|*y$^$*n2?5CwCoXOMnN!^n_m#lX|0! zjkf?s4&~1oq7A;h;ux6D@TfvnU^zFIcrD@2H9E952jrk`B=@~SbzpOBL&*pq5Qp9O zC~HSL`!Lz`U=?{TYB5sCRzX`|evuy9izzf$ zNiP`^tUx+F%8#89$Gld+iKN26&Wi9scjww5088`eVZiQrj>@&}~3LY1rLFPmQ|-Kt~vwY?aqEVCaPL3o#y$;MMN2U1S^HAk1}H0wMuUV^No zhi-FBA_s(NWkNgba6+kN8oJ`yB_0*uTy;8EEnO`yLBc>rF6a2TCv*s3I13`x6=`7n zVt;(eT?}P(%$w%#E8>eu_{sJuodjyXRBgVd(WEsH{0U=jAjw8@88GRd9KV-u4@|O< z8D9n#xRFg6@*5Cirs~QyUwQxfgaXwIo%IsN+OfK7TuPcLOp#w#6(;6MP^iJr!v& zfM4aPE*mVpF{ubn{=^NQo&@$TD1u^Hy-wOb{8{`?`3{C%UAg%x&cXDMJ%0;JfFJM`FifTdPKc++`c{>{vd7R+)3E`ymJcRbv)dWb_Sj-)KMN1n>B|(T-EQJ$9l-YLfC{$&#Bm}#O_oE+|fEW zvR6_Zw3LK*zDTY7i;SnjV_=_Kyz3L*!$X#XG|o91G_u#j3{L+DyuTH*)m$M^+^~DB zO;0rL7|q?mq9a^C@IvAgjB(&?+QQIHjr5dJ>d0cVNpe<-=kFe|qVHXMiSDHq8W~Ky zta?rP;KwjRDd6={@`&ywgl1i^yh`-e&3T??GFRvdOz$UN-g`R3=^-e*mYT?ua=kcw zh>G(TU;Es#V@x5dxO3hLQ{9^=;kDTC@D*^-Le|0mf&UKBZV}k#20ODqDCmpYSE1lo z^;~h@EWKw0m?sNrtWUh-{3j&5Z}^-D`GkZdwEq_*bpC&k5ZOgdBBf?kNSfMmEC}Tr zsb~_1vDOF8BdxXi{6l+LGkmJHG0({9gNi%x8PDGQI7Wt94uLwma09 zud6$I_F$zG(r&fZIV8906-Hk#5O-Kv6i#aQ#GP~2iqXNBs(h0FXyYWv2^ zn;w*%hE%&c3FNU65y8n5Un&&h3J3NJqIf|m+dnu?KsQ51cjz{|AQBw2w$?6;POQan z?~Gi&3cq$o#XVJLIDm(>J!hsses1fHIE6LDELcj&X_PK~3|z1**tG54y0pMh%s)4&`~HU+BIpeV9SO8B*n8I`HmB?!j_RnQ+FW=R`rj zqvgGMZ%lnL+*o({17beyNpK|TfEGe?2*@-0qdA8u#KDYJ(t;7`!uusLa$+p^P$=wA zR0rXG_q+1;qpmH})8AZeHZWIMrYjIQQJtcPqURP^7c|1Fe%k&kI)pf`PxCA2cZB2H z&m>vz^H{x1LBF?`FoS5H)7%W=%bLcm_6|$C*5?|7UmBnn>s~NuhFQw*lIP`U^qIM` z{di8xbsa~@fW6*mP+n2Uca?uLw}@{?t+fVRb)Tq+YD2(h+5hg;CWbg50uW-eUuLfAlwT%1D62K?SX8*#n_lyEy zX5@>l1hAKB|6{|8OQ^BTx8-Ng$k3vfFMdGI`nYGhuQrVYhy!xRoYJ#22M%^y5`=aM zwVS8~{jB8yrZE)4c4a?!Gns2$DN+pSkvQq@PsPX%O6`yTG5Ng6Bc}w z%(J6xsz~%eGO!VgG;(%&d-D51-b{j)e|+~s>8WV{x|G-S1K8GK}%kVOU}9W({F#WMEmZt?lgWqi~B6gU)u}e*Q2^Lcoeo89R5zM?nPlo7OQ7i&p26my7dk4V>|mF6JlI zef;V`zZ%Cf+D1H6vThP+zRO}1o%e`roh!eue*!M=Y5i!XNb9)HTA=s)%i+RoYsF7e zA0jV1OZz0uCc2m;Npp6{OF%K$kIfW!3SVPf?!ZAP!%iod8!%&UZ;MQ=+7SwK`=kZ* zfprq&c<&4JV91V^N*&Uju|0?+0Z?GYHcyRy|7TKf$dD5mItY)j`J>D#d}yFtGFZdA zB52}VxrAG;g?ho~8`1k%y8uyixTPQo$P*@HYr4PX#*>qEUD`4~#vEFSUNm1gvMqfm z#KZIZR^U;%L>qtd{`jbzD%k>Wn?xxLtT8v&7KeX-gIU0O&JVYPK$t$wyM{gn#q70q zhW$5lD9#6Sb}%)3;V+=jyWZ$adt6KZL$NN=()A>l9sDx)X6U(nW=Bb&0-JsMxk*7z zPQ_1C=yiYLrA6?cnW0kXe{188m>x(dJMaTMhb8a_-_9Y3Wxer@mL`K8J!;61CM)0% zAoRs>N9nnZwA5sAH~TpT>I{Dv5u$VlpD~H!f_@1Y;qs-jpi~GB@bEBDM9aIN8C~um z2iMQOz#q)*h~wgfnFXH#K3D3n8zGg2usoF~2eYEAa~~|~;(_Fzz{hJt16ZD!Y+{YH z-5WoT;D;UW7;X0w9R>oZVJ84PY;`x4-5DaYob#?!UL6rNob#Mi9TVbw@=ep?s5$rr zis`2qRKT)`_w0!GF>w;M`RlaPZYrQUM)#)pHQW4b+Nm8z_prDV3(RElsO76_hFi>KozrNa;ax9J*>iqu{U4$;RVVh zpd4#fPe(>kV&c4t8@pG2{p6-2QF@?5d}-r-gd$ zH{DxO@@g<$OYQd#e1m~Oai%Z(ruj;CUq;ZGNxs-vYE;$rdl4R~u#Y4wEh!>|9JuNE z*S0|0eh_uRNdCyg-Te1Znap4vq7OfLJtoDz=X^X%lHzrx7J5sd*lPwjaix;{BRMZx+Kz_B5rw`mtW(Th7t+VtQqz z!3p>U|D&2;HORLOqS2+8xI6M&rao;iKsht@$*!Z6yr+E7RNmRW3KaU83pp3nI2?kFmNQ8aWv_(n4=$Zy_{`@l_*`9&{q z7J=BA*AMQ%%{{7ti8QhHrZN*5Ul1fKD6a2dIiv`Y8N}^Wd%%Ci6m!1H=PiCv(_VV+yg)@f027o=> zwd&x+B}2U$%leB+?4gzxJy-ldpTUTb}PyzUL&Vn<>pTRx)>Xw~jJQJOq^1bpG!3 zA~L0w2kkSG6BS7sD@^_2U*K(QenN}%HBZi8#dKU2HcHW12ia;NK4Cvl6O|j zs^+2QoWstOxUCKvt}RTyP>=-5V<*+-WkGhykt`COgT1=8^YPY>!sC^s) zX#CC9m~H+MYLSgZruh$^fEAOBkj4lQUA?-Oj{zrS0LTqUd|M6y&4{PfQ?KMVMDGUA zsSC$)|67Qo4((_G`GfDd3cQ2&8TSq+ebVub7BlB%Sx$td(Fn_45=wq%0t2%?nk|dTLb#Tl5pOVhVcR1N?@j%wM!zMs!$qY#%6XwO-K1NTQ8Vr;Yf1Kzb2pHoA|1F!>zQ;1E}wLywI-9h6sljQ5BYT@3rA?&@-L+bSYQt;T@2Xi{D)W1l)sg`8 zp?@gt&Upx)WUE_+t{^_RG6Q-aBWeC3HP1cs9fiZcBX8gL84?Lf<59EQM_EYLeW)}m z)C&cUd{fSr_;ICBc*i4n8^@{85iBr|)$==K;+)wv<9nQ9^u~HlDvu zl%3@+}M5WlPz< zFkDwd_&zX?e8o;U*+-JnSWL_PY&Bj+isaG!&kpmvown0LY|zwd zvOHZ)53^0ya)Fk4SQ7F*7hMYs2eo$cj7{awl;e!!cHY8uA3R%(2@7Hz#LmoM03Te~ z-KwS0{hg+@-t|-ne-9`>2BB&*ef0Y6R7VT1b*>Acp3*l3 zm;z$3lbA2BoBZY6wUhWT*UDWsghaDsj$+PXTw1==pg;KwpI}A9y_Ret|0172Ey!9? zNThY=+hbm`v@f)a&)b32V?5;+>D<$NDD778f&t^7>WK6rdBLIdOZxGb^;RC7kO=q> z=5mJ1Zxj--9b>j{!ZScsm64_8tE3j`>nSIH}X?K!6bIn zRJ$ZCAmoYKZ5$9JQW9hS3g4Wl%v50(JGR2L+8 z0*Y=ASLdRrEnf^1Mt_>B&4U;9-;+2Yu4?~YY6m*r1yZ7~>1W)bo}Yzs*Xdtk{3-n0 zM_z>}xH+BoIc}m_)IBxdTZ4`b<) zjy_MX9}ZeI6&!xvWX%G+>>Z6A;o9^89Sv%Lm-OSg*-Wn_<8DKTE{HN%H=* z&KdSmcJGm?4q4ve?`HzP$816WLhl6(Zx+(S-&SIL_gB zu2M)@$M5Eq)v}B?Bj{SjsMdUE0UV`)2|32`F8Zmn8Ku5)j?Z&jK&uyi{4!XekZOgS3U^b!!;Q8{}pkMqCg$|5Yz zlOdIAe^`1R>!tuw@&buZA3jS4pMsMW!FM7e&Zf*m3jpAA=AV$C=jhVjHTrcd{gB4o z^%sXvFI=#GLgBU03iddjDp*&9U?)6&D@4Kxn#55LzVNL)Ds&_55w8Vr*849XP{2uy zw@tM5$`wQL(OaIs61iam`>FRoxuCx(Mrr+Lj$;}p1O(ClE*|vY;rf&gUg`R~s7mzo zzRrKkCPE6t*f>Uf~_n|cOjhZ4XT&?5AFF#1jJ z1}eP{DRGkif{zzRvRpTTf>!RO&&pN}~SNmK%kjKUSq@Q^|0d#D)W~IHq-O5H( z|1DpT@Q&Q*k*kjAa)^-`tP$*tm8nq3`4o_=)fBPCPk7J?1=*HG&+X~S9nm!lq#(%0 z{FOYidR%XYY!$HKIAid-I6>^dTYfr%_gGXTI1|EAZcmyhYn;ojSSefvq6chFOPV#H zTqDp8y4>Nu}H+kv;vehRjOJ`*;!e_-1Oo z-wX}Rgs+jq35KES8=qosk(&cb!DHG5%Q?-Nl3#xajQdAp>m~Q?eH3-LaTxgj(NjB# zK7NP7wQlFtF60*FK>%AS+bQmY%_!`pQLbANM-QHr^~wuVWqdL%L>|i=NS1ZWKVY#W zv#OTHG041*et4}W>Z9qrwN`>j&NNe0~8rthnV5@(mbJRp2 zJ>xVRl$@lS9=c&MQ32f=N_9h?mA82^YR&t?XS1Pus|O@^6MYn|-||plLc-Lw96B{? z?ljwi3aGz#YzKB$706+36{{(0IyS?}D|)Wu*Y5TdP6+IDHZah5L9tH?^yhKYv|Z11 zI2LP8JqF7hdyCuuJNL|2H``d$CZ12!rGi~9b@!;?|K}alZ~P2tpEso{I7^zd{PZpbr7{nvwySC)as9x~H60b?31#-!J% z;k$d%5&~Dj)AsxY75hI(q+UVn;CzHzpJ>)fi}%;OX=WV=y%G$9C;o30n7oPSqH+?$ z;OB*%gu8(XXO+$!)e`(ieq7C@L)fkyP%wgGh>+I5M~$2~(z^-p^X!9W_!ocAfZiec z@ZpC!^2mVu`3F!?&a-u*%vbtZTe~1Lfoms&yRTPU03g(BYn$@UsMKW zO99oJ=@Lae5hrDciIVD^qJ(_#XdxB+g7V_=v9SF362(%|m|j@MfG?F*0s{djWzC}U z;yWJ{Cwxv&2Kugc87=Q;@s#MZ)WnQcPy(*}$~oTsmGi2V>9r9?C5{(XFLkNeRG<0l zgbDTjt;dTVE3F$n2Z{Xo&262NveHWxUS@W3*cXUH*PlE^-@&TO}$A&m)8=g8dDYpD8b96 z?MXZ&wH?B~5Tuc_NzJc3Vg0!0y3jm{{p=9Ta9J~kfA2){?f8Psztli8u;3Q?F8_&p zgqnf-HThu9qV>wf0>=9V-4=f~YgqSWYXoHXpxv#O^M@6~+;J-r3UY+L=VS%LYfQ&_ z>b8A<+F7cw))q6DEg#hfArxVXPGX*MP_dAe(4b?+Psgrtc@_L56G3LCQtjMhr3Yuf z_2>8%K7{O*nDjq{rn2Zn;+lqH?@(yNjcmCvIF!jldIl|7892>0V86&S1l4~qVO);V z#I3h)MynU;&-j}{c~iwX4i&0gq)|@lB;CfQNc#Mm=Gh+0rDd|#%e~=YR9l6TJqJ2D z*@`wMcS%eg+^um5exdT!rIsu5K_gNnAQ*~xc+-ccC(52zTCml>zb+YUya-F^k!XuqjEF30_#+ZDw-C8tD#I=LNwXo z@!b>-fy*jx0RG4r{E?erK6vI~jSpL)yst0;C8oL_RFcVDRtH5rx!icTAMWt-=beq? z7L_|v(^EfR^mIKKPLyF}eSgGW8diQVOV+f!Bjj5aRliHa!e>e*HrwopfswK=#b%%I zp}*-4vYyL}CXQ4o z3$EX2x!p(fUPvH}38=c?fC!KZD!YXy$VF>fIK{KG{ z>mko|&-trEB->^fbWofl;Z&vxuYF`jjhU)f!&{9R9ijI*6k5PuXB@8wcNlmocp?(L zc5=C^PF>rfB~kTF_{c`8t3LZp+L1^Jp`c0h&?ihAF#2Mzh!ci}M&r@2{KpM$<1v1D z$rNt*iq~T!q{P_LfhcKpVb>9{)ftuF05yrp&2hyfwkHG&FT-e^K6_X7Ipc`02%iI;8QW{KwJF z@m_MCSBKO7%Oef8N`~aRNM;e|c@ZV@)MxOtr(yV*lqBc5klZ^jMavbXxz#1=jtBt4 z7RDy@QZBUyc?OkpZ|&hXpRv6!LEP$!kHxoAX+RD8>5*ufDm>|v`S~)t0M<5!thJG& z2;C_gv1b@|Absqk%j=Rhdi+xW6wunturV7ZFoOMR*y zN3tGh3dKgM-ckI;%x1`mpgKy`K&W=^GW=JQ+4)kJu!ydsYbg10D!nJldf8!2yz{h- zenpnG`rXK6`?!pLM^=<})b<*m+8p-Os2(ED(jz}~D$;z@rimNXvefE;?8w+mwibyz zN5@|M*J?Aa#gOs|o@KP!R2;iaOti^_SU?cm8|@U zJxO+;3SV*{m21TCzsnH%R;M_?Y^9sNgs1BtiG=RE905#ULDsPvqC0>9Yt)kE+M;c; zAlKMTHS&x`yCENZ>&XqvOjm@FU69L=AU33dj!cbPv7rzoP=hq5$ z!g^!_(#}@fwaBi<4`=k<{)vXx_zv^#DBn^D5DFj1$3Oa(QW_Y&20gpPlQfaga^d=Q zvFtUuj=07u<3H0B$xIv zeuK+LrZ?V6{xwsAC6&f6dRdkMghLkZ=V;J-=3mFklydZ~lj|@Y26gL%z3q6r!;eh3$COjFymOJ!VYDzHpp6u;s;zOWL_o1VQI#e1D(l~OQH{wsFJ&qwcf zm|Nj{JrPL`CA=a_;Ag|3dQPI*KYMj|Oh!nhSMJpIH}|Uv^Ec_@FLON(f?zYUU`I*K z0SOy8s>TI>Ubpn25DfAmv^IKX$ch~l1cCr0cX(&TeVZ}8PHAyp8XdM;ZfQ@? z<+9NwOC#W!!{*n^E@6)+zp87;FD5xS+C_IX;JJj^Z@^Iflo>mBTLv}rhcmnAz&!iH z2eF`Wu@j|_|8@BuRNzDY^vuknh{_>{f{GwBAnVXNj;YF)jC%AjKHT4G9dnl>IjxEoG_ z1cVh2@*ZxDUqsx>NX9+Zo0zZh_s|jpfHh+(fOt605BYZflpz{U-yM&nuqv_L&S)1t zc}EA;!^;Qk-QsY1&fjLxJBmTrZoG7^RI=UU`&ioXiQd)uO^M#q@}WxS+m=)3Vy9kFt`@Dar$u4=<5%Gni;cSy{IW-X zMxNoWTkHCkrJy$RsfoFOSAmMYw26Cs%HkXm56}S&2KKp>9}913^v?GwRQ(rWXB`x0 z(END_7CcyR3+@^S9w1n73GObzT^Dx`E{j8OcX#*Tu8X@YwtKu+cU5=4ySl5Is;TLz z>gV}us^`-^{eAsw72DdXL~KsH?1>)7!KC8_-jnlUUTBzaiTFNJ&sgPBdYhdv^>Eeh z1YG#sh4?YMTG?BTMIH(t%=Q6SR?o^wD8#<>-@1rs?mS4wqBvkzE3siKdM4TG$Dc1G zv%kmNH7&=9rGgZP4gOe@ASzXD4QdKRH$7{3jGLANf}1B^g%scD8@Y%^4-LpkXb*I57lep!`dq@$RdRM9afNSug(i>h;;IJR>@k(K6;$Ch zl|HmqJP)I@)j3GzOp#!3#EjW5D8$q*YevH20Bo>myF&-}Fi>Vq%V3p3yPyhgCp;_j zCvAbB6>tHOF`9YQ?Gj7)fw%0->a7LAK7&wfLg2_L@(^KU_v#empgMYzkia z;2snbz1{hdjJ1tKv|Z-WifCN&&h4|OVG=|e{Pvy91xu7$q0NP^#TrJ?#Nos9uc-Dg z7$;;(S;LpvO4?!VImq>hN;`88#U@T+{5HicI;uE1Y2#$PpUVdep#8PG&9k#bR`H_* zNXvfe-N5^mMM~jJA6godh`$-vjMVf@RO}QsfhH8sm;NvNMWpS?o2bRXc8P(En=miK zPVyrcwjnoWT?dX|fQI(j`M4V}LuHPtacZWIKf6*9vkRX8<^;ysxvuTgw@%CE)Xw2( z-)Fvnz<)OQIq_aG+#LXimKOaJQi-@JG~v1h4bJazi=Ai!zc{^3Cbrx!FNV-w4^^<0 z`qn(^3Or=`qb#j2xw_eh3nD}K#poIy|FvE6qF7lnizTw^-*}BDwtjdqyd0E_vByA5 zO}85wcU#B2!D^;oSm3^Fv8c(mCh^TIbyMohIUy;-ROw7QQA5FPasO2CEK}C3>JhCZ z6d}g7xnNsDWU+eOK&czX_KO}g)EOAGHL#bg_M$MfmpKDqB$Im0xwRGC6m?}=SROgN z8{9iqvoG;NTu`rDP?_J>qwmk?dkQqFT)0_tXTu5}Pn`o&JMb_#=7 zY9}dN*uy}mQvUD`*%w@FjCvpQO_sb1&*KQ``N~X+Pug*{zDB}iS$qHmdyqXS=24v%0YKO?&+51{CPU7Y)_$iWWSnYrVA0T>_aT3 z7)&2iK2n)|c;OI6^6ehLDssu2l*6{p!oKR~0t|~ouX(ZXg593WpCi*ig?KuHMsgQM z>MWCB=XNqsY9gO~cElv5&)009f0dUxZ0YO|lrts5>%>GyIs@kce$>uuBLK%~^LUX< ze81<{yQkyZc~HqTGz!y++cyTYkN;vXcS`wG;2+VWodeHsr=pK?%uC^NYOyMa_svnn ziTq47`LiFOZEoPw8!|g_$xWr$PwTkLqRheU5NPVQ@uAMq_MNNtZexW5iP<%dJZoyZrka zF;=d&S$u=ZXrOdll9(vASNb0)I3~#WSa>BM4W0n<-EPg%wW!ZU?@4#432jF@FVG7b z$_7#6VM4;{{;@Atzaf5bzfdd_hJ*e%{?rx6D|3J@2xdXa!V_%R60>ywCr1PfNfkM{ zFt_On*ZG-I-KVIWatbC|*u`zJFF=P@sb6z%aQm!_5mgEIKYve8%0*fnE3sTlRi zPXG1B-J$YJy+XCZ0{7gV#7n^2#iQ0#-x^)~T4~JH13ZZ~Rv3kJ-SFZCOG>tj6bWH% zA8OVf3?dVtyW%`#_Gsi6e7iKnzUDc(T2$CC+5r1@urQKEsW#tiU22A0?!D=Uxo2D{ zKw&nW`31QKiEkSyMQjNyMXFcfJIfKB~RE_v`1HHZTTYXBf*cNAIOBEsQ)|b zu0i$oV15_(_WuS0L-GG)-3C0||H0h?fd9OdxA&t?w@f2sFiw&#cKZNJJ^Ar2N~e}< z6yD&>p8=T&Aq(vfa-jmP)giiMs`Z=+jpNs8AgIl|3yU~Y_u%%xt zM^mbb{~n<4NPR+wrL>=Jz1+Myq^bV_T?RDqZjHBs)}5z>9@m|xJM9mr{uBXeys~3W z275LpDb>II>dj6fbC0ftsSF?YhjO*(e6%M@ZPNv2qVY{hLJD;G1?PN17$=))di{io zPX8R-sZD9;DpevhQ4^Gi8_oPEin%*3aA9e19-WakdXf@DU(_*YYWWO_l?|1<(4k13 zlJ8;{NS%kMJkex62Z{1H({si2Kkc=6r&MmsiLgUfXQ|L9%dq?$Ee78RU}1wg0pW4%P;-Mtu#fKKz@&{pv}r@k^M68c%&*2 zvl|F8G@dLb7kU97x4l5F4N%TnJ=-)Ua-5dv5wGreY&g#`z05Eg%o>f1+q8H&NcYxx zV14ybo|Pi~pebTd2NVbs!x1UN*|4k28vGrv%9TjE81#N9;#ffSh(RHbjxGfF#BhgJ zc%`U~BBYD*T>k^`86R2~2#sWAoWN4047#fS^VHqT@Je0#olhKRZQ2E;GoG~#aSUoQ zX5X&dt5u~ZdMrMVn|1J&DK9Q=dR`6S*%a6EvADF)gSAQS-s^f5)pf8 zv_2bMRDG^Qf#CnNFZSA<|1*r2_eM5%_kNq0mw6l2j#Ke60S0z|e`}%*c_Xu){?urJ zT4a#_AW-_o9Cumt%F>Dg6u(bZda?ZnAy@TFxK>5LXV_3YuPA;1M9n?U`k`8NGe0U6 zJeM=P@g`N3cs0!$2@N71-d9!HfAs7Rtd_a*;PT}hw;+!lZjfv$}ErKvT`eE~2d?~1dQ=j|dbpLptgAUY*#)vb5&APk> z??S#m{0sT8gVIa)qffM|s+SF(u0W3FE8)Ygw5@F}G6^Mo9}Rj!JUgL93sb6MsI8|N zLTu5;Hp;tV>4IDrZ06z8k3!m*P@BMm)9TW5Wdl;z6KZ~p1zcVPpEw6fgTIs{Xz)aI zd*L*_p;EF$Vq&V|4p!pw{y4AS?~ujjO(psDzX{41u{VT%BY)c|2lWLQ_OLlfcQvVI zoUqp@r>RvlY-92S!x31Jl#D4<>Va67N`+sJ@s{9RQDlK!uOZ6m0KyC3B zG#m8y!pCJ+JJ}RKxuDnl!G-^%>Xa2=d?G?6h@$rx0=diT|9j@_fhc@qA6K|@`1-8~ z*%`=V^nM-y#3LA2Lus63^=MbYxVD%1FNof3M&P_^#!rvD_X1+wkyU<|gi5pZYIk;J zio;e@m`T81$1Hsbp31T2b-)^RirA!XTdHp=Vk%X-WpA-2lRLPjQw_2P;TyR##L1>p? zDB^RVK?d@-j7&>v@Nl?^G))<@AGRY}(GR}fII396BnRx*>2Q-HY7}HY0!Os;;FxWs zPs2(wn#f(Kj%W$+Qdb&S!!y!oF<&4$1C^$)@KB8bdx||e@HAG=&mqMt5Ec}hP^33U z(ue4M0{DYtOke%WK|ygvLf+*uduw}v`oceo3;rbIu|zEePz*l|Lnr|Nj zGYdC?iD$l$BHH>4SI!dhOwA|I!NB-N{SKoc6*$;#2`CD#XNJb8`7rV4w7%FWx(oZ{ zUP@hF$*!w$^;S$njkc?Lbx*3r=md-;m`;|fq1l*gh99Drym^zqt)l$DRyvXNRWOau zT_F6HgOcj;%dVm1{y4CAJ7%$c6l-MPWYt-X`bb<4Fg*WKwI(Mhm}$AkiSMlUS$1tQ z@}l#$wTdCd4GydCX{~5aX{$)NZ{2*m4K1Zf73D#L{fC7Wbe^75oIHEB-fF;1dFAQ| zw~LD9WATk2pZS@jc(yLDdGtmj!tbt+^(gKG?n`2X{YFBjkL#Kd=sr?KLbA_07Ih@f zYxRa&rs9B(mNC|A;~C+Bs2tA$qL+`-`?s~xoY&c86Fe```&7fecI^pbI3cDl@d7zP z=~v-&9@nnNAC5Nda5%psPLgaE;K}Nj1Zq%+ zjb_qgQGe{3l%J^!e{QhwHvZ~HoR+01Swcp>EaLwl`wv2iN%1ZG3um}{?`IdRjDQ*` z5p!-fGNgiy-4!6=fQZU1jqX#j8`YehlI2%v)y%)-_QpIJmf|?KLP|{V0#Sx_+G)NM z-BQD^r`VV`q~&K?u`OWMbW;7-dY9{b=5}q?(_n;IBJV{!iU7iuNJ1#OEk1_cy;OCQ z_W}(8zH*$9tO!^V1UgcbJGrbcgq+aL=P1u_l~i<}abDj{IT3U=d|Yqd7>R24blfVJ zjtCxTCcWMaru15;zYv-3rY^i3SNedDcBF;A(LRVXcZ{WF7soptoxD7#!m7?G&-``h zXWgKRY6Z0v^JHZ5@_-7{1d=uqvdD1kp%%wq9Q&X%&904-A2L$)*UiA*rd5R{IG^Es zH0hG67d^wocZz)xnhCkJtwIZnI$~kWE70s56QP`bAH@O(d5=anGWs)NX zDPUHa9V#&K9x6hB zQT(BWNd`aj+pXtBVTwH4w$W)l&Zl<8=hN67p+g%pj@wK10nHeC)K>m>OtwbV3pmWMB*l~N-pgtz!30!_D@M#Y0(DL=tZv+_1 z?(g8fAhC7P0h2$&cDIaU*^7{*la{j&R^emb>yIIz<`1LK!isa-k@#&`J6>YDOJJsH z3v+7!bl-XD9b5R_t$vO#5j0H?q8i*9s4J`n>(lrN_+jfzu$__(+K$o;+rXK;T)VO0+^DMBi_bM78V zt*ehpf5%&~MB}Qmr0LJjZ-4Id?vGZ~vf3YfZ)!eNc=WkM;THhjLd*AHNr6JY&7_2b zKjSo{Q3MgM?J0U}aKJ7fBD?(=##{rdKx>96mMbl%F|gBjUt+;#S9-sLHZ)Jd1s?W* zw?Ml3!zB4O?%*9yY#zF1dfC)42e9JZWS(BbaE?#HFlpggp8${zPQ-0+_^!r!f9i9h zp`$mJySK3=D*s!wq@y9q#svDynM3rgC}RG^@&QyN7iK%@s(x2LHLpl3D*IKOtZB?V!1G}9 zj1b%rS*hB3&_zIULjd^i*o}8H>D(sPbzISIX6CvZ7dBCzae`Zb*SB9rXVTtz3X6HD zn>>(HW>x_ji&?WrI^Qv~_t=EC>oTxck>*hH^AFx-`MRQW8UjN!s!yC7zs;yKFO+9v zvy?4S{SPDcVI%l7`w5~jIu53iey)Y-S!NY&AfwL)WW#69eISl6$HQ2(-Rhm!ig~ZW z36srgXfu}dCgb%F6D#mtwzXeGCY%+f>c0z5|3vlH^3Zn9>j(z$r_vduB$M?(tUXM8 z;RHe$JB%=989Vfw=F4X19ylm&`Fd>0lVUK6598 z9@4N7pPA19AT4U~{ZL%EP|&zTBMFsqjk}0>;2Zsh(@pp*8{~eoJnCKI z7%|{(nm9QXEXqiU?~vCgKm z2%ZG;68=3sYdGg)OCAN(Hqj35$YCV zXOJm+6M!740)B^WM5b)GXI6vtnBc0x$0NYUJmC0)x%4V;_}Z+N6-ed=`w~k8(ME=o zg-*u3uh~6%g$gyguUHnFZyBq(Sj|ufzEJGJxK?n%nvH`8))j( z9$MG+cOMKnSow_`8=kIifmpuOs7bq0nfq`nMK)xEuG)R_euEHw=E*}xoHZ>*=3wf%*+URtF{+y_L45G zT)5B-hTBcRqBf{4_2h*gQ*)Z3)S++2?;8Mz-FaD1H9wTHh;W-ZWLAY(mxi~mH zH?RZVwmi#6)c#>G85GX$evIP^{xSV^x-l=~2x%(8SN!ehx#wT*FxfF2;J0DEchv89 zP>(;sg!Skg+>PTukosR--yCFBtz{wS-^+Ti1P2)hPb z`EzqJ{TtiB_1?OeKx>f7@1~UW`l!h!V`sn7!v>7K&;9D1ts0psgg2HXT^CEt_cEC2 z+>wS(N@mgV4iPo1{naZ{7E15__5Bi#zm=+PK(1@5PZQhUE+mb{J%a3v-A-XGjciiW zyh^|AS9b^^?9CfI7#Q@vX_R885M{2GKA!qpPO1vyJ~bG?24I6KM#{-DX5pojkq()z zm-b#RZ2!Ww*z&CRb~|ggbK8nz>84}^AOB5cUFqt(z`dJg18GgM6$YLOfOAx`d><96 zFJm^)9Gr90&DS$bU3}zL9l1cPfk;}ly%+u`GfX{`=6kT% zc1t@hq<{e`%WodGo`0t1y>Wqg4oPBMoh0mk`aYms7CR7zV5$=2Um>G3D}fbpyX1^8 zL+n++WFZ#xBt>a+2m4YI1c~g;Fi^8+edvDBWt(ziM`V2%#-9^UY<5ZVvw! zj=!4mL6n?xPTNFj8)c-Z{{!U=8gz7_Kd>0l$>uLb&6LjCemSPc(gL^MV9ST@nHk(r z47@8_0M7Bch5;xHgBbosaklbE3kQ)0AnyB)cI3Y0<|84cB{1BknqXj0%Q!IR(e>eG@&SllQk++^Vy>$&RTggK$%KJ>_Cc^p<9p2KK~`D)X>9Ai;r=N zDiD@cKwjw7{w=r52K-D<3>&%f69o6B;`P5s=$R1>+k}3CfiZn2?bQF1wA&h)7}z@- zc(DDiU1=R0Ojxb$tlmxMI`$5#8gAW+UQK4~6yf#vh+!zkJk$i^uY_e4S!z7R$sFvP z6hxuaFVv=l#HLz}z)>ns$vR4o6?Ro5`T*un^YR469*QD zT4|;_+Loz2raXBO1_03J%RZe+P4gP&+qQsUj`JnoJ8=IGb-$(Nc)jF>0y%h4r*Q=b zJ&HMto9ffgw6;+o=d%qXW9V2sWlvc(@QMjOX~oCL;^aFWu70C3%ul8Ma*a~XRP=|1 z0=wzw*_myLgq;@iyEobqMhcyQ#NFI_S5ed^H4ITRN+4&9~A18Wa)s;j?)#K;@$6q`1c5i1W8u6Q^TIpohuQWo2X6O}_njNV<3 z0JX#<8Tn$P!y9Ngeo<&h!Yv1CTuLCscnX1rOQ;qyp}j6s0>U3Ldx((M@Er za!*`oAKC`<*o53=`P^d;RA*Ck`*NPBd{q)|r?C(h$V`o$N2|vRA*|~8PN;7}>2@OA z#dHPDL-?!}TKYlfDLlAS%E1Rye3^TWEUNX(9A^Krs&qgVYrt8Y?62rkGJkCAnXu4W_=WMHk=qg_RAHRceS&9VbI0XPnTH^}?u0!PFKGSbJ4W5) z3L^Nk#k8-vsk^TjnC(q~5YAr0VWck5qN3V?p`vN&j@2oau|gujXVy6X^a1V_z#s?BoEkp0#!#_fikQH6-pvKCnYu z33~?P*H#3Ns~zifaVF+*UPE*E#9wB(6pjAmWYT=dJJ{e#9mUh&a>8ou0Ayhxvmg%G9WW&}5Pu zQ4o*cS}$Ny!#`&j?8&zj1%aK}ggb`=bgPhtGcFj%+Q1Dd8ok=CHLpY8CN;~`N1tLK zkU2{VZ6eYHjon^BoZE+&7mIA<9~RkIH-{kh&B$v#1y9&I&p|!OBt7#LKlAa*j}FhU z!l9nwgr7_M<-d4LA9`{e#@6Za^>{=X~`ik7b zYG9S1I1G?&jdl3QIEOrI;W-2@_@msnLi0N;%L-d~r&%O^d*>A0ioc*|1bW!yeXBQ# z&bbsm<6ps*UuV(o8;O3h~7PAUy4- zxfZbEt4vl0J$UI%#HAkI%4`#$8g^Pis9t}+)O=1a3M8Xg%Ysm72PbFIYU{C<%(WIj z#jg;W&u``3nhh~^Z9f}tNc#*q^gd<)OpD{pg*o+f@)zrrW;+Y%j+I|~dk;7qmEB-5Y( zuA?Z=_A^gGk&Q=1$=)sjC*0$gg60a$Ndxg=+nIZu9;_|T{tD(D0J3u}Pj=4mCIcBp zaN5oCu!bGti)PO{K~)H*`x=js+h>=o)3d?p=xvg$OYe?GfiAxd3jGXmclg&t98YiU zQa+Fh`pWmNFK=+EhC#%wJo`Koe5p1)f7s))>~`F`-4@s}Cz*zqcdeIkPE3Gjm{kq$ zB;^h36n^wXXKFcC(SX-2>qWNT6u%`}SJkm#B{-||nH5;?41fm${5D25p;e+U;x;&d zhlTQ_tu431$1~sk)6)B^J=YtSr^~Q?HqcW!$f7gUTJunWk~f{8{%?I6MBe zL;xc=lb>rn8Hs~QW`vG3eu%Ro@;eW?yA8e|9{+jMIm2|q-7;_#@ebsB0cPKjlJPE6 zk+Id-yL8o_la6w!0ws{pL5hM#>TN)u8qCu(fnl{swhA3Kry7u~K8PYkhVAH%8w`*Eg}fZHZ}5iWjd8SC zv~-%T(R)v3KN2Qg(of?Zw#oyPl1~yKPZeh zD}nKJUU$Hf0NiinXW5yO=Ui;xP~oYdzRPpNaBKJ?qP)J*$dV7e(T+0t`|dyEQg3DT_97azCR0km8@{z=EZ;o5TZ0!T7nE$#D;!I zfWSWk-k^L4(Kd)*PYHk?UDo~WQY*8W!vKIRoP0vHocci*#=~ED202uh_y`SNoF?4; z-+0~=-*?Q>n@jV-UP`IX#!NhfupgZguJ5#>{<5?lN_X;aAO!+PLuudr{28MA|-Zi$&U-4W!x ztScy7S`Y^|F1NPT>lncF?O*R^Eq4b1B_!gn;Ga3 zMMw0pTtyBd?G5Uf#{^ufDTLkdvh&vo)HF?|4usDtXpUk*Uln5Izv7JinSr|>s_T2S zO^|w|j8mPI@KjqTz38rWX0VL)Iq{2mA@H3M>l?nnH&Xqp5JdJS;Z^ub9!j+Z9(35h z=q8SxfQ&i>0CIBOzx(N9Mm~!C!;ng6*b>L{8b(svdBnNm-MLfPKsoAP_KR-B&jR^j zj+TACeQF(Q&;Q9WkFn_l=uRCPdwmloiaP6@=$o2`d*~W`arKUKY(ZETt9t4kFxs`6k?&`VKRP$a5{7XHC;z6^T`qhzf)@e=xtkpcV^m+|ZW+pN%^#TFLKHM%nz1WIyMay{#ds zVMi3{E629QwqTZTv3a$EmEP5!tc1v`v&gcwy8Bb`Yb&4>x;_iX*_&UiP_GI_3of(! zLT(DPB0p^QZwtY;43Bz`M+QE2n7x(#{?K7MkA77QtEezjY*qt+J=BFmixC19&B3YO z@aSp`3|L=Dv7A1mZ!g(r(>;yfo-*hDGuDE7S~rk-LZiWnrrkzbPzgvEk9N~OtMj{% z)&UV%WdGr#Pytn)F4_2V1vYqw^iEFJFR8x@2K-3TplyE{Cz9RP{d=pSgBJ-;hp%K`%UO1_t~akZuAe3V?H+lPY8L~|#jNwf0-xtyjV*&#g`7WtGKO=g+iNV9JN zyXlh}yg)JG&> z#}rqOg~BtFZxKnzB5h%K#dpZ~WrG+#8E|YGX*yooof@OiJ3YM<0!+TEuNbc~NSnt! zu1I$LSE5LeNH{1e5~LVTvBuxPukM+|?QZgRFliWbOU&S-|M}DU(A7nn~|?@Iav)YyW(gl3WSG%G&fxgf!H?=~hF4DZn{a2M=S)8u$v*Y}+R zyzPW?s;PKdz+tSnHlIF$$vbqXDINxNL_=bqIBLVF6nMM7xAO~%w>g?Kl#_`5|6E>icWiymF;yB z(B)2`ZI>VSM9#$+dtRkhO@lUFx{#C^wfxh8o9lgClo%Em0`lP0Y|(t^^uc zG|a^_CdAh_wG90)y5N7jf0D($%T@MB!@$t~|2W2b&EWqa8G=R*xMnHU-n8iv!R+5> zS|S{G0|S518m17XZ_8tM{Nx#t2&XwMj$=Kn=w1 zo;_rwLWd6~)_$#x+TBOk3Y~ow zwoDLszd&q#p`(#)s_Jf>DO2N`G)_Yh586E#V4D86wccX(QY@eBUa4KXI=^^mpx0*X zU4uo3?(+0we#X-&-(t2>WOUTmvg0n5?E=LAUH@XKwj0$jn^ayHK7;()nMhgt(H zA64~hf@Si{)pTM~CzfAclc+nnr3J@Y4JH<|d6TM?)ZdK&r+GY-rI%DTgIX_ywn!to zQJ27C1gZ`7?k${MZOwEFg<_k|6g$;-u4<{JoZ!^$BHR3b4rsG{Q=}A=erR-+@2>KS zHUDZ6xTtX&M%RND&~nN!ugter*gwoeZ|+S3$PDdnLSD+ad361n5qolq6Ufi6TnNmd z*VxLrDkWDWQ8B^s{#TE4`8Smn)v#T+P?&;TpLMjFEj3G=zMsxr_NK~*K^^%M4p-Se z^Lf`u^5H*VtQc-+WDo zZV0`V`oyz@VBC&eC6MS|?GwBKt)}um)^C-H2e3SB?R2UQ2EXFf>~xMhTzr_4zv06I zrR=VU!P~>7FP=yGxw!|0~eat25?=%>?X2=p5w6gt3 z-qQ%^ZM=>Bt8{jUGDsBDLI_fJzbdEp{$X>a|F!3Mi7#JEzl3)@bK9c!OLnwN80joR zfx=~=a?BPs0_fBc;z=dqrTnAL+X$@#!V&&M6qF4z{f4wmGM6vZqk~A15&G>`i*l2f|$ZylZOLHf7KWw^)9oCuj;Skup3Act)Mn9JuS#&<9Bx( zuIF6D4ZYQQ1PL1yw@h*lA^EZ8ysm7xbT!YfxRM1nF{VKqO}-02BVlZ%?Jw{w$xvMU zxDAkMH(cZ0*(#N@W{*2JBDGF7y~#YAD5^D-A(SgQ?pmqcQzG_>*+SiB)W68-RFWloLK8}5y|=bb02FI5-HVU~&-n5Dy2T?H5hq^btpwD#AX^&P*s zTj8b;ibm2LBts($Is*+QA%SSgQU`HLbd`UjaF)9}Ngk7KQ}!e}crVDOU1UuEaqhYV zZLbD3jg4g`aSE6Ad^7mc>8slLT0_HtC@H+);0|!t{qh>tk^ZOsLyp?|-Up++=X06X z4+MIt^PF{vlZtmXXEW_X=;AgV>>ZK;vtPxpAQ{Tv#=+U70^)6Ee7}EB6V6rMGRNfb z<8T-$5PCnznVwPThh2H$Rp;a+piWoC@4(5hlISQS+`5gxRWH?%xR~lDw$Ex{Y^Frr zK91;*e>~)L!2I5XR;&H=IT(rE4gK%*r#Ms${|!)_tRBcshO=WDJXpqs+e&o1^c=zr z7=)lW`gsdpC?*IfaJ`NgO;{Nh8&9|JJ_lZE2ozMgP>ppgn)wS)q zPG+&uKMb9QGn|B$?lK(*y2OVcI77I!kXE1sy(D?ZhIUlXUmb*!5-~pUgw*#0ztqoZ z|K>d;zqDzbD1SciE%n?!>K{XeB#i z5ZoK8$pP#7utieX*o)Bshvjqj_@qxq*@W#H_S1oBX7ertb6;!?mQcNURLlRK;Q37z zM$g7Nyrh$29GA(tU(jA6L?=|Xk#hpd+ZvyJt6M>J=m`r#Mc@hJZ}`=V4*l+x+4GIx z@k50RhEiydwtmMBta@htZ)&QsNBFABK`x5;=nKD*&f?8pO&M2zGNzJBBxM6;%qK0o z&8jt(aS>i0f?H965Q zs0RphVa@H7flieNw??+CBz>)BwNf*onqg8WBFR}MX{gEu1eZT1sC;ES;Y|qVV?^mB zeRX;1X2|Y9=>zq02?fJ~%+P1M($nIfrKdom($ik~L|G0@k+;~ZnHCB`bzyqJAkSRP zx4Pk?@0fj@eZM|di@hKDlONYc?XiaH83glBr;C)(=_`gCiFC_*zw*Z7+`D0B^*yP6 z>rPr277F!hm!fxL5aXya6Y#21wSWA#Eo4nkHlW$L@#nymK}$baWD!hwat=f&U^VNd zuj)KLYW3@s_s;cN+lqVl6!mqQdSOjy^!~wsUc2-B5}+{*2tKjR;#GcMTpn`&F`$eg zenP5sHwO5hn52HO8}ciat<|h;Zcm~?dGMqT>xRNmpFhfsxS+p(g^n_4mttYFVWcCsdLhJ+mU}Qo#A@x25~%{`9bR*Y;fYC`YS=harcS)R+eQkJQLk{ z>$=r77Pb$6Tyx3;eQz&o$I?QT#pP>^tcF_PztpBatvwfxYX-G-PQ7 zH}p{OnPIU{J*uW(-C)DINfDn{ljJJ>3aO`<0cFKNdGL5=l7p{2O`9A~ejW%!{YDO- zaAFYJK8WaHKy_iP%bO>RTElCSbLtUv$80)$OTPMj8esVc%`R-~59tWmZ*)i6u>foH zXqw1h<>{vbj3eN9Pyny1AFexrqPjs?Gu6~IpF++af_nLyDv%~|*W~0jc+X#b%e&<7 z`Egru6X>y67pS{s!JNrRPVLl@egduciY@Uv@@kB)O#zmX<*%*~P#ycuxHR4lq~G+tzy36YMz(%kns7p!aU;Q zaCMAcMmFePlPpfI3KWEfr-)BF-}?mEgk~8%XRQ3OrZ)GkE3rberB3!#inWxK8+$u) zJ|5cgVP$z91kFue`c~oQo_#rdp^u^r;|Tr7UnALjE&N$A-(wLmkKCJUHF?(-kSHRx z@{;RycHROJtg@HYZ^qs-KJP@05^$6HCnww1I>j?c{qfU#Go-7pX3>T{F>A6%m{@;& zF1`^e#?+TJ+Vm4;2;&)jBUUe0os@KqReM9FVwSmhjILq+1uzZ9Yh#<=cyB2X+j=os z+9ufNKiD3@M96b8O3GVsu zLT>YiXDUJEb}aZ(!CM+;@YHf0I=OVpZlh+w^F|F14O*=Z+a%#<#6iDX|Kp+5fP(^IF7Zs$9u#ehjPtA+;C*6nU; zh-o8N(Y`Krv~m18t)FDo(Q}PstCX_c&6VlsAMGFa(W`gBmsW@n1ez?oF~{e#J@0AD%9F3<9M3 zpTpjpv>97Ot{Jg^`t=FJ3u`$3^7V)RFH z2{1C8+=<6m*sVZ*d=c3m34NG93;y;cP^@@=d#NY+IO^?7EQoN>>tDtB?;pBmW3Hq> zbRGK!D-vJL78h@!P@DyLaJ^}uyt<;iR>IH*NlX%o%}uXOJ~5ois&11P_Lwm^n4!G( z<9e8&yjr51DFzU$Zf7$%P$T&9BluAgns?`vZ0*i_pXpq+;WfB#NqB68Ep>1_tOFPttTfpYF)zQaip~=chc~aYLH@|&74p7k}G>1ylrmZ zD(?fdW-IK`5XCb4x*Vh|)xoPD&b@=GY1mOS7Ms31xLI5OH^R;`rjjVi);NuKV6 zE{(gpTjTEDxO?N)xHsgvVYV`Dz#VE{?@q_fLAuQ zxk!jve>w&i9_pO#djKXaB6R=x8Rsw!uh$7)x5%` zsQgGDMy)vfvDN-(IuHyI5V`qGtGK_Ap_sW7G$CBbgrPZMLAyhAvi^Zp10P{WakHGb z`Geie@1?1ALVr;*OtfY}ME`vVwsuCMYU<0HqbB*kS#$n_`S_oLmY$!Inr2$h7Jt6} z+{!IkVX!bnqyl2_Ic15-uSj6ba6E}jB@Wv{^K3QtNy*7G;&fDyYs+8+8cCT3Of4Ut_>bicF z+Z|uI(bNAC9{rUdJ-?-g{o%@<%#s#H1*wRcYe_yVdckM`-igUn+93LsZJ8wdp(PJG z^(2Qpbgj68af@-~512t8PRS@t`%^AeWgSyGfBab4lA4$|v1(GJV2Oq`dQjqY1tp$qdIyZ%S&lk*Kofu6Z8qWsKPyR`d!@#89IF8JJ5< z#e5*qe7rJPI9qDTHLN0!Y7HS`Pj4&LQ&ISpKuRo|zmFUdP||Is_tx~aPam+-hqWnp zZnydy%zF&oRxoSjn2Tj9{(i0TPpimT8=tE8pbi`aE`~n7Wje>*68`O9vb4zWXU)|? zLB6klS?Mn72sCO!tBu3EeB4OPq2+3+Qv#PQF^1O-zVI~$^txNs)qq$r$_EJPla^RMgN`X`M=8oi; z(Qb6goucz7LjF2#&_$^Ug!-RFn~ zG6VP7h+}EW3t7(F%+8WdszO_ZuQhqUk!{SmTtXK)WRBm>VQI^ba*-h@i%hKkNeeo3 z=XqfdluA3n<9OCS+%a9`(i(m1=6se<4uS5pvpCI*)6Du4R#Ze#ajMC(abyg!^AMXj&#L(M46i7aD zR2MZ5mo=tmc_0xVRC)mXn^4hXBuF~h*TkNiFG0J-m$HZXc<->XkOSv@%c_R6BFlJB z;{_Pma|mXd_cs%ZSUQ8sP#zd8y#*)-v$p*~!Ci9b8QH-``L-FqqvBAbb{GfloZeLX z2QG=Qrk_^7LuEuq8ga*@+Y6b^r8ulncCPxm^ungLYQ%XW+s>h`qrjGD zRK6q7DXXdcr8BH^MUzAqZ9pt&c7izhr@j6CtM9u0!l=;42|b2{Iq>fz+hvmsUemO~%Ai9bRFj zyDBgQ_eMa0xL7d8g>#!pWY#k+#)QR9@e)ripAaTS4zK1;);?lMMKK8*3m8QM5>YHU zo~>dcmE6K5G>uA;d_P&i$}ymG=p@8Vil61?imUJi^Txt9jdGzLv&|V!%9fa!6ASYj!OtXgR=Aad=P}F00 zVq+^TwNB=_v52)>FOOB#{;nAF;l+qz%%ta|J%}~G*Hwa$Bp5C}+NXY?=s*!`sUF~6 zz0?VSfSmaKia2n(DV+G&W_omv!1V-o|40Hyj8XvA3mc^ZC2}d^n*4Z#K1UD1#o#gn z_=8yn|=u#*p{gFwvIF3EF=ddXS6#zh9_dt<8$E7hA7QZ1nj#$qa zIHVeWWgIRzHU7nMvS+DO)?h5)-m^`%+_2w*=dtDh3K#S|v&i*7Riigm_MoP0nKvlA ziWAP0utWns2u-*|{=NTJC?oU|w+(4*Hw=P=M9}rL68-%zBgEcJ&~BcZdSrPRd>%aLu(e(j+uvT0A_dYAD1l#i$vi9+wzkjEj;9JukDcCj(TOOaN7C4IU8!J zE&q9BOmFAz#IWF*8loLt{)zEn`f;x3F!oHB4FBZGl_P7}<=QruEaz7H;&e;5xcGzQ zxX^ZIo~i?UcRf+lTjP=NGvqc7s6OHnM3h1PIn@IV9(kkMZ}f-WvIolmJgoz--^H#D zj7^DW%6O^xyqP~`gWpkGGv=xvlog6F$E%Al`^`|pSTk{gvN(eyxm^kTa+^JEX>z%Y zueLoio`B6>{Nz>e>`%jsBSwPUctcqcZn=&-)tEZkaV184+?x5H^GT!0s2}sISji#J zKi)NL^AgJ=9Cdf8U-MBIz}rtz41bUoo%Zh@#nZTR`21UC{wEU8t}|Hobh5-2mVz3c z88iM!-#PjwF0>de^@3_j_cTEOXgw;QRQUSUOPd(jhapxMz!{IoeJVdaHH=~Gm8 z?u|pjUJ`}-W6Z=>Wt@l_{^zu1a>Tpy{Ci1?VIs15RwrXQQJQY_%flu`RHClkyMEEF z+>+^w7;iOqweYN<%v(vkp~zq5^>On9Em!bBGJ-vJhkc;)jkM7W+yzhEJ9M3M<;EAm zy$0f>KnA({H{s3+FLAipoLH>CQ2jyQ!J2H4&iD{_+aIPjJhNI@9r8DuAQ*_X4`>$Z z;2jz5Gf^w8Q(^TTO*tS~Yo-hN7bEBqPo`R$NJ*%^~!{hC0& z9R<2%Ba1O5;jqfAjdQzM^$oa^f^6189dg^$tYK7~@WKN_*5=Y0ex4Up7Qn|1d0a&< z5RgJA@{G8-X=F&mqG!!E2BfS02vTZ{8}V zs^CNJ8lgMJ^NBAHdr0Z^NCcnD#U?Tx)wlaYYPW6zZWkli(3Cpo?7Gk4dOs+G10$xO zWAHek_=(WkzSHjrLl|>T_0aX3xBky(SU)5FAr?q>(PhWX3WmIEpbvkNl2zs1BsD~K z7KHnjn^JDI6!P26`GhGPPE@9L7kDs80Uii@6AM)3TVpae6-n%Y1Xl z>lJ*JDHaNcXKtMnyIEBWny6F?*#s-2LmCra3-`$RmLq3`Jy$#?xY#DZb%zxL;;hVO zWYUp!G2z{x=D`#grp0SdoAXnB0PNC*ij~OH09mv=v^h)eoV+0ufGOIX!fqp~-w8BK zp^)&M6R99SiQi9Dfm3G)#n+w7gZNX?#`N1x9%-Gk=?{L)w^wp2+1Yngs}0J=aE8by z99I;B_@OjFpL=K^a*?j6jHi((0l7U?(pp@NrSS6-forkb+qW$W!(kH%v^mxSveyZ= z{MR+|qi*a~!r80jD>+$9E0X!#t>uksJK~(ONX~B;gxT;t9U;h(Cf5Qc0|P1)>i^@S zq@MfSx(g8KQj<>o|JNrGMP5LF#6P{<43-?}>q(sizH8lk3(KQ}?1W~_jSBd*6byQv zI&GgSqfcPr$l-+@-&J`>PcNsC6`amdtd8^X^lPg5ZpAA=vBR3?&$Gw8G_V=mZ_X&_ zHsn+rMy}^EU^eirBqGm1u_X#{T?;K|h=HFy{09)Y(f5)Go-U6C5F%;yfHBp^gv=XQ zg@+V`0rEmx1Pre#B6?Dpb=&m1^9@JrTe5NjevSSHsl(_&v~CB+Zw;+7A-4K*n)XBv zlEn9{wx(^?zUx0b9z3?Y zfYsJs<6D;pL9`DSH2z<~rLv|s5NLX4!9?tR@mV|0Xcz2#Zj_!qaLAcEWR!nCx**<5 z{0Px{5@(F}TF$)s-?hMVeQq`<20c8YexIjog|EEJ`F@)J$aUE93cTmeY4XVir5{WS z*lVVCQdHq2=r=AzGp{i@yQk#H+tCqF{;o)fv>KB#b0 z3?9)ueo~m0bJKahlGbS?M3}JivQ+8W&}~9}NM)i5c1UHEbx(nb^NrYCFIKm6|8YuL-Aox|aH*nC zSE=3u*M)Dz*ke$sI)rIOU0YI9k$LB*=A+-#=^aN)_06wQB&P!pH+!|xKW{}{wff5A ziq3di28B}pveu=eGA4{^J6~V>WVO-$Z9XYU$WlSEShJd?snRc%7QMo4B{-6&i?Mdb zaNm6;Lu%AmUf!8Qb>X_kNwb3Tx6Wz#9LVQeFS>q(j$*zLva@VlV#6oYf0sjk4MA-d ze>r^qg9-LUGy(e>L~>#JA19T*v^lXl4tJb$wmWNe`EE zXr`g~maH!LnqV_>o-%hljN^Xs1I`%yF8ACDNol-9TI2GJ#aJUEROvIWCW+*007}KW z!?Vh|vzy&(`5nw60|YG2!X$LPg~q}*W%#eY?`aH}+a?np%j4OsmC+6Nrj*z?4p`lD z=!)=Lu5|Mp{nF*q8IuldkfF>W{R_ImOB}kvXFk8Yp>0hhb$6)1sM@ @v>QJza{i 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�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 diff --git a/src/maple_loader/dist/maple_loader.jar b/src/maple_loader/dist/maple_loader.jar deleted file mode 100644 index e1f9965c1ff0fe14384717ea4559c7f59e9a1ca6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32791 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 VEwG5^!#_X%TL6{zhrDw%{eMvMy}$qf diff --git a/src/maple_loader/jars/jssc.jar b/src/maple_loader/jars/jssc.jar deleted file mode 100644 index eb74f154a01c8c16712233cca36b65120ea47986..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152418 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 @v>QJza{i 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�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 diff --git a/src/maple_loader/manifest.mf b/src/maple_loader/manifest.mf deleted file mode 100644 index 328e8e5bc..000000000 --- a/src/maple_loader/manifest.mf +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -X-COMMENT: Main-Class will be added automatically by build - diff --git a/src/maple_loader/nbproject/build-impl.xml b/src/maple_loader/nbproject/build-impl.xml deleted file mode 100644 index a66f34964..000000000 --- a/src/maple_loader/nbproject/build-impl.xml +++ /dev/null @@ -1,1413 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set src.dir - Must set test.src.dir - Must set build.dir - Must set dist.dir - Must set build.classes.dir - Must set dist.javadoc.dir - Must set build.test.classes.dir - Must set build.test.results.dir - Must set build.classes.excludes - Must set dist.jar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set javac.includes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No tests executed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set JVM to use for profiling in profiler.info.jvm - Must set profiler agent JVM arguments in profiler.info.jvmargs.agent - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select some files in the IDE or set javac.includes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - To run this application from the command line without Ant, try: - - java -jar "${dist.jar.resolved}" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set run.class - - - - Must select one file in the IDE or set run.class - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set debug.class - - - - - Must select one file in the IDE or set debug.class - - - - - Must set fix.includes - - - - - - - - - - This target only works when run from inside the NetBeans IDE. - - - - - - - - - Must select one file in the IDE or set profile.class - This target only works when run from inside the NetBeans IDE. - - - - - - - - - This target only works when run from inside the NetBeans IDE. - - - - - - - - - - - - - This target only works when run from inside the NetBeans IDE. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set run.class - - - - - - Must select some files in the IDE or set test.includes - - - - - Must select one file in the IDE or set run.class - - - - - Must select one file in the IDE or set applet.url - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select some files in the IDE or set javac.includes - - - - - - - - - - - - - - - - - - - - Some tests failed; see details above. - - - - - - - - - Must select some files in the IDE or set test.includes - - - - Some tests failed; see details above. - - - - Must select some files in the IDE or set test.class - Must select some method in the IDE or set test.method - - - - Some tests failed; see details above. - - - - - Must select one file in the IDE or set test.class - - - - Must select one file in the IDE or set test.class - Must select some method in the IDE or set test.method - - - - - - - - - - - - - - Must select one file in the IDE or set applet.url - - - - - - - - - Must select one file in the IDE or set applet.url - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/maple_loader/nbproject/genfiles.properties b/src/maple_loader/nbproject/genfiles.properties deleted file mode 100644 index c13672132..000000000 --- a/src/maple_loader/nbproject/genfiles.properties +++ /dev/null @@ -1,8 +0,0 @@ -build.xml.data.CRC32=2e6a03ba -build.xml.script.CRC32=4676ee6b -build.xml.stylesheet.CRC32=8064a381@1.75.2.48 -# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. -# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=2e6a03ba -nbproject/build-impl.xml.script.CRC32=392b3f79 -nbproject/build-impl.xml.stylesheet.CRC32=876e7a8f@1.75.2.48 diff --git a/src/maple_loader/nbproject/private/config.properties b/src/maple_loader/nbproject/private/config.properties deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/maple_loader/nbproject/private/private.properties b/src/maple_loader/nbproject/private/private.properties deleted file mode 100644 index e5c9f10c4..000000000 --- a/src/maple_loader/nbproject/private/private.properties +++ /dev/null @@ -1,6 +0,0 @@ -compile.on.save=true -do.depend=false -do.jar=true -javac.debug=true -javadoc.preview=true -user.properties.file=C:\\Users\\rclark\\AppData\\Roaming\\NetBeans\\8.0.2\\build.properties diff --git a/src/maple_loader/nbproject/private/private.xml b/src/maple_loader/nbproject/private/private.xml deleted file mode 100644 index a1bbd60c9..000000000 --- a/src/maple_loader/nbproject/private/private.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - file:/C:/Users/rclark/Desktop/maple-asp-master/installer/maple_loader/src/CliTemplate/CliMain.java - file:/C:/Users/rclark/Desktop/maple-asp-master/installer/maple_loader/src/CliTemplate/DFUUploader.java - - - diff --git a/src/maple_loader/nbproject/project.properties b/src/maple_loader/nbproject/project.properties deleted file mode 100644 index 7f48d719f..000000000 --- a/src/maple_loader/nbproject/project.properties +++ /dev/null @@ -1,79 +0,0 @@ -annotation.processing.enabled=true -annotation.processing.enabled.in.editor=false -annotation.processing.processors.list= -annotation.processing.run.all.processors=true -annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output -application.title=maple_loader -application.vendor=bob -build.classes.dir=${build.dir}/classes -build.classes.excludes=**/*.java,**/*.form -# This directory is removed when the project is cleaned: -build.dir=build -build.generated.dir=${build.dir}/generated -build.generated.sources.dir=${build.dir}/generated-sources -# Only compile against the classpath explicitly listed here: -build.sysclasspath=ignore -build.test.classes.dir=${build.dir}/test/classes -build.test.results.dir=${build.dir}/test/results -# Uncomment to specify the preferred debugger connection transport: -#debug.transport=dt_socket -debug.classpath=\ - ${run.classpath} -debug.test.classpath=\ - ${run.test.classpath} -# Files in build.classes.dir which should be excluded from distribution jar -dist.archive.excludes= -# This directory is removed when the project is cleaned: -dist.dir=dist -dist.jar=${dist.dir}/maple_loader.jar -dist.javadoc.dir=${dist.dir}/javadoc -endorsed.classpath= -excludes= -file.reference.jssc.jar=dist/lib/jssc.jar -file.reference.jssc.jar-1=jars/jssc.jar -includes=** -jar.compress=false -javac.classpath=\ - ${file.reference.jssc.jar}:\ - ${file.reference.jssc.jar-1} -# Space-separated list of extra javac options -javac.compilerargs= -javac.deprecation=false -javac.processorpath=\ - ${javac.classpath} -javac.source=1.7 -javac.target=1.7 -javac.test.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir} -javac.test.processorpath=\ - ${javac.test.classpath} -javadoc.additionalparam= -javadoc.author=false -javadoc.encoding=${source.encoding} -javadoc.noindex=false -javadoc.nonavbar=false -javadoc.notree=false -javadoc.private=false -javadoc.splitindex=true -javadoc.use=true -javadoc.version=false -javadoc.windowtitle= -main.class=CliTemplate.CliMain -manifest.file=manifest.mf -meta.inf.dir=${src.dir}/META-INF -mkdist.disabled=false -platform.active=default_platform -run.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir} -# Space-separated list of JVM arguments used when running the project. -# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. -# To set system properties for unit tests define test-sys-prop.name=value: -run.jvmargs= -run.test.classpath=\ - ${javac.test.classpath}:\ - ${build.test.classes.dir} -source.encoding=UTF-8 -src.dir=src -test.src.dir=test diff --git a/src/maple_loader/nbproject/project.xml b/src/maple_loader/nbproject/project.xml deleted file mode 100644 index 92218a925..000000000 --- a/src/maple_loader/nbproject/project.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - org.netbeans.modules.java.j2seproject - - - maple_loader - - - - - - - - - diff --git a/src/maple_loader/src/CliTemplate/CliMain.java b/src/maple_loader/src/CliTemplate/CliMain.java deleted file mode 100644 index c7dc9f098..000000000 --- a/src/maple_loader/src/CliTemplate/CliMain.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package CliTemplate; - -import java.io.IOException; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import processing.app.Preferences; - -//import processing.app.I18n; -import processing.app.helpers.ProcessUtils; - -/** - * - * @author cousinr - */ -public class CliMain { - - - /** - * @param args the command line arguments - */ - public static void main(String[] args) { - - String comPort = args[0]; // - String altIf = args[1]; // - String usbID = args[2]; // "1EAF:0003"; - String binFile = args[3]; // bin file - - System.out.println("maple_loader v0.1"); - - Preferences.set ("serial.port",comPort); - Preferences.set ("serial.parity","N"); - Preferences.setInteger ("serial.databits", 8); - Preferences.setInteger ("serial.debug_rate",9600); - Preferences.setInteger ("serial.stopbits",1); - - Preferences.setInteger ("programDelay",1200); - - Preferences.set ("upload.usbID", usbID); - Preferences.set ("upload.altID", altIf); - Preferences.setBoolean ("upload.auto_reset", true); - Preferences.setBoolean ("upload.verbose", false); - - // - DFUUploader dfuUploader = new DFUUploader(); - try { - //dfuUploader.uploadViaDFU(binFile); - dfuUploader.uploadViaDFU(binFile); - } catch (Exception e) - { - System.err.print (MessageFormat.format("an error occurred! {0}\n", e.getMessage())); - } - } -} diff --git a/src/maple_loader/src/CliTemplate/DFUUploader.java b/src/maple_loader/src/CliTemplate/DFUUploader.java deleted file mode 100644 index 3dee0b4b7..000000000 --- a/src/maple_loader/src/CliTemplate/DFUUploader.java +++ /dev/null @@ -1,345 +0,0 @@ -/* - DFUUploader - uploader implementation using DFU - - Copyright (c) 2010 - Andrew Meyer - - 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 2 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, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ - -package CliTemplate; - -import java.io.BufferedReader; -import java.io.File; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import processing.app.Preferences; -import processing.app.Serial; -import processing.app.debug.MessageConsumer; -import processing.app.debug.MessageSiphon; -import processing.app.debug.RunnerException; - -/** - * - * @author bob - */ -public class DFUUploader implements MessageConsumer { - - boolean firstErrorFound; - boolean secondErrorFound; - // part of the PdeMessageConsumer interface - boolean notFoundError; - boolean verbose; - RunnerException exception; - - static final String SUPER_BADNESS = - "Compiler error!"; - - public boolean uploadUsingPreferences(String binPath, boolean verbose) - throws RunnerException { - - this.verbose = verbose; - - return uploadViaDFU(binPath); - } - - // works with old and new versions of dfu-util - private boolean found_device (String dfuData, String usbID) - { - return dfuData.contains(("Found DFU: [0x"+usbID.substring(0,4)).toUpperCase()) || - dfuData.contains(("Found DFU: ["+usbID.substring(0,4)).toUpperCase()); - } - - public boolean uploadViaDFU (String binPath) - throws RunnerException { - - this.verbose = Preferences.getBoolean ("upload.verbose"); - - /* todo, check for size overruns! */ - String fileType="bin"; - - if (fileType.equals("bin")) { - String usbID = Preferences.get("upload.usbID"); - if (usbID == null) { - /* fall back on default */ - /* this isnt great because is default Avrdude or dfu-util? */ - usbID = Preferences.get("upload.usbID"); - } - - /* if auto-reset, then emit the reset pulse on dtr/rts */ - if (Preferences.get("upload.auto_reset") != null) { - if (Preferences.get("upload.auto_reset").toLowerCase().equals("true")) { - System.out.println("Resetting to bootloader via DTR pulse"); - emitResetPulse(); - } - } else { - System.out.println("Resetting to bootloader via DTR pulse"); - emitResetPulse(); - } - - String dfuList = new String(); - List commandCheck = new ArrayList(); - commandCheck.add("dfu-util"); - commandCheck.add("-l"); - long startChecking = System.currentTimeMillis(); - System.out.println("Searching for DFU device [" + usbID + "]..."); - do { - try { - Thread.sleep(100); - } catch (InterruptedException e) {} - dfuList = executeCheckCommand(commandCheck); - //System.out.println(dfuList); - } - while ( !found_device (dfuList.toUpperCase(), usbID) && (System.currentTimeMillis() - startChecking < 7000)); - - if ( !found_device (dfuList.toUpperCase(), usbID) ) - { - System.out.println(dfuList); - System.err.println("Couldn't find the DFU device: [" + usbID + "]"); - return false; - } - System.out.println("Found it!"); - - /* todo, add handle to let user choose altIf at upload time! */ - String altIf = Preferences.get("upload.altID"); - - List commandDownloader = new ArrayList(); - commandDownloader.add("dfu-util"); - commandDownloader.add("-a "+altIf); - commandDownloader.add("-R"); - commandDownloader.add("-d "+usbID); - commandDownloader.add("-D"+ binPath); //"./thisbin.bin"); - - return executeUploadCommand(commandDownloader); - } - - System.err.println("Only .bin files are supported at this time"); - return false; - } - - /* we need to ensure both RTS and DTR are low to start, - then pulse DTR on its own. This is the reset signal - maple responds to - */ - private void emitResetPulse() throws RunnerException { - - /* wait a while for the device to reboot */ - int programDelay = Preferences.getInteger("programDelay"); - - try { - Serial serialPort = new Serial(); - - // try to toggle DTR/RTS (old scheme) - serialPort.setRTS(false); - serialPort.setDTR(false); - serialPort.setDTR(true); - try { - Thread.sleep(50); - } catch (InterruptedException e) {} - serialPort.setDTR(false); - - // try magic number - serialPort.setRTS(true); - serialPort.setDTR(true); - try { - Thread.sleep(50); - } catch (InterruptedException e) {} - serialPort.setDTR(false); - try { - Thread.sleep(50); - } catch (InterruptedException e) {} - serialPort.write("1EAF"); - try { - Thread.sleep(50); - } catch (InterruptedException e) {} - serialPort.dispose(); - - } catch(Exception e) { - System.err.println("Reset via USB Serial Failed! Did you select the right serial port?\nAssuming the board is in perpetual bootloader mode and continuing to attempt dfu programming...\n"); - } - } - - protected String executeCheckCommand(Collection commandDownloader) - throws RunnerException - { - firstErrorFound = false; // haven't found any errors yet - secondErrorFound = false; - notFoundError = false; - int result=0; // pre-initialized to quiet a bogus warning from jikes - - String userdir = System.getProperty("user.dir") + File.separator; - String returnStr = new String(); - - try { - String[] commandArray = new String[commandDownloader.size()]; - commandDownloader.toArray(commandArray); - - String armBasePath; - - //armBasePath = new String(Base.getHardwarePath() + "/tools/arm/bin/"); - armBasePath = ""; - - commandArray[0] = armBasePath + commandArray[0]; - - if (verbose || Preferences.getBoolean("upload.verbose")) { - for(int i = 0; i < commandArray.length; i++) { - System.out.print(commandArray[i] + " "); - } - System.out.println(); - } - - Process process = Runtime.getRuntime().exec(commandArray); - BufferedReader stdInput = new BufferedReader(new - InputStreamReader(process.getInputStream())); - BufferedReader stdError = new BufferedReader(new - InputStreamReader(process.getErrorStream())); - - // wait for the process to finish. if interrupted - // before waitFor returns, continue waiting - // - boolean busy = true; - while (busy) { - try { - result = process.waitFor(); - busy = false; - } catch (InterruptedException intExc) { - } - } - - String s; - while ((s = stdInput.readLine()) != null) { - returnStr += s + "\n"; - } - - process.destroy(); - - if(exception!=null) { - exception.hideStackTrace(); - throw exception; - } - if(result!=0) return "Error!"; - } catch (Exception e) { - e.printStackTrace(); - } - //System.out.println("result2 is "+result); - // if the result isn't a known, expected value it means that something - // is fairly wrong, one possibility is that jikes has crashed. - // - if (exception != null) throw exception; - - if ((result != 0) && (result != 1 )) { - exception = new RunnerException(SUPER_BADNESS); - } - - return returnStr; // ? true : false; - - } - - // Need to overload this from Uploader to use the system-wide dfu-util - protected boolean executeUploadCommand(Collection commandDownloader) - throws RunnerException - { - firstErrorFound = false; // haven't found any errors yet - secondErrorFound = false; - notFoundError = false; - int result=0; // pre-initialized to quiet a bogus warning from jikes - - String userdir = System.getProperty("user.dir") + File.separator; - - try { - String[] commandArray = new String[commandDownloader.size()]; - commandDownloader.toArray(commandArray); - - String armBasePath; - - //armBasePath = new String(Base.getHardwarePath() + "/tools/arm/bin/"); - armBasePath = ""; - - commandArray[0] = armBasePath + commandArray[0]; - - if (verbose || Preferences.getBoolean("upload.verbose")) { - for(int i = 0; i < commandArray.length; i++) { - System.out.print(commandArray[i] + " "); - } - System.out.println(); - } - - Process process = Runtime.getRuntime().exec(commandArray); - new MessageSiphon(process.getInputStream(), this); - new MessageSiphon(process.getErrorStream(), this); - - // wait for the process to finish. if interrupted - // before waitFor returns, continue waiting - // - boolean compiling = true; - while (compiling) { - try { - result = process.waitFor(); - compiling = false; - } catch (InterruptedException intExc) { - } - } - if(exception!=null) { - exception.hideStackTrace(); - throw exception; - } - if(result!=0) - return false; - } catch (Exception e) { - e.printStackTrace(); - } - //System.out.println("result2 is "+result); - // if the result isn't a known, expected value it means that something - // is fairly wrong, one possibility is that jikes has crashed. - // - if (exception != null) throw exception; - - if ((result != 0) && (result != 1 )) { - exception = new RunnerException(SUPER_BADNESS); - //editor.error(exception); - //PdeBase.openURL(BUGS_URL); - //throw new PdeException(SUPER_BADNESS); - } - - return (result == 0); // ? true : false; - - } - - // deal with messages from dfu-util... - public void message(String s) { - - if(s.indexOf("dfu-util - (C) ") != -1) { return; } - if(s.indexOf("This program is Free Software and has ABSOLUTELY NO WARRANTY") != -1) { return; } - - if(s.indexOf("No DFU capable USB device found") != -1) { - System.err.print(s); - exception = new RunnerException("Problem uploading via dfu-util: No Maple found"); - return; - } - - if(s.indexOf("Operation not perimitted") != -1) { - System.err.print(s); - exception = new RunnerException("Problem uploading via dfu-util: Insufficient privilages"); - return; - } - - // else just print everything... - System.out.print(s); - } - -} diff --git a/src/maple_loader/src/CliTemplate/ExecCommand.java b/src/maple_loader/src/CliTemplate/ExecCommand.java deleted file mode 100644 index 3d6c106b7..000000000 --- a/src/maple_loader/src/CliTemplate/ExecCommand.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package CliTemplate; - -import java.io.IOException; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.List; - -import processing.app.debug.MessageConsumer; -import processing.app.debug.MessageSiphon; -import processing.app.debug.RunnerException; -import processing.app.helpers.ProcessUtils; - -/** - * - * @author cousinr - */ -public class ExecCommand implements MessageConsumer { - - private boolean verbose = true; - private boolean firstErrorFound; - private boolean secondErrorFound; - private RunnerException exception; - - /** - * Either succeeds or throws a RunnerException fit for public consumption. - * - * @param command - * @throws RunnerException - */ - public void execAsynchronously(String[] command) throws RunnerException { - - // eliminate any empty array entries - List stringList = new ArrayList<>(); - for (String string : command) { - string = string.trim(); - if (string.length() != 0) - stringList.add(string); - } - command = stringList.toArray(new String[stringList.size()]); - if (command.length == 0) - return; - int result = 0; - - if (verbose) { - for (String c : command) - System.out.print(c + " "); - System.out.println(); - } - - firstErrorFound = false; // haven't found any errors yet - secondErrorFound = false; - - Process process; - try { - process = ProcessUtils.exec(command); - } catch (IOException e) { - RunnerException re = new RunnerException(e.getMessage()); - re.hideStackTrace(); - throw re; - } - - MessageSiphon in = new MessageSiphon(process.getInputStream(), this); - MessageSiphon err = new MessageSiphon(process.getErrorStream(), this); - - // wait for the process to finish. if interrupted - // before waitFor returns, continue waiting - boolean compiling = true; - while (compiling) { - try { - in.join(); - err.join(); - result = process.waitFor(); - //System.out.println("result is " + result); - compiling = false; - } catch (InterruptedException ignored) { } - } - - // an error was queued up by message(), barf this back to compile(), - // which will barf it back to Editor. if you're having trouble - // discerning the imagery, consider how cows regurgitate their food - // to digest it, and the fact that they have five stomaches. - // - //System.out.println("throwing up " + exception); - if (exception != null) - throw exception; - - if (result > 1) { - // a failure in the tool (e.g. unable to locate a sub-executable) - System.err.println(MessageFormat.format("{0} returned {1}", command[0], result)); - } - - if (result != 0) { - RunnerException re = new RunnerException(MessageFormat.format("exit code: {0}", result)); - re.hideStackTrace(); - throw re; - } - } - - /** - * Part of the MessageConsumer interface, this is called - * whenever a piece (usually a line) of error message is spewed - * out from the compiler. The errors are parsed for their contents - * and line number, which is then reported back to Editor. - * @param s - */ - @Override - public void message(String s) { - int i; - - - System.err.print(s); - } - -} diff --git a/src/maple_loader/src/processing/app/Base.java b/src/maple_loader/src/processing/app/Base.java deleted file mode 100644 index c3a174dcb..000000000 --- a/src/maple_loader/src/processing/app/Base.java +++ /dev/null @@ -1,53 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2004-10 Ben Fry and Casey Reas - Copyright (c) 2001-04 Massachusetts Institute of Technology - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 - as published by the Free Software Foundation. - - 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, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -package processing.app; - - -/** - * The base class for the main processing application. - * Primary role of this class is for platform identification and - * general interaction with the system (launching URLs, loading - * files and images, etc) that comes from that. - */ -public class Base { - - /** - * returns true if running on windows. - */ - static public boolean isWindows() { - //return PApplet.platform == PConstants.WINDOWS; - return System.getProperty("os.name").indexOf("Windows") != -1; - } - - - /** - * true if running on linux. - */ - static public boolean isLinux() { - //return PApplet.platform == PConstants.LINUX; - return System.getProperty("os.name").indexOf("Linux") != -1; - } - - - -} diff --git a/src/maple_loader/src/processing/app/Preferences.java b/src/maple_loader/src/processing/app/Preferences.java deleted file mode 100644 index 6368e38af..000000000 --- a/src/maple_loader/src/processing/app/Preferences.java +++ /dev/null @@ -1,157 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2004-09 Ben Fry and Casey Reas - Copyright (c) 2001-04 Massachusetts Institute of Technology - - 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 2 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, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -package processing.app; - -import java.io.*; -import java.util.*; - - -/** - * Storage class for user preferences and environment settings. - *

- * This class no longer uses the Properties class, since - * properties files are iso8859-1, which is highly likely to - * be a problem when trying to save sketch folders and locations. - *

- * The GUI portion in here is really ugly, as it uses exact layout. This was - * done in frustration one evening (and pre-Swing), but that's long since past, - * and it should all be moved to a proper swing layout like BoxLayout. - *

- * This is very poorly put together, that the preferences panel and the actual - * preferences i/o is part of the same code. But there hasn't yet been a - * compelling reason to bother with the separation aside from concern about - * being lectured by strangers who feel that it doesn't look like what they - * learned in CS class. - *

- * Would also be possible to change this to use the Java Preferences API. - * Some useful articles - * here and - * here. - * However, haven't implemented this yet for lack of time, but more - * importantly, because it would entail writing to the registry (on Windows), - * or an obscure file location (on Mac OS X) and make it far more difficult to - * find the preferences to tweak them by hand (no! stay out of regedit!) - * or to reset the preferences by simply deleting the preferences.txt file. - */ -public class Preferences { - - // what to call the feller - - static final String PREFS_FILE = "preferences.txt"; - - - // prompt text stuff - - static final String PROMPT_YES = "Yes"; - static final String PROMPT_NO = "No"; - static final String PROMPT_CANCEL = "Cancel"; - static final String PROMPT_OK = "OK"; - static final String PROMPT_BROWSE = "Browse"; - - /** - * Standardized width for buttons. Mac OS X 10.3 wants 70 as its default, - * Windows XP needs 66, and my Ubuntu machine needs 80+, so 80 seems proper. - */ - static public int BUTTON_WIDTH = 80; - - /** - * Standardized button height. Mac OS X 10.3 (Java 1.4) wants 29, - * presumably because it now includes the blue border, where it didn't - * in Java 1.3. Windows XP only wants 23 (not sure what default Linux - * would be). Because of the disparity, on Mac OS X, it will be set - * inside a static block. - */ - static public int BUTTON_HEIGHT = 24; - - // value for the size bars, buttons, etc - - static final int GRID_SIZE = 33; - - - // indents and spacing standards. these probably need to be modified - // per platform as well, since macosx is so huge, windows is smaller, - // and linux is all over the map - - static final int GUI_BIG = 13; - static final int GUI_BETWEEN = 10; - static final int GUI_SMALL = 6; - - - - // data model - - static Hashtable table = new Hashtable();; - static File preferencesFile; - - - static protected void init(String commandLinePrefs) { - - - } - - - public Preferences() { - - } - - // ................................................................. - - // ................................................................. - - // ................................................................. - - // ................................................................. - - - - static public String get(String attribute) { - return (String) table.get(attribute); - } - - static public void set(String attribute, String value) { - table.put(attribute, value); - } - - - static public boolean getBoolean(String attribute) { - String value = get(attribute); - return (new Boolean(value)).booleanValue(); - } - - - static public void setBoolean(String attribute, boolean value) { - set(attribute, value ? "true" : "false"); - } - - - static public int getInteger(String attribute) { - return Integer.parseInt(get(attribute)); - } - - - static public void setInteger(String key, int value) { - set(key, String.valueOf(value)); - } - -} diff --git a/src/maple_loader/src/processing/app/Serial.java b/src/maple_loader/src/processing/app/Serial.java deleted file mode 100644 index 04566a738..000000000 --- a/src/maple_loader/src/processing/app/Serial.java +++ /dev/null @@ -1,527 +0,0 @@ -/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - PSerial - class for serial port goodness - Part of the Processing project - http://processing.org - - Copyright (c) 2004 Ben Fry & Casey Reas - - 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., 59 Temple Place, Suite 330, - Boston, MA 02111-1307 USA -*/ - -package processing.app; -//import processing.core.*; - - -import java.io.*; -import java.text.MessageFormat; -import java.util.*; -import jssc.SerialPort; -import jssc.SerialPortEvent; -import jssc.SerialPortEventListener; -import jssc.SerialPortException; -import jssc.SerialPortList; -import processing.app.debug.MessageConsumer; - - -public class Serial implements SerialPortEventListener { - - //PApplet parent; - - // properties can be passed in for default values - // otherwise defaults to 9600 N81 - - // these could be made static, which might be a solution - // for the classloading problem.. because if code ran again, - // the static class would have an object that could be closed - - SerialPort port; - - int rate; - int parity; - int databits; - int stopbits; - boolean monitor = false; - - // read buffer and streams - - InputStream input; - OutputStream output; - - byte buffer[] = new byte[32768]; - int bufferIndex; - int bufferLast; - - MessageConsumer consumer; - - public Serial(boolean monitor) throws SerialException { - this(Preferences.get("serial.port"), - Preferences.getInteger("serial.debug_rate"), - Preferences.get("serial.parity").charAt(0), - Preferences.getInteger("serial.databits"), - new Float(Preferences.get("serial.stopbits")).floatValue()); - this.monitor = monitor; - } - - public Serial() throws SerialException { - this(Preferences.get("serial.port"), - Preferences.getInteger("serial.debug_rate"), - Preferences.get("serial.parity").charAt(0), - Preferences.getInteger("serial.databits"), - new Float(Preferences.get("serial.stopbits")).floatValue()); - } - - public Serial(int irate) throws SerialException { - this(Preferences.get("serial.port"), irate, - Preferences.get("serial.parity").charAt(0), - Preferences.getInteger("serial.databits"), - new Float(Preferences.get("serial.stopbits")).floatValue()); - } - - public Serial(String iname, int irate) throws SerialException { - this(iname, irate, Preferences.get("serial.parity").charAt(0), - Preferences.getInteger("serial.databits"), - new Float(Preferences.get("serial.stopbits")).floatValue()); - } - - public Serial(String iname) throws SerialException { - this(iname, Preferences.getInteger("serial.debug_rate"), - Preferences.get("serial.parity").charAt(0), - Preferences.getInteger("serial.databits"), - new Float(Preferences.get("serial.stopbits")).floatValue()); - } - - public Serial(String iname, int irate, - char iparity, int idatabits, float istopbits) - throws SerialException { - //if (port != null) port.close(); - //this.parent = parent; - //parent.attach(this); - - this.rate = irate; - - parity = SerialPort.PARITY_NONE; - if (iparity == 'E') parity = SerialPort.PARITY_EVEN; - if (iparity == 'O') parity = SerialPort.PARITY_ODD; - - this.databits = idatabits; - - stopbits = SerialPort.STOPBITS_1; - if (istopbits == 1.5f) stopbits = SerialPort.STOPBITS_1_5; - if (istopbits == 2) stopbits = SerialPort.STOPBITS_2; - - try { - port = new SerialPort(iname); - port.openPort(); - port.setParams(rate, databits, stopbits, parity, true, true); - port.addEventListener(this); - } catch (Exception e) { - throw new SerialException(MessageFormat.format("Error opening serial port ''{0}''.", iname), e); - } - - if (port == null) { - throw new SerialException("Serial port '" + iname + "' not found. Did you select the right one from the Tools > Serial Port menu?"); - } - } - - - public void setup() { - //parent.registerCall(this, DISPOSE); - } - - public void dispose() throws IOException { - if (port != null) { - try { - if (port.isOpened()) { - port.closePort(); // close the port - } - } catch (SerialPortException e) { - throw new IOException(e); - } finally { - port = null; - } - } - } - - public void addListener(MessageConsumer consumer) { - this.consumer = consumer; - } - - public synchronized void serialEvent(SerialPortEvent serialEvent) { - if (serialEvent.isRXCHAR()) { - try { - byte[] buf = port.readBytes(serialEvent.getEventValue()); - if (buf.length > 0) { - if (bufferLast == buffer.length) { - byte temp[] = new byte[bufferLast << 1]; - System.arraycopy(buffer, 0, temp, 0, bufferLast); - buffer = temp; - } - if (monitor) { - System.out.print(new String(buf)); - } - if (this.consumer != null) { - this.consumer.message(new String(buf)); - } - } - } catch (SerialPortException e) { - errorMessage("serialEvent", e); - } - } - } - - - /** - * Returns the number of bytes that have been read from serial - * and are waiting to be dealt with by the user. - */ - public synchronized int available() { - return (bufferLast - bufferIndex); - } - - - /** - * Ignore all the bytes read so far and empty the buffer. - */ - public synchronized void clear() { - bufferLast = 0; - bufferIndex = 0; - } - - - /** - * Returns a number between 0 and 255 for the next byte that's - * waiting in the buffer. - * Returns -1 if there was no byte (although the user should - * first check available() to see if things are ready to avoid this) - */ - public synchronized int read() { - if (bufferIndex == bufferLast) return -1; - - int outgoing = buffer[bufferIndex++] & 0xff; - if (bufferIndex == bufferLast) { // rewind - bufferIndex = 0; - bufferLast = 0; - } - return outgoing; - } - - - /** - * Returns the next byte in the buffer as a char. - * Returns -1, or 0xffff, if nothing is there. - */ - public synchronized char readChar() { - if (bufferIndex == bufferLast) return (char)(-1); - return (char) read(); - } - - - /** - * Return a byte array of anything that's in the serial buffer. - * Not particularly memory/speed efficient, because it creates - * a byte array on each read, but it's easier to use than - * readBytes(byte b[]) (see below). - */ - public synchronized byte[] readBytes() { - if (bufferIndex == bufferLast) return null; - - int length = bufferLast - bufferIndex; - byte outgoing[] = new byte[length]; - System.arraycopy(buffer, bufferIndex, outgoing, 0, length); - - bufferIndex = 0; // rewind - bufferLast = 0; - return outgoing; - } - - - /** - * Grab whatever is in the serial buffer, and stuff it into a - * byte buffer passed in by the user. This is more memory/time - * efficient than readBytes() returning a byte[] array. - *

- * Returns an int for how many bytes were read. If more bytes - * are available than can fit into the byte array, only those - * that will fit are read. - */ - public synchronized int readBytes(byte outgoing[]) { - if (bufferIndex == bufferLast) return 0; - - int length = bufferLast - bufferIndex; - if (length > outgoing.length) length = outgoing.length; - System.arraycopy(buffer, bufferIndex, outgoing, 0, length); - - bufferIndex += length; - if (bufferIndex == bufferLast) { - bufferIndex = 0; // rewind - bufferLast = 0; - } - return length; - } - - - /** - * Reads from the serial port into a buffer of bytes up to and - * including a particular character. If the character isn't in - * the serial buffer, then 'null' is returned. - */ - public synchronized byte[] readBytesUntil(int interesting) { - if (bufferIndex == bufferLast) return null; - byte what = (byte)interesting; - - int found = -1; - for (int k = bufferIndex; k < bufferLast; k++) { - if (buffer[k] == what) { - found = k; - break; - } - } - if (found == -1) return null; - - int length = found - bufferIndex + 1; - byte outgoing[] = new byte[length]; - System.arraycopy(buffer, bufferIndex, outgoing, 0, length); - - bufferIndex = 0; // rewind - bufferLast = 0; - return outgoing; - } - - - /** - * Reads from the serial port into a buffer of bytes until a - * particular character. If the character isn't in the serial - * buffer, then 'null' is returned. - *

- * If outgoing[] is not big enough, then -1 is returned, - * and an error message is printed on the console. - * If nothing is in the buffer, zero is returned. - * If 'interesting' byte is not in the buffer, then 0 is returned. - */ - public synchronized int readBytesUntil(int interesting, byte outgoing[]) { - if (bufferIndex == bufferLast) return 0; - byte what = (byte)interesting; - - int found = -1; - for (int k = bufferIndex; k < bufferLast; k++) { - if (buffer[k] == what) { - found = k; - break; - } - } - if (found == -1) return 0; - - int length = found - bufferIndex + 1; - if (length > outgoing.length) { - System.err.println("readBytesUntil() byte buffer is" + - " too small for the " + length + - " bytes up to and including char " + interesting); - return -1; - } - //byte outgoing[] = new byte[length]; - System.arraycopy(buffer, bufferIndex, outgoing, 0, length); - - bufferIndex += length; - if (bufferIndex == bufferLast) { - bufferIndex = 0; // rewind - bufferLast = 0; - } - return length; - } - - - /** - * Return whatever has been read from the serial port so far - * as a String. It assumes that the incoming characters are ASCII. - *

- * If you want to move Unicode data, you can first convert the - * String to a byte stream in the representation of your choice - * (i.e. UTF8 or two-byte Unicode data), and send it as a byte array. - */ - public synchronized String readString() { - if (bufferIndex == bufferLast) return null; - return new String(readBytes()); - } - - - /** - * Combination of readBytesUntil and readString. See caveats in - * each function. Returns null if it still hasn't found what - * you're looking for. - *

- * If you want to move Unicode data, you can first convert the - * String to a byte stream in the representation of your choice - * (i.e. UTF8 or two-byte Unicode data), and send it as a byte array. - */ - public synchronized String readStringUntil(int interesting) { - byte b[] = readBytesUntil(interesting); - if (b == null) return null; - return new String(b); - } - - - /** - * This will handle both ints, bytes and chars transparently. - */ - public void write(int what) { // will also cover char - try { - port.writeInt(what & 0xff); - } catch (SerialPortException e) { - errorMessage("write", e); - } - } - - - public void write(byte bytes[]) { - try { - port.writeBytes(bytes); - } catch (SerialPortException e) { - errorMessage("write", e); - } - } - - - /** - * Write a String to the output. Note that this doesn't account - * for Unicode (two bytes per char), nor will it send UTF8 - * characters.. It assumes that you mean to send a byte buffer - * (most often the case for networking and serial i/o) and - * will only use the bottom 8 bits of each char in the string. - * (Meaning that internally it uses String.getBytes) - *

- * If you want to move Unicode data, you can first convert the - * String to a byte stream in the representation of your choice - * (i.e. UTF8 or two-byte Unicode data), and send it as a byte array. - */ - public void write(String what) { - write(what.getBytes()); - } - - public void setDTR(boolean state) { - try { - port.setDTR(state); - } catch (SerialPortException e) { - errorMessage("setDTR", e); - } - } - - public void setRTS(boolean state) { - try { - port.setRTS(state); - } catch (SerialPortException e) { - errorMessage("setRTS", e); - } - } - - static public List list() { - return Arrays.asList(SerialPortList.getPortNames()); - } - - - /** - * General error reporting, all corraled here just in case - * I think of something slightly more intelligent to do. - */ - static public void errorMessage(String where, Throwable e) { - System.err.println("Error inside Serial." + where + "()"); - e.printStackTrace(); - } -} - - - /* - class SerialMenuListener implements ItemListener { - //public SerialMenuListener() { } - - public void itemStateChanged(ItemEvent e) { - int count = serialMenu.getItemCount(); - for (int i = 0; i < count; i++) { - ((CheckboxMenuItem)serialMenu.getItem(i)).setState(false); - } - CheckboxMenuItem item = (CheckboxMenuItem)e.getSource(); - item.setState(true); - String name = item.getLabel(); - //System.out.println(item.getLabel()); - PdeBase.properties.put("serial.port", name); - //System.out.println("set to " + get("serial.port")); - } - } - */ - - - /* - protected Vector buildPortList() { - // get list of names for serial ports - // have the default port checked (if present) - Vector list = new Vector(); - - //SerialMenuListener listener = new SerialMenuListener(); - boolean problem = false; - - // if this is failing, it may be because - // lib/javax.comm.properties is missing. - // java is weird about how it searches for java.comm.properties - // so it tends to be very fragile. i.e. quotes in the CLASSPATH - // environment variable will hose things. - try { - //System.out.println("building port list"); - Enumeration portList = CommPortIdentifier.getPortIdentifiers(); - while (portList.hasMoreElements()) { - CommPortIdentifier portId = - (CommPortIdentifier) portList.nextElement(); - //System.out.println(portId); - - if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { - //if (portId.getName().equals(port)) { - String name = portId.getName(); - //CheckboxMenuItem mi = - //new CheckboxMenuItem(name, name.equals(defaultName)); - - //mi.addItemListener(listener); - //serialMenu.add(mi); - list.addElement(name); - } - } - } catch (UnsatisfiedLinkError e) { - e.printStackTrace(); - problem = true; - - } catch (Exception e) { - System.out.println("exception building serial menu"); - e.printStackTrace(); - } - - //if (serialMenu.getItemCount() == 0) { - //System.out.println("dimming serial menu"); - //serialMenu.setEnabled(false); - //} - - // only warn them if this is the first time - if (problem && PdeBase.firstTime) { - JOptionPane.showMessageDialog(this, //frame, - "Serial port support not installed.\n" + - "Check the readme for instructions\n" + - "if you need to use the serial port. ", - "Serial Port Warning", - JOptionPane.WARNING_MESSAGE); - } - return list; - } - */ - - - diff --git a/src/maple_loader/src/processing/app/SerialException.java b/src/maple_loader/src/processing/app/SerialException.java deleted file mode 100644 index 525c24078..000000000 --- a/src/maple_loader/src/processing/app/SerialException.java +++ /dev/null @@ -1,39 +0,0 @@ -/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Copyright (c) 2007 David A. Mellis - - 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 2 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, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -package processing.app; - -public class SerialException extends Exception { - public SerialException() { - super(); - } - - public SerialException(String message) { - super(message); - } - - public SerialException(String message, Throwable cause) { - super(message, cause); - } - - public SerialException(Throwable cause) { - super(cause); - } -} diff --git a/src/maple_loader/src/processing/app/debug/MessageConsumer.java b/src/maple_loader/src/processing/app/debug/MessageConsumer.java deleted file mode 100644 index 5e2042943..000000000 --- a/src/maple_loader/src/processing/app/debug/MessageConsumer.java +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2004-06 Ben Fry and Casey Reas - Copyright (c) 2001-04 Massachusetts Institute of Technology - - 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 2 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, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -package processing.app.debug; - - -/** - * Interface for dealing with parser/compiler output. - *

- * Different instances of MessageStream need to do different things with - * messages. In particular, a stream instance used for parsing output from - * the compiler compiler has to interpret its messages differently than one - * parsing output from the runtime. - *

- * Classes which consume messages and do something with them - * should implement this interface. - */ -public interface MessageConsumer { - - public void message(String s); - -} diff --git a/src/maple_loader/src/processing/app/debug/MessageSiphon.java b/src/maple_loader/src/processing/app/debug/MessageSiphon.java deleted file mode 100644 index 26901c3f4..000000000 --- a/src/maple_loader/src/processing/app/debug/MessageSiphon.java +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2004-06 Ben Fry and Casey Reas - Copyright (c) 2001-04 Massachusetts Institute of Technology - - 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 2 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, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -package processing.app.debug; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.SocketException; - -/** - * Slurps up messages from compiler. - */ -public class MessageSiphon implements Runnable { - - private final BufferedReader streamReader; - private final MessageConsumer consumer; - - private Thread thread; - private boolean canRun; - - public MessageSiphon(InputStream stream, MessageConsumer consumer) { - this.streamReader = new BufferedReader(new InputStreamReader(stream)); - this.consumer = consumer; - this.canRun = true; - - thread = new Thread(this); - // don't set priority too low, otherwise exceptions won't - // bubble up in time (i.e. compile errors have a weird delay) - //thread.setPriority(Thread.MIN_PRIORITY); - thread.setPriority(Thread.MAX_PRIORITY - 1); - thread.start(); - } - - - public void run() { - try { - // process data until we hit EOF; this will happily block - // (effectively sleeping the thread) until new data comes in. - // when the program is finally done, null will come through. - // - String currentLine; - while (canRun && (currentLine = streamReader.readLine()) != null) { - // \n is added again because readLine() strips it out - //EditorConsole.systemOut.println("messaging in"); - consumer.message(currentLine + "\n"); - //EditorConsole.systemOut.println("messaging out"); - } - //EditorConsole.systemOut.println("messaging thread done"); - } catch (NullPointerException npe) { - // Fairly common exception during shutdown - } catch (SocketException e) { - // socket has been close while we were wainting for data. nothing to see here, move along - } catch (Exception e) { - // On Linux and sometimes on Mac OS X, a "bad file descriptor" - // message comes up when closing an applet that's run externally. - // That message just gets supressed here.. - String mess = e.getMessage(); - if ((mess != null) && - (mess.indexOf("Bad file descriptor") != -1)) { - //if (e.getMessage().indexOf("Bad file descriptor") == -1) { - //System.err.println("MessageSiphon err " + e); - //e.printStackTrace(); - } else { - e.printStackTrace(); - } - } finally { - thread = null; - } - } - - // Wait until the MessageSiphon thread is complete. - public void join() throws java.lang.InterruptedException { - // Grab a temp copy in case another thread nulls the "thread" - // member variable - Thread t = thread; - if (t != null) t.join(); - } - - public void stop() { - this.canRun = false; - } - -} diff --git a/src/maple_loader/src/processing/app/debug/RunnerException.java b/src/maple_loader/src/processing/app/debug/RunnerException.java deleted file mode 100644 index 0a67d1e80..000000000 --- a/src/maple_loader/src/processing/app/debug/RunnerException.java +++ /dev/null @@ -1,161 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2004-08 Ben Fry and Casey Reas - Copyright (c) 2001-04 Massachusetts Institute of Technology - - 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 2 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, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -package processing.app.debug; - - -/** - * An exception with a line number attached that occurs - * during either compile time or run time. - */ -@SuppressWarnings("serial") -public class RunnerException extends Exception { - protected String message; - protected int codeIndex; - protected int codeLine; - protected int codeColumn; - protected boolean showStackTrace; - - - public RunnerException(String message) { - this(message, true); - } - - public RunnerException(String message, boolean showStackTrace) { - this(message, -1, -1, -1, showStackTrace); - } - - public RunnerException(String message, int file, int line) { - this(message, file, line, -1, true); - } - - - public RunnerException(String message, int file, int line, int column) { - this(message, file, line, column, true); - } - - - public RunnerException(String message, int file, int line, int column, - boolean showStackTrace) { - this.message = message; - this.codeIndex = file; - this.codeLine = line; - this.codeColumn = column; - this.showStackTrace = showStackTrace; - } - - - public RunnerException(Exception e) { - super(e); - this.showStackTrace = true; - } - - /** - * Override getMessage() in Throwable, so that I can set - * the message text outside the constructor. - */ - public String getMessage() { - return message; - } - - - public void setMessage(String message) { - this.message = message; - } - - - public int getCodeIndex() { - return codeIndex; - } - - - public void setCodeIndex(int index) { - codeIndex = index; - } - - - public boolean hasCodeIndex() { - return codeIndex != -1; - } - - - public int getCodeLine() { - return codeLine; - } - - - public void setCodeLine(int line) { - this.codeLine = line; - } - - - public boolean hasCodeLine() { - return codeLine != -1; - } - - - public void setCodeColumn(int column) { - this.codeColumn = column; - } - - - public int getCodeColumn() { - return codeColumn; - } - - - public void showStackTrace() { - showStackTrace = true; - } - - - public void hideStackTrace() { - showStackTrace = false; - } - - - /** - * Nix the java.lang crap out of an exception message - * because it scares the children. - *

- * This function must be static to be used with super() - * in each of the constructors above. - */ - /* - static public final String massage(String msg) { - if (msg.indexOf("java.lang.") == 0) { - //int dot = msg.lastIndexOf('.'); - msg = msg.substring("java.lang.".length()); - } - return msg; - //return (dot == -1) ? msg : msg.substring(dot+1); - } - */ - - - public void printStackTrace() { - if (showStackTrace) { - super.printStackTrace(); - } - } -} diff --git a/src/maple_loader/src/processing/app/helpers/ProcessUtils.java b/src/maple_loader/src/processing/app/helpers/ProcessUtils.java deleted file mode 100644 index c023f5810..000000000 --- a/src/maple_loader/src/processing/app/helpers/ProcessUtils.java +++ /dev/null @@ -1,32 +0,0 @@ -package processing.app.helpers; - -//import processing.app.Base; - -import java.io.IOException; -import java.util.Map; - -import processing.app.Base; - -public class ProcessUtils { - - public static Process exec(String[] command) throws IOException { - // No problems on linux and mac - if (!Base.isWindows()) { - return Runtime.getRuntime().exec(command); - } - - // Brutal hack to workaround windows command line parsing. - // http://stackoverflow.com/questions/5969724/java-runtime-exec-fails-to-escape-characters-properly - // http://msdn.microsoft.com/en-us/library/a1y7w461.aspx - // http://bugs.sun.com/view_bug.do?bug_id=6468220 - // http://bugs.sun.com/view_bug.do?bug_id=6518827 - String[] cmdLine = new String[command.length]; - for (int i = 0; i < command.length; i++) - cmdLine[i] = command[i].replace("\"", "\\\""); - - ProcessBuilder pb = new ProcessBuilder(cmdLine); - Map env = pb.environment(); - env.put("CYGWIN", "nodosfilewarning"); - return pb.start(); - } -} From 9401acf4f251f94a4f8af8be6f7837d68e2d21ae Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Fri, 10 Feb 2023 16:45:11 +0100 Subject: [PATCH 06/41] feat: add *.o files to .gitignore Signed-off-by: Frederic Pillon --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 00e281cbd..8fd574fde 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,5 @@ __pycache__/ !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json -*.code-workspace \ No newline at end of file +*.code-workspace +*.o From e23b29ede635d28775fdc8096591727bee5a3b75 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Mon, 13 Feb 2023 17:29:53 +0100 Subject: [PATCH 07/41] feat: add libserialport sources http://sigrok.org/wiki/Libserialport https://github.com/sigrokproject/libserialport Signed-off-by: Frederic Pillon --- src/libserialport/AUTHORS | 27 + src/libserialport/COPYING | 165 ++ src/libserialport/NEWS | 81 + src/libserialport/README | 92 + src/libserialport/config.h | 111 + src/libserialport/libserialport.h | 1827 ++++++++++++++ src/libserialport/libserialport_internal.h | 311 +++ src/libserialport/serialport.c | 2624 ++++++++++++++++++++ src/libserialport/timing.c | 174 ++ src/libserialport/windows.c | 569 +++++ 10 files changed, 5981 insertions(+) create mode 100644 src/libserialport/AUTHORS create mode 100644 src/libserialport/COPYING create mode 100644 src/libserialport/NEWS create mode 100644 src/libserialport/README create mode 100644 src/libserialport/config.h create mode 100644 src/libserialport/libserialport.h create mode 100644 src/libserialport/libserialport_internal.h create mode 100644 src/libserialport/serialport.c create mode 100644 src/libserialport/timing.c create mode 100644 src/libserialport/windows.c diff --git a/src/libserialport/AUTHORS b/src/libserialport/AUTHORS new file mode 100644 index 000000000..6975761c5 --- /dev/null +++ b/src/libserialport/AUTHORS @@ -0,0 +1,27 @@ +------------------------------------------------------------------------------- +AUTHORS +------------------------------------------------------------------------------- + +Martin Ling conceived the idea for the library, designed the API and wrote much +of the implementation and documentation. + +The initial codebase was adapted from serial code in libsigrok, written by Bert +Vermeulen and Uwe Hermann, who gave permission for it to be relicensed under +the LGPL3+ for inclusion in libserialport. + +The package is maintained by Uwe Hermann, with input from Martin Ling. + +Aurelien Jacobs made several contributions, including the USB metadata API, +improvements to the port enumeration code, and eliminating the previous +dependence on libudev for enumeration on Linux. + +Uffe Jakobsen contributed the FreeBSD support. + +Matthias Heidbrink contributed support for non-standard baudrates on Mac OS X. + +Bug fixes have been contributed by Bert Vermeulen, silverbuddy, Marcus +Comstedt, Antti Nykanen, Michael B. Trausch and Janne Huttunen. + +For a full history of contributions, see the git history. + +Others have helped the project by contributing bug reports and discussion. diff --git a/src/libserialport/COPYING b/src/libserialport/COPYING new file mode 100644 index 000000000..65c5ca88a --- /dev/null +++ b/src/libserialport/COPYING @@ -0,0 +1,165 @@ + GNU LESSER 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. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser 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 +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/src/libserialport/NEWS b/src/libserialport/NEWS new file mode 100644 index 000000000..7afa688cb --- /dev/null +++ b/src/libserialport/NEWS @@ -0,0 +1,81 @@ +0.1.1 (2016-01-27) +------------------ + +Note: This release does NOT change the libserialport API or ABI in + backwards-incompatible ways. Programs using libserialport should + continue to work fine without recompiling or relinking. + + * New API calls: + - sp_get_port_description(): Obtain a user friendly port description. + - sp_get_port_transport(): Obtain the underlying transport type. + - sp_get_port_usb_bus_address(): Obtain the USB bus number & device address. + - sp_get_port_usb_vid_pid(): Obtain the USB VID and PID. + - sp_get_port_usb_manufacturer(): Obtain the USB manufacturer string. + - sp_get_port_usb_product(): Obtain the USB product string. + - sp_get_port_usb_serial(): Obtain the USB serial number string. + - sp_get_port_bluetooth_address(): Obtain the Bluetooth MAC address. + - sp_blocking_read_next(): Read bytes from the specified serial port, + returning as soon as any data is available. + * API related additions: + - enum sp_mode: Add SP_MODE_READ_WRITE. + - Add enum sp_transport with the following enum entries: + SP_TRANSPORT_NATIVE, SP_TRANSPORT_USB, SP_TRANSPORT_BLUETOOTH. + * Fix the build on platforms where port enumeration and/or port + metadata is not available or implemented. + * Build system: + - Don't set/override "user variables" such as CFLAGS or LDFLAGS, since + those are meant to be controlled by the "user" (bug #577). + - Modernize and cleanup autotools setup. + * Remove trailing commas in libserialport.h enum definitions to allow + the code to build with the -pedantic compiler option. + * Fix various issues to allow successful builds with -std=c99. + * Fix various (non-fatal) compiler warnings. + * Fix various memory leaks (bug #419, among others). + * Fix a potential overflow of the timeout parameter of poll(). + * Fix ReadFile() ERROR_IO_PENDING in sp_nonblocking_read() (bug #707). + * Fix a glibc >= 2.20 compiler warning for deprecated _BSD_SOURCE (bug #716). + * Rename a 'signals' parameter to 'signal_mask' to avoid a conflict with Qt. + * Fix two potential segfaults in sp_get_port_handle() and sp_get_config_*() + (which only occurred if the user incorrectly passed in a NULL argument). + * sp_list_ports(): Actually set list_ptr NULL as documented. + * Use "Port not open" debug message when a closed port is used (bug #710). + * Linux: + - The libudev requirement has been dropped (/sys is now used directly). + - Fix a build issue in the get_termios_get_ioctl() call (bug #396). + - Fix sp_flush() so that it only flushes the requested buffers. + - Fix a build error if BOTHER is not available (bug #363). + - If present, add the USB "description" for better port identification. + - Handle the case when /sys/class/tty/ entries are not symlinks. + * Windows: + - MinGW-w64 (mingw-w64.sf.net) is now required for building, and MinGW + (mingw.org) is no longer supported (bug #393). + - Fix a build issue due to a missing #include. + - Fix a build issue due to the missing -lsetupapi linker argument. + - Use libtool's -no-undefined option to allow shared (DLL) builds. + - Fix a compile error due to multiply or not defined GUIDs (bug #416). + - Fix a build issue related to the SP_PRIV/SP_API macros (bug #553). + - Fix a bug where an uninitialized pointer was free()'d (bug #512). + - Fix a bug wrt the SetupDiOpenDevRegKey() return code (bug #499). + - Fix a bug wrt restart of RX/error wait operations after read (bug #421). + - Fix a bug wrt WaitCommEvents() and/or fAbortOnError handling (bug #341). + - Fix USB iSerial queries on USB composite devices. + - Strip CR/LF from end of system error messages (bug #585). + - Avoid unnecessary calls to the SetCommTimeouts() function (bug #586). + - Fix a bug in the Windows implementation of sp_blocking_read_next(). + - Fix an ERROR_SEM_TIMEOUT related issue in sp_blocking_write(). + * FreeBSD: + - Implement serial port enumeration for FreeBSD systems. + * Android: + - Fix a portability issue wrt the unavailable 'serial_struct' (bug #376). + - Fix a portability issue wrt a readlinkat() call (bug #377). + * Mac OS X: + - Fix port listing on Mac OS X 10.11 (El Capitan). + * README: Various documentation updates and fixes. + * AUTHORS: Add/update list of contributors. + * Doxygen API docs: Various documentation updates and fixes. + +0.1.0 (2014-05-06) +------------------ + + * Initial release. + diff --git a/src/libserialport/README b/src/libserialport/README new file mode 100644 index 000000000..817dff743 --- /dev/null +++ b/src/libserialport/README @@ -0,0 +1,92 @@ +------------------------------------------------------------------------------- +libserialport: cross-platform library for accessing serial ports +------------------------------------------------------------------------------- + +libserialport is a minimal library written in C that is intended to take care +of the OS-specific details when writing software that uses serial ports. + +By writing your serial code to use libserialport, you enable it to work +transparently on any platform supported by the library. + +The operations that are supported are: + +- Port enumeration (obtaining a list of serial ports on the system). +- Obtaining port metadata (USB device information, Bluetooth address, etc). +- Opening and closing ports. +- Setting port parameters (baud rate, parity, etc). +- Reading, writing and flushing data. +- Obtaining error information. + +libserialport is an open source project released under the LGPL3+ license. + +Status +====== + +The library should build and work on any Windows or Unix-based system. If it +does not, please submit a bug. + +Enumeration is currently implemented on Windows, Mac OS X, FreeBSD and Linux. +On other systems enumeration is not supported, but ports can still be opened +by name and then used. + +If you know how to enumerate available ports on another OS, please submit a bug +with this information, or better still a patch implementing it. + +Dependencies +============ + +No other libraries are required. + +Building +======== + +On Windows, libserialport can be built with Visual Studio 2019 or with +the standalone MSBuild tool, using the solution and project files provided. + +For other environments, the package uses a GNU style build based on autotools. + +Run "./autogen.sh" to generate the build system, "./configure" to setup, then +"make" to build the library and "make install" to install it. + +Windows builds can also be created using the autotools build system, using the +MinGW-w64 toolchain from http://mingw-w64.sourceforge.net/ - either natively +in Windows with the MSYS2 environment, or cross-compiling from another system. + +To build from MSYS2, the following packages must be installed: autoconf, +automake-wrapper, libtool, make, and either mingw-w64-i686-gcc (for 32-bit) +or mingw-w64-x86_64-gcc (for 64-bit). Open either the "MSYS2 MinGW 32-bit" or +"MSYS2 MinGW 64-bit" command window from the Start menu and use this when +configuring and building the package. Using the "MSYS2 MSYS" shell will build +against the Cygwin compatibility layer; this works, but port enumeration and +metadata will not be available, and binaries will depend on Cygwin. The builds +produced by MinGW-w64 are normal Windows DLLs without additional dependencies. + +API +=== + +Doxygen API documentation is included. + +It can also be viewed online at: + + http://sigrok.org/api/libserialport/unstable/ + +Bug reports +=========== + +You can report bugs for libserialport at https://sigrok.org/bugzilla. + +Mailing list +============ + + https://lists.sourceforge.net/lists/listinfo/sigrok-devel + +IRC +=== + +You can find the developers in the #sigrok IRC channel on Libera.Chat. + +Website +======= + +http://sigrok.org/wiki/Libserialport + diff --git a/src/libserialport/config.h b/src/libserialport/config.h new file mode 100644 index 000000000..17391764b --- /dev/null +++ b/src/libserialport/config.h @@ -0,0 +1,111 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* clock_gettime is available. */ +#define HAVE_CLOCK_GETTIME 1 + +/* Define to 1 if you have the declaration of `BOTHER', and to 0 if you don't. + */ +#define HAVE_DECL_BOTHER 0 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_DLFCN_H */ + +/* flock is available. */ +/* #undef HAVE_FLOCK */ + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* realpath is available. */ +/* #undef HAVE_REALPATH */ + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if the system has the type `struct serial_struct'. */ +/* #undef HAVE_STRUCT_SERIAL_STRUCT */ + +/* Define to 1 if the system has the type `struct termios2'. */ +/* #undef HAVE_STRUCT_TERMIOS2 */ + +/* Define to 1 if `c_ispeed' is a member of `struct termios2'. */ +/* #undef HAVE_STRUCT_TERMIOS2_C_ISPEED */ + +/* Define to 1 if `c_ospeed' is a member of `struct termios2'. */ +/* #undef HAVE_STRUCT_TERMIOS2_C_OSPEED */ + +/* Define to 1 if `c_ispeed' is a member of `struct termios'. */ +/* #undef HAVE_STRUCT_TERMIOS_C_ISPEED */ + +/* Define to 1 if `c_ospeed' is a member of `struct termios'. */ +/* #undef HAVE_STRUCT_TERMIOS_C_OSPEED */ + +/* sys/file.h is available. */ +#define HAVE_SYS_FILE_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Enumeration is unsupported. */ +/* #undef NO_ENUMERATION */ + +/* Port metadata is unavailable. */ +/* #undef NO_PORT_METADATA */ + +/* Macro preceding public API functions */ +#define SP_API + +/* . */ +#define SP_LIB_VERSION_AGE 1 + +/* . */ +#define SP_LIB_VERSION_CURRENT 1 + +/* . */ +#define SP_LIB_VERSION_REVISION 0 + +/* . */ +#define SP_LIB_VERSION_STRING "1:0:1" + +/* Macro preceding private functions */ +#define SP_PRIV + +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ +#define STDC_HEADERS 1 + +/* Number of bits in a file offset, on hosts where this is settable. */ +#define _FILE_OFFSET_BITS 64 + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ + +#if HAVE_STRUCT_TERMIOS_C_ISPEED && HAVE_STRUCT_TERMIOS_C_OSPEED +# define HAVE_TERMIOS_SPEED 1 +#endif +#if HAVE_STRUCT_TERMIOS2_C_ISPEED && HAVE_STRUCT_TERMIOS2_C_OSPEED +# define HAVE_TERMIOS2_SPEED 1 +#endif diff --git a/src/libserialport/libserialport.h b/src/libserialport/libserialport.h new file mode 100644 index 000000000..7467f7438 --- /dev/null +++ b/src/libserialport/libserialport.h @@ -0,0 +1,1827 @@ +/* + * This file is part of the libserialport project. + * + * Copyright (C) 2013, 2015 Martin Ling + * Copyright (C) 2014 Uwe Hermann + * Copyright (C) 2014 Aurelien Jacobs + * + * This program 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 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 Lesser General Public License + * along with this program. If not, see . + */ + +/** + * @mainpage libserialport API + * + * Introduction + * ============ + * + * libserialport is a minimal library written in C that is intended to take + * care of the OS-specific details when writing software that uses serial ports. + * + * By writing your serial code to use libserialport, you enable it to work + * transparently on any platform supported by the library. + * + * libserialport is an open source project released under the LGPL3+ license. + * + * The library is maintained by the [sigrok](http://sigrok.org/) project. See + * the [libserialport homepage](http://sigrok.org/wiki/Libserialport) for the + * latest information. + * + * Source code is maintained in git at + * [git://sigrok.org/libserialport](http://sigrok.org/gitweb/?p=libserialport.git). + * + * Bugs are tracked at http://sigrok.org/bugzilla/. + * + * The library was conceived and designed by Martin Ling, is maintained by + * Uwe Hermann, and has received contributions from several other developers. + * See the git history for full credits. + * + * API information + * =============== + * + * The API has been designed from scratch. It does not exactly resemble the + * serial API of any particular operating system. Instead it aims to provide + * a set of functions that can reliably be implemented across all operating + * systems. These form a sufficient basis for higher level behaviour to + * be implemented in a platform independent manner. + * + * If you are porting code written for a particular OS, you may find you need + * to restructure things somewhat, or do without some specialised features. + * For particular notes on porting existing code, see @ref Porting. + * + * Examples + * -------- + * + * Some simple example programs using libserialport are included in the + * @c examples directory in the source package: + * + * - @ref list_ports.c - Getting a list of ports present on the system. + * - @ref port_info.c - Getting information on a particular serial port. + * - @ref port_config.c - Accessing configuration settings of a port. + * - @ref send_receive.c - Sending and receiving data. + * - @ref await_events.c - Awaiting events on multiple ports. + * - @ref handle_errors.c - Handling errors returned from the library. + * + * These examples are linked with the API documentation. Each function + * in the API reference includes links to where it is used in an example + * program, and each appearance of a function in the examples links + * to that function's entry in the API reference. + * + * Headers + * ------- + * + * To use libserialport functions in your code, you should include the + * libserialport.h header, i.e. + * @code + * #include + * @endcode + * + * Namespace + * --------- + * + * All identifiers defined by the public libserialport headers use the prefix + * @c sp_ (for functions and data types) or @c SP_ (for macros and constants). + * + * Functions + * --------- + * + * The functions provided by the library are documented in detail in + * the following sections: + * + * - @ref Enumeration (obtaining a list of serial ports on the system) + * - @ref Ports (opening, closing and getting information about ports) + * - @ref Configuration (baud rate, parity, etc.) + * - @ref Signals (modem control lines, breaks, etc.) + * - @ref Data (reading and writing data, and buffer management) + * - @ref Waiting (waiting for ports to be ready, integrating with event loops) + * - @ref Errors (getting error and debugging information) + * + * Data structures + * --------------- + * + * The library defines three data structures: + * + * - @ref sp_port, which represents a serial port. + * See @ref Enumeration. + * - @ref sp_port_config, which represents a port configuration. + * See @ref Configuration. + * - @ref sp_event_set, which represents a set of events. + * See @ref Waiting. + * + * All these structures are allocated and freed by library functions. It is + * the caller's responsibility to ensure that the correct calls are made to + * free allocated structures after use. + * + * Return codes and error handling + * ------------------------------- + * + * Most functions have return type @ref sp_return and can return only four + * possible error values: + * + * - @ref SP_ERR_ARG means that a function was called with invalid + * arguments. This implies a bug in the caller. The arguments passed would + * be invalid regardless of the underlying OS or serial device involved. + * + * - @ref SP_ERR_FAIL means that the OS reported a failure. The error code or + * message provided by the OS can be obtained by calling sp_last_error_code() + * or sp_last_error_message(). + * + * - @ref SP_ERR_SUPP indicates that there is no support for the requested + * operation in the current OS, driver or device. No error message is + * available from the OS in this case. There is either no way to request + * the operation in the first place, or libserialport does not know how to + * do so in the current version. + * + * - @ref SP_ERR_MEM indicates that a memory allocation failed. + * + * All of these error values are negative. + * + * Calls that succeed return @ref SP_OK, which is equal to zero. Some functions + * declared @ref sp_return can also return a positive value for a successful + * numeric result, e.g. sp_blocking_read() or sp_blocking_write(). + * + * An error message is only available via sp_last_error_message() in the case + * where @ref SP_ERR_FAIL was returned by the previous function call. The error + * message returned is that provided by the OS, using the current language + * settings. It is an error to call sp_last_error_code() or + * sp_last_error_message() except after a previous function call returned + * @ref SP_ERR_FAIL. The library does not define its own error codes or + * messages to accompany other return codes. + * + * Thread safety + * ------------- + * + * Certain combinations of calls can be made concurrently, as follows. + * + * - Calls using different ports may always be made concurrently, i.e. + * it is safe for separate threads to handle their own ports. + * + * - Calls using the same port may be made concurrently when one call + * is a read operation and one call is a write operation, i.e. it is safe + * to use separate "reader" and "writer" threads for the same port. See + * below for which operations meet these definitions. + * + * Read operations: + * + * - sp_blocking_read() + * - sp_blocking_read_next() + * - sp_nonblocking_read() + * - sp_input_waiting() + * - sp_flush() with @ref SP_BUF_INPUT only. + * - sp_wait() with @ref SP_EVENT_RX_READY only. + * + * Write operations: + * + * - sp_blocking_write() + * - sp_nonblocking_write() + * - sp_output_waiting() + * - sp_drain() + * - sp_flush() with @ref SP_BUF_OUTPUT only. + * - sp_wait() with @ref SP_EVENT_TX_READY only. + * + * If two calls, on the same port, do not fit into one of these categories + * each, then they may not be made concurrently. + * + * Debugging + * --------- + * + * The library can output extensive tracing and debugging information. The + * simplest way to use this is to set the environment variable + * @c LIBSERIALPORT_DEBUG to any value; messages will then be output to the + * standard error stream. + * + * This behaviour is implemented by a default debug message handling + * callback. An alternative callback can be set using sp_set_debug_handler(), + * in order to e.g. redirect the output elsewhere or filter it. + * + * No guarantees are made about the content of the debug output; it is chosen + * to suit the needs of the developers and may change between releases. + * + * @anchor Porting + * Porting + * ------- + * + * The following guidelines may help when porting existing OS-specific code + * to use libserialport. + * + * ### Porting from Unix-like systems ### + * + * There are two main differences to note when porting code written for Unix. + * + * The first is that Unix traditionally provides a wide range of functionality + * for dealing with serial devices at the OS level; this is exposed through the + * termios API and dates to the days when serial terminals were common. If your + * code relies on many of these facilities you will need to adapt it, because + * libserialport provides only a raw binary channel with no special handling. + * + * The second relates to blocking versus non-blocking I/O behaviour. In + * Unix-like systems this is normally specified by setting the @c O_NONBLOCK + * flag on the file descriptor, affecting the semantics of subsequent @c read() + * and @c write() calls. + * + * In libserialport, blocking and nonblocking operations are both available at + * any time. If your existing code ѕets @c O_NONBLOCK, you should use + * sp_nonblocking_read() and sp_nonblocking_write() to get the same behaviour + * as your existing @c read() and @c write() calls. If it does not, you should + * use sp_blocking_read() and sp_blocking_write() instead. You may also find + * sp_blocking_read_next() useful, which reproduces the semantics of a blocking + * read() with @c VTIME=0 and @c VMIN=1 set in termios. + * + * Finally, you should take care if your program uses custom signal handlers. + * The blocking calls provided by libserialport will restart system calls that + * return with @c EINTR, so you will need to make your own arrangements if you + * need to interrupt blocking operations when your signal handlers are called. + * This is not an issue if you only use the default handlers. + * + * ### Porting from Windows ### + * + * The main consideration when porting from Windows is that there is no + * direct equivalent for overlapped I/O operations. + * + * If your program does not use overlapped I/O, you can simply use + * sp_blocking_read() and sp_blocking_write() as direct equivalents for + * @c ReadFile() and @c WriteFile(). You may also find sp_blocking_read_next() + * useful, which reproduces the special semantics of @c ReadFile() with + * @c ReadIntervalTimeout and @c ReadTotalTimeoutMultiplier set to @c MAXDWORD + * and @c ReadTotalTimeoutConstant set to between @c 1 and @c MAXDWORD-1 . + * + * If your program makes use of overlapped I/O to continue work while a serial + * operation is in progress, then you can achieve the same results using + * sp_nonblocking_read() and sp_nonblocking_write(). + * + * Generally, overlapped I/O is combined with either waiting for completion + * once there is no more background work to do (using @c WaitForSingleObject() + * or @c WaitForMultipleObjects()), or periodically checking for completion + * with @c GetOverlappedResult(). If the aim is to start a new operation for + * further data once the previous one has completed, you can instead simply + * call the nonblocking functions again with the next data. If you need to + * wait for completion, use sp_wait() to determine when the port is ready to + * send or receive further data. + */ + +#ifndef LIBSERIALPORT_LIBSERIALPORT_H +#define LIBSERIALPORT_LIBSERIALPORT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/** @cond */ +#ifdef _MSC_VER +/* Microsoft Visual C/C++ compiler in use */ +#ifdef LIBSERIALPORT_MSBUILD +/* Building the library - need to export DLL symbols */ +#define SP_API __declspec(dllexport) +#else +/* Using the library - need to import DLL symbols */ +#define SP_API __declspec(dllimport) +#endif +#else +/* Some other compiler in use */ +#ifndef LIBSERIALPORT_ATBUILD +/* Not building the library itself - don't need any special prefixes. */ +#define SP_API +#endif +#endif +/** @endcond */ + +/** Return values. */ +enum sp_return { + /** Operation completed successfully. */ + SP_OK = 0, + /** Invalid arguments were passed to the function. */ + SP_ERR_ARG = -1, + /** A system error occurred while executing the operation. */ + SP_ERR_FAIL = -2, + /** A memory allocation failed while executing the operation. */ + SP_ERR_MEM = -3, + /** The requested operation is not supported by this system or device. */ + SP_ERR_SUPP = -4 +}; + +/** Port access modes. */ +enum sp_mode { + /** Open port for read access. */ + SP_MODE_READ = 1, + /** Open port for write access. */ + SP_MODE_WRITE = 2, + /** Open port for read and write access. @since 0.1.1 */ + SP_MODE_READ_WRITE = 3 +}; + +/** Port events. */ +enum sp_event { + /** Data received and ready to read. */ + SP_EVENT_RX_READY = 1, + /** Ready to transmit new data. */ + SP_EVENT_TX_READY = 2, + /** Error occurred. */ + SP_EVENT_ERROR = 4 +}; + +/** Buffer selection. */ +enum sp_buffer { + /** Input buffer. */ + SP_BUF_INPUT = 1, + /** Output buffer. */ + SP_BUF_OUTPUT = 2, + /** Both buffers. */ + SP_BUF_BOTH = 3 +}; + +/** Parity settings. */ +enum sp_parity { + /** Special value to indicate setting should be left alone. */ + SP_PARITY_INVALID = -1, + /** No parity. */ + SP_PARITY_NONE = 0, + /** Odd parity. */ + SP_PARITY_ODD = 1, + /** Even parity. */ + SP_PARITY_EVEN = 2, + /** Mark parity. */ + SP_PARITY_MARK = 3, + /** Space parity. */ + SP_PARITY_SPACE = 4 +}; + +/** RTS pin behaviour. */ +enum sp_rts { + /** Special value to indicate setting should be left alone. */ + SP_RTS_INVALID = -1, + /** RTS off. */ + SP_RTS_OFF = 0, + /** RTS on. */ + SP_RTS_ON = 1, + /** RTS used for flow control. */ + SP_RTS_FLOW_CONTROL = 2 +}; + +/** CTS pin behaviour. */ +enum sp_cts { + /** Special value to indicate setting should be left alone. */ + SP_CTS_INVALID = -1, + /** CTS ignored. */ + SP_CTS_IGNORE = 0, + /** CTS used for flow control. */ + SP_CTS_FLOW_CONTROL = 1 +}; + +/** DTR pin behaviour. */ +enum sp_dtr { + /** Special value to indicate setting should be left alone. */ + SP_DTR_INVALID = -1, + /** DTR off. */ + SP_DTR_OFF = 0, + /** DTR on. */ + SP_DTR_ON = 1, + /** DTR used for flow control. */ + SP_DTR_FLOW_CONTROL = 2 +}; + +/** DSR pin behaviour. */ +enum sp_dsr { + /** Special value to indicate setting should be left alone. */ + SP_DSR_INVALID = -1, + /** DSR ignored. */ + SP_DSR_IGNORE = 0, + /** DSR used for flow control. */ + SP_DSR_FLOW_CONTROL = 1 +}; + +/** XON/XOFF flow control behaviour. */ +enum sp_xonxoff { + /** Special value to indicate setting should be left alone. */ + SP_XONXOFF_INVALID = -1, + /** XON/XOFF disabled. */ + SP_XONXOFF_DISABLED = 0, + /** XON/XOFF enabled for input only. */ + SP_XONXOFF_IN = 1, + /** XON/XOFF enabled for output only. */ + SP_XONXOFF_OUT = 2, + /** XON/XOFF enabled for input and output. */ + SP_XONXOFF_INOUT = 3 +}; + +/** Standard flow control combinations. */ +enum sp_flowcontrol { + /** No flow control. */ + SP_FLOWCONTROL_NONE = 0, + /** Software flow control using XON/XOFF characters. */ + SP_FLOWCONTROL_XONXOFF = 1, + /** Hardware flow control using RTS/CTS signals. */ + SP_FLOWCONTROL_RTSCTS = 2, + /** Hardware flow control using DTR/DSR signals. */ + SP_FLOWCONTROL_DTRDSR = 3 +}; + +/** Input signals. */ +enum sp_signal { + /** Clear to send. */ + SP_SIG_CTS = 1, + /** Data set ready. */ + SP_SIG_DSR = 2, + /** Data carrier detect. */ + SP_SIG_DCD = 4, + /** Ring indicator. */ + SP_SIG_RI = 8 +}; + +/** + * Transport types. + * + * @since 0.1.1 + */ +enum sp_transport { + /** Native platform serial port. @since 0.1.1 */ + SP_TRANSPORT_NATIVE, + /** USB serial port adapter. @since 0.1.1 */ + SP_TRANSPORT_USB, + /** Bluetooth serial port adapter. @since 0.1.1 */ + SP_TRANSPORT_BLUETOOTH +}; + +/** + * @struct sp_port + * An opaque structure representing a serial port. + */ +struct sp_port; + +/** + * @struct sp_port_config + * An opaque structure representing the configuration for a serial port. + */ +struct sp_port_config; + +/** + * @struct sp_event_set + * A set of handles to wait on for events. + */ +struct sp_event_set { + /** Array of OS-specific handles. */ + void *handles; + /** Array of bitmasks indicating which events apply for each handle. */ + enum sp_event *masks; + /** Number of handles. */ + unsigned int count; +}; + +/** + * @defgroup Enumeration Port enumeration + * + * Enumerating the serial ports of a system. + * + * See @ref list_ports.c for a working example of port enumeration. + * + * @{ + */ + +/** + * Obtain a pointer to a new sp_port structure representing the named port. + * + * The user should allocate a variable of type "struct sp_port *" and pass a + * pointer to this to receive the result. + * + * The result should be freed after use by calling sp_free_port(). + * + * @param[in] portname The OS-specific name of a serial port. Must not be NULL. + * @param[out] port_ptr If any error is returned, the variable pointed to by + * port_ptr will be set to NULL. Otherwise, it will be set + * to point to the newly allocated port. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_get_port_by_name(const char *portname, struct sp_port **port_ptr); + +/** + * Free a port structure obtained from sp_get_port_by_name() or sp_copy_port(). + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @since 0.1.0 + */ +SP_API void sp_free_port(struct sp_port *port); + +/** + * List the serial ports available on the system. + * + * The result obtained is an array of pointers to sp_port structures, + * terminated by a NULL. The user should allocate a variable of type + * "struct sp_port **" and pass a pointer to this to receive the result. + * + * The result should be freed after use by calling sp_free_port_list(). + * If a port from the list is to be used after freeing the list, it must be + * copied first using sp_copy_port(). + * + * @param[out] list_ptr If any error is returned, the variable pointed to by + * list_ptr will be set to NULL. Otherwise, it will be set + * to point to the newly allocated array. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_list_ports(struct sp_port ***list_ptr); + +/** + * Make a new copy of an sp_port structure. + * + * The user should allocate a variable of type "struct sp_port *" and pass a + * pointer to this to receive the result. + * + * The copy should be freed after use by calling sp_free_port(). + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[out] copy_ptr If any error is returned, the variable pointed to by + * copy_ptr will be set to NULL. Otherwise, it will be set + * to point to the newly allocated copy. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_copy_port(const struct sp_port *port, struct sp_port **copy_ptr); + +/** + * Free a port list obtained from sp_list_ports(). + * + * This will also free all the sp_port structures referred to from the list; + * any that are to be retained must be copied first using sp_copy_port(). + * + * @param[in] ports Pointer to a list of port structures. Must not be NULL. + * + * @since 0.1.0 + */ +SP_API void sp_free_port_list(struct sp_port **ports); + +/** + * @} + * @defgroup Ports Port handling + * + * Opening, closing and querying ports. + * + * See @ref port_info.c for a working example of getting port information. + * + * @{ + */ + +/** + * Open the specified serial port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] flags Flags to use when opening the serial port. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_open(struct sp_port *port, enum sp_mode flags); + +/** + * Close the specified serial port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_close(struct sp_port *port); + +/** + * Get the name of a port. + * + * The name returned is whatever is normally used to refer to a port on the + * current operating system; e.g. for Windows it will usually be a "COMn" + * device name, and for Unix it will be a device path beginning with "/dev/". + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @return The port name, or NULL if an invalid port is passed. The name + * string is part of the port structure and may not be used after + * the port structure has been freed. + * + * @since 0.1.0 + */ +SP_API char *sp_get_port_name(const struct sp_port *port); + +/** + * Get a description for a port, to present to end user. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @return The port description, or NULL if an invalid port is passed. + * The description string is part of the port structure and may not + * be used after the port structure has been freed. + * + * @since 0.1.1 + */ +SP_API char *sp_get_port_description(const struct sp_port *port); + +/** + * Get the transport type used by a port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @return The port transport type. + * + * @since 0.1.1 + */ +SP_API enum sp_transport sp_get_port_transport(const struct sp_port *port); + +/** + * Get the USB bus number and address on bus of a USB serial adapter port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[out] usb_bus Pointer to a variable to store the USB bus. + * Can be NULL (in that case it will be ignored). + * @param[out] usb_address Pointer to a variable to store the USB address. + * Can be NULL (in that case it will be ignored). + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.1 + */ +SP_API enum sp_return sp_get_port_usb_bus_address(const struct sp_port *port, + int *usb_bus, int *usb_address); + +/** + * Get the USB Vendor ID and Product ID of a USB serial adapter port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[out] usb_vid Pointer to a variable to store the USB VID. + * Can be NULL (in that case it will be ignored). + * @param[out] usb_pid Pointer to a variable to store the USB PID. + * Can be NULL (in that case it will be ignored). + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.1 + */ +SP_API enum sp_return sp_get_port_usb_vid_pid(const struct sp_port *port, int *usb_vid, int *usb_pid); + +/** + * Get the USB manufacturer string of a USB serial adapter port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @return The port manufacturer string, or NULL if an invalid port is passed. + * The manufacturer string is part of the port structure and may not + * be used after the port structure has been freed. + * + * @since 0.1.1 + */ +SP_API char *sp_get_port_usb_manufacturer(const struct sp_port *port); + +/** + * Get the USB product string of a USB serial adapter port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @return The port product string, or NULL if an invalid port is passed. + * The product string is part of the port structure and may not be + * used after the port structure has been freed. + * + * @since 0.1.1 + */ +SP_API char *sp_get_port_usb_product(const struct sp_port *port); + +/** + * Get the USB serial number string of a USB serial adapter port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @return The port serial number, or NULL if an invalid port is passed. + * The serial number string is part of the port structure and may + * not be used after the port structure has been freed. + * + * @since 0.1.1 + */ +SP_API char *sp_get_port_usb_serial(const struct sp_port *port); + +/** + * Get the MAC address of a Bluetooth serial adapter port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @return The port MAC address, or NULL if an invalid port is passed. + * The MAC address string is part of the port structure and may not + * be used after the port structure has been freed. + * + * @since 0.1.1 + */ +SP_API char *sp_get_port_bluetooth_address(const struct sp_port *port); + +/** + * Get the operating system handle for a port. + * + * The type of the handle depends on the operating system. On Unix based + * systems, the handle is a file descriptor of type "int". On Windows, the + * handle is of type "HANDLE". The user should allocate a variable of the + * appropriate type and pass a pointer to this to receive the result. + * + * To obtain a valid handle, the port must first be opened by calling + * sp_open() using the same port structure. + * + * After the port is closed or the port structure freed, the handle may + * no longer be valid. + * + * @warning This feature is provided so that programs may make use of + * OS-specific functionality where desired. Doing so obviously + * comes at a cost in portability. It also cannot be guaranteed + * that direct usage of the OS handle will not conflict with the + * library's own usage of the port. Be careful. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[out] result_ptr If any error is returned, the variable pointed to by + * result_ptr will have unknown contents and should not + * be used. Otherwise, it will be set to point to the + * OS handle. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_get_port_handle(const struct sp_port *port, void *result_ptr); + +/** + * @} + * + * @defgroup Configuration Configuration + * + * Setting and querying serial port parameters. + * + * See @ref port_config.c for a working example of port configuration. + * + * You should always configure all settings before using a port. + * There are no default settings applied by libserialport. + * When you open a port it may have default settings from the OS or + * driver, or the settings left over by the last program to use it. + * + * You should always set baud rate, data bits, parity and stop bits. + * + * You should normally also set one of the preset @ref sp_flowcontrol + * flow control modes, which will set up the RTS, CTS, DTR and DSR pin + * behaviours and enable or disable XON/XOFF. If you need an unusual + * configuration not covered by the preset flow control modes, you + * will need to configure these settings individually, and avoid + * calling sp_set_flowcontrol() or sp_set_config_flowcontrol() which + * will overwrite these settings. + * + * A port must be opened before you can change its settings. + * + * There are two ways of accessing port settings: + * + * Configuration structures + * ------------------------ + * + * You can read and write a whole configuration (all settings at once) + * using sp_get_config() and sp_set_config(). This is handy if you want + * to change between some preset combinations, or save and restore an + * existing configuration. It also ensures the changes are made + * together, via an efficient set of calls into the OS - in some cases + * a single system call can be used. + * + * Use accessor functions like sp_get_config_baudrate() and + * sp_set_config_baudrate() to get and set individual settings + * from a configuration. + * + * For each setting in a port configuration, a special value of -1 can + * be used, which will cause that setting to be left alone when the + * configuration is applied by sp_set_config(). + * + * This value is also be used by sp_get_config() for any settings + * which are unconfigured at the OS level, or in a state that is + * not representable within the libserialport API. + * + * Configurations are allocated using sp_new_config() and freed + * with sp_free_config(). You need to manage them yourself. When + * a new configuration is allocated by sp_new_config(), all of + * its settings are initially set to the special -1 value. + * + * Direct functions for changing port settings + * ------------------------------------------- + * + * As a shortcut, you can set individual settings on a port directly + * by calling functions like sp_set_baudrate() and sp_set_parity(). + * This saves you the work of allocating a temporary config, setting it + * up, applying it to a port and then freeing it. + * + * @{ + */ + +/** + * Allocate a port configuration structure. + * + * The user should allocate a variable of type "struct sp_port_config *" and + * pass a pointer to this to receive the result. The variable will be updated + * to point to the new configuration structure. The structure is opaque and + * must be accessed via the functions provided. + * + * All parameters in the structure will be initialised to special values which + * are ignored by sp_set_config(). + * + * The structure should be freed after use by calling sp_free_config(). + * + * @param[out] config_ptr If any error is returned, the variable pointed to by + * config_ptr will be set to NULL. Otherwise, it will + * be set to point to the allocated config structure. + * Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_new_config(struct sp_port_config **config_ptr); + +/** + * Free a port configuration structure. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * + * @since 0.1.0 + */ +SP_API void sp_free_config(struct sp_port_config *config); + +/** + * Get the current configuration of the specified serial port. + * + * The user should allocate a configuration structure using sp_new_config() + * and pass this as the config parameter. The configuration structure will + * be updated with the port configuration. + * + * Any parameters that are configured with settings not recognised or + * supported by libserialport, will be set to special values that are + * ignored by sp_set_config(). + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[out] config Pointer to a configuration structure that will hold + * the result. Upon errors the contents of the config + * struct will not be changed. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_get_config(struct sp_port *port, struct sp_port_config *config); + +/** + * Set the configuration for the specified serial port. + * + * For each parameter in the configuration, there is a special value (usually + * -1, but see the documentation for each field). These values will be ignored + * and the corresponding setting left unchanged on the port. + * + * Upon errors, the configuration of the serial port is unknown since + * partial/incomplete config updates may have happened. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_config(struct sp_port *port, const struct sp_port_config *config); + +/** + * Set the baud rate for the specified serial port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] baudrate Baud rate in bits per second. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_baudrate(struct sp_port *port, int baudrate); + +/** + * Get the baud rate from a port configuration. + * + * The user should allocate a variable of type int and + * pass a pointer to this to receive the result. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[out] baudrate_ptr Pointer to a variable to store the result. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_get_config_baudrate(const struct sp_port_config *config, int *baudrate_ptr); + +/** + * Set the baud rate in a port configuration. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[in] baudrate Baud rate in bits per second, or -1 to retain the current setting. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_config_baudrate(struct sp_port_config *config, int baudrate); + +/** + * Set the data bits for the specified serial port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] bits Number of data bits. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_bits(struct sp_port *port, int bits); + +/** + * Get the data bits from a port configuration. + * + * The user should allocate a variable of type int and + * pass a pointer to this to receive the result. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[out] bits_ptr Pointer to a variable to store the result. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_get_config_bits(const struct sp_port_config *config, int *bits_ptr); + +/** + * Set the data bits in a port configuration. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[in] bits Number of data bits, or -1 to retain the current setting. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_config_bits(struct sp_port_config *config, int bits); + +/** + * Set the parity setting for the specified serial port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] parity Parity setting. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_parity(struct sp_port *port, enum sp_parity parity); + +/** + * Get the parity setting from a port configuration. + * + * The user should allocate a variable of type enum sp_parity and + * pass a pointer to this to receive the result. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[out] parity_ptr Pointer to a variable to store the result. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_get_config_parity(const struct sp_port_config *config, enum sp_parity *parity_ptr); + +/** + * Set the parity setting in a port configuration. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[in] parity Parity setting, or -1 to retain the current setting. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_config_parity(struct sp_port_config *config, enum sp_parity parity); + +/** + * Set the stop bits for the specified serial port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] stopbits Number of stop bits. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_stopbits(struct sp_port *port, int stopbits); + +/** + * Get the stop bits from a port configuration. + * + * The user should allocate a variable of type int and + * pass a pointer to this to receive the result. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[out] stopbits_ptr Pointer to a variable to store the result. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_get_config_stopbits(const struct sp_port_config *config, int *stopbits_ptr); + +/** + * Set the stop bits in a port configuration. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[in] stopbits Number of stop bits, or -1 to retain the current setting. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_config_stopbits(struct sp_port_config *config, int stopbits); + +/** + * Set the RTS pin behaviour for the specified serial port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] rts RTS pin mode. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_rts(struct sp_port *port, enum sp_rts rts); + +/** + * Get the RTS pin behaviour from a port configuration. + * + * The user should allocate a variable of type enum sp_rts and + * pass a pointer to this to receive the result. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[out] rts_ptr Pointer to a variable to store the result. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_get_config_rts(const struct sp_port_config *config, enum sp_rts *rts_ptr); + +/** + * Set the RTS pin behaviour in a port configuration. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[in] rts RTS pin mode, or -1 to retain the current setting. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_config_rts(struct sp_port_config *config, enum sp_rts rts); + +/** + * Set the CTS pin behaviour for the specified serial port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] cts CTS pin mode. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_cts(struct sp_port *port, enum sp_cts cts); + +/** + * Get the CTS pin behaviour from a port configuration. + * + * The user should allocate a variable of type enum sp_cts and + * pass a pointer to this to receive the result. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[out] cts_ptr Pointer to a variable to store the result. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_get_config_cts(const struct sp_port_config *config, enum sp_cts *cts_ptr); + +/** + * Set the CTS pin behaviour in a port configuration. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[in] cts CTS pin mode, or -1 to retain the current setting. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_config_cts(struct sp_port_config *config, enum sp_cts cts); + +/** + * Set the DTR pin behaviour for the specified serial port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] dtr DTR pin mode. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_dtr(struct sp_port *port, enum sp_dtr dtr); + +/** + * Get the DTR pin behaviour from a port configuration. + * + * The user should allocate a variable of type enum sp_dtr and + * pass a pointer to this to receive the result. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[out] dtr_ptr Pointer to a variable to store the result. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_get_config_dtr(const struct sp_port_config *config, enum sp_dtr *dtr_ptr); + +/** + * Set the DTR pin behaviour in a port configuration. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[in] dtr DTR pin mode, or -1 to retain the current setting. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_config_dtr(struct sp_port_config *config, enum sp_dtr dtr); + +/** + * Set the DSR pin behaviour for the specified serial port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] dsr DSR pin mode. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_dsr(struct sp_port *port, enum sp_dsr dsr); + +/** + * Get the DSR pin behaviour from a port configuration. + * + * The user should allocate a variable of type enum sp_dsr and + * pass a pointer to this to receive the result. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[out] dsr_ptr Pointer to a variable to store the result. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_get_config_dsr(const struct sp_port_config *config, enum sp_dsr *dsr_ptr); + +/** + * Set the DSR pin behaviour in a port configuration. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[in] dsr DSR pin mode, or -1 to retain the current setting. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_config_dsr(struct sp_port_config *config, enum sp_dsr dsr); + +/** + * Set the XON/XOFF configuration for the specified serial port. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] xon_xoff XON/XOFF mode. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_xon_xoff(struct sp_port *port, enum sp_xonxoff xon_xoff); + +/** + * Get the XON/XOFF configuration from a port configuration. + * + * The user should allocate a variable of type enum sp_xonxoff and + * pass a pointer to this to receive the result. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[out] xon_xoff_ptr Pointer to a variable to store the result. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_get_config_xon_xoff(const struct sp_port_config *config, enum sp_xonxoff *xon_xoff_ptr); + +/** + * Set the XON/XOFF configuration in a port configuration. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[in] xon_xoff XON/XOFF mode, or -1 to retain the current setting. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_config_xon_xoff(struct sp_port_config *config, enum sp_xonxoff xon_xoff); + +/** + * Set the flow control type in a port configuration. + * + * This function is a wrapper that sets the RTS, CTS, DTR, DSR and + * XON/XOFF settings as necessary for the specified flow control + * type. For more fine-grained control of these settings, use their + * individual configuration functions. + * + * @param[in] config Pointer to a configuration structure. Must not be NULL. + * @param[in] flowcontrol Flow control setting to use. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_config_flowcontrol(struct sp_port_config *config, enum sp_flowcontrol flowcontrol); + +/** + * Set the flow control type for the specified serial port. + * + * This function is a wrapper that sets the RTS, CTS, DTR, DSR and + * XON/XOFF settings as necessary for the specified flow control + * type. For more fine-grained control of these settings, use their + * individual configuration functions. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] flowcontrol Flow control setting to use. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_set_flowcontrol(struct sp_port *port, enum sp_flowcontrol flowcontrol); + +/** + * @} + * + * @defgroup Data Data handling + * + * Reading, writing, and flushing data. + * + * See @ref send_receive.c for an example of sending and receiving data. + * + * @{ + */ + +/** + * Read bytes from the specified serial port, blocking until complete. + * + * @warning If your program runs on Unix, defines its own signal handlers, and + * needs to abort blocking reads when these are called, then you + * should not use this function. It repeats system calls that return + * with EINTR. To be able to abort a read from a signal handler, you + * should implement your own blocking read using sp_nonblocking_read() + * together with a blocking method that makes sense for your program. + * E.g. you can obtain the file descriptor for an open port using + * sp_get_port_handle() and use this to call select() or pselect(), + * with appropriate arrangements to return if a signal is received. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[out] buf Buffer in which to store the bytes read. Must not be NULL. + * @param[in] count Requested number of bytes to read. + * @param[in] timeout_ms Timeout in milliseconds, or zero to wait indefinitely. + * + * @return The number of bytes read on success, or a negative error code. If + * the number of bytes returned is less than that requested, the + * timeout was reached before the requested number of bytes was + * available. If timeout is zero, the function will always return + * either the requested number of bytes or a negative error code. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_blocking_read(struct sp_port *port, void *buf, size_t count, unsigned int timeout_ms); + +/** + * Read bytes from the specified serial port, returning as soon as any data is + * available. + * + * @warning If your program runs on Unix, defines its own signal handlers, and + * needs to abort blocking reads when these are called, then you + * should not use this function. It repeats system calls that return + * with EINTR. To be able to abort a read from a signal handler, you + * should implement your own blocking read using sp_nonblocking_read() + * together with a blocking method that makes sense for your program. + * E.g. you can obtain the file descriptor for an open port using + * sp_get_port_handle() and use this to call select() or pselect(), + * with appropriate arrangements to return if a signal is received. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[out] buf Buffer in which to store the bytes read. Must not be NULL. + * @param[in] count Maximum number of bytes to read. Must not be zero. + * @param[in] timeout_ms Timeout in milliseconds, or zero to wait indefinitely. + * + * @return The number of bytes read on success, or a negative error code. If + * the result is zero, the timeout was reached before any bytes were + * available. If timeout_ms is zero, the function will always return + * either at least one byte, or a negative error code. + * + * @since 0.1.1 + */ +SP_API enum sp_return sp_blocking_read_next(struct sp_port *port, void *buf, size_t count, unsigned int timeout_ms); + +/** + * Read bytes from the specified serial port, without blocking. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[out] buf Buffer in which to store the bytes read. Must not be NULL. + * @param[in] count Maximum number of bytes to read. + * + * @return The number of bytes read on success, or a negative error code. The + * number of bytes returned may be any number from zero to the maximum + * that was requested. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_nonblocking_read(struct sp_port *port, void *buf, size_t count); + +/** + * Write bytes to the specified serial port, blocking until complete. + * + * Note that this function only ensures that the accepted bytes have been + * written to the OS; they may be held in driver or hardware buffers and not + * yet physically transmitted. To check whether all written bytes have actually + * been transmitted, use the sp_output_waiting() function. To wait until all + * written bytes have actually been transmitted, use the sp_drain() function. + * + * @warning If your program runs on Unix, defines its own signal handlers, and + * needs to abort blocking writes when these are called, then you + * should not use this function. It repeats system calls that return + * with EINTR. To be able to abort a write from a signal handler, you + * should implement your own blocking write using sp_nonblocking_write() + * together with a blocking method that makes sense for your program. + * E.g. you can obtain the file descriptor for an open port using + * sp_get_port_handle() and use this to call select() or pselect(), + * with appropriate arrangements to return if a signal is received. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] buf Buffer containing the bytes to write. Must not be NULL. + * @param[in] count Requested number of bytes to write. + * @param[in] timeout_ms Timeout in milliseconds, or zero to wait indefinitely. + * + * @return The number of bytes written on success, or a negative error code. + * If the number of bytes returned is less than that requested, the + * timeout was reached before the requested number of bytes was + * written. If timeout is zero, the function will always return + * either the requested number of bytes or a negative error code. In + * the event of an error there is no way to determine how many bytes + * were sent before the error occurred. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_blocking_write(struct sp_port *port, const void *buf, size_t count, unsigned int timeout_ms); + +/** + * Write bytes to the specified serial port, without blocking. + * + * Note that this function only ensures that the accepted bytes have been + * written to the OS; they may be held in driver or hardware buffers and not + * yet physically transmitted. To check whether all written bytes have actually + * been transmitted, use the sp_output_waiting() function. To wait until all + * written bytes have actually been transmitted, use the sp_drain() function. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] buf Buffer containing the bytes to write. Must not be NULL. + * @param[in] count Maximum number of bytes to write. + * + * @return The number of bytes written on success, or a negative error code. + * The number of bytes returned may be any number from zero to the + * maximum that was requested. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_nonblocking_write(struct sp_port *port, const void *buf, size_t count); + +/** + * Gets the number of bytes waiting in the input buffer. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @return Number of bytes waiting on success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_input_waiting(struct sp_port *port); + +/** + * Gets the number of bytes waiting in the output buffer. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @return Number of bytes waiting on success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_output_waiting(struct sp_port *port); + +/** + * Flush serial port buffers. Data in the selected buffer(s) is discarded. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] buffers Which buffer(s) to flush. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_flush(struct sp_port *port, enum sp_buffer buffers); + +/** + * Wait for buffered data to be transmitted. + * + * @warning If your program runs on Unix, defines its own signal handlers, and + * needs to abort draining the output buffer when when these are + * called, then you should not use this function. It repeats system + * calls that return with EINTR. To be able to abort a drain from a + * signal handler, you would need to implement your own blocking + * drain by polling the result of sp_output_waiting(). + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_drain(struct sp_port *port); + +/** + * @} + * + * @defgroup Waiting Waiting + * + * Waiting for events and timeout handling. + * + * See @ref await_events.c for an example of awaiting events on multiple ports. + * + * @{ + */ + +/** + * Allocate storage for a set of events. + * + * The user should allocate a variable of type struct sp_event_set *, + * then pass a pointer to this variable to receive the result. + * + * The result should be freed after use by calling sp_free_event_set(). + * + * @param[out] result_ptr If any error is returned, the variable pointed to by + * result_ptr will be set to NULL. Otherwise, it will + * be set to point to the event set. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_new_event_set(struct sp_event_set **result_ptr); + +/** + * Add events to a struct sp_event_set for a given port. + * + * The port must first be opened by calling sp_open() using the same port + * structure. + * + * After the port is closed or the port structure freed, the results may + * no longer be valid. + * + * @param[in,out] event_set Event set to update. Must not be NULL. + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[in] mask Bitmask of events to be waited for. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_add_port_events(struct sp_event_set *event_set, + const struct sp_port *port, enum sp_event mask); + +/** + * Wait for any of a set of events to occur. + * + * @param[in] event_set Event set to wait on. Must not be NULL. + * @param[in] timeout_ms Timeout in milliseconds, or zero to wait indefinitely. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_wait(struct sp_event_set *event_set, unsigned int timeout_ms); + +/** + * Free a structure allocated by sp_new_event_set(). + * + * @param[in] event_set Event set to free. Must not be NULL. + * + * @since 0.1.0 + */ +SP_API void sp_free_event_set(struct sp_event_set *event_set); + +/** + * @} + * + * @defgroup Signals Signals + * + * Port signalling operations. + * + * @{ + */ + +/** + * Gets the status of the control signals for the specified port. + * + * The user should allocate a variable of type "enum sp_signal" and pass a + * pointer to this variable to receive the result. The result is a bitmask + * in which individual signals can be checked by bitwise OR with values of + * the sp_signal enum. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * @param[out] signal_mask Pointer to a variable to receive the result. + * Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_get_signals(struct sp_port *port, enum sp_signal *signal_mask); + +/** + * Put the port transmit line into the break state. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_start_break(struct sp_port *port); + +/** + * Take the port transmit line out of the break state. + * + * @param[in] port Pointer to a port structure. Must not be NULL. + * + * @return SP_OK upon success, a negative error code otherwise. + * + * @since 0.1.0 + */ +SP_API enum sp_return sp_end_break(struct sp_port *port); + +/** + * @} + * + * @defgroup Errors Errors + * + * Obtaining error information. + * + * See @ref handle_errors.c for an example of error handling. + * + * @{ + */ + +/** + * Get the error code for a failed operation. + * + * In order to obtain the correct result, this function should be called + * straight after the failure, before executing any other system operations. + * The result is thread-specific, and only valid when called immediately + * after a previous call returning SP_ERR_FAIL. + * + * @return The system's numeric code for the error that caused the last + * operation to fail. + * + * @since 0.1.0 + */ +SP_API int sp_last_error_code(void); + +/** + * Get the error message for a failed operation. + * + * In order to obtain the correct result, this function should be called + * straight after the failure, before executing other system operations. + * The result is thread-specific, and only valid when called immediately + * after a previous call returning SP_ERR_FAIL. + * + * @return The system's message for the error that caused the last + * operation to fail. This string may be allocated by the function, + * and should be freed after use by calling sp_free_error_message(). + * + * @since 0.1.0 + */ +SP_API char *sp_last_error_message(void); + +/** + * Free an error message returned by sp_last_error_message(). + * + * @param[in] message The error message string to free. Must not be NULL. + * + * @since 0.1.0 + */ +SP_API void sp_free_error_message(char *message); + +/** + * Set the handler function for library debugging messages. + * + * Debugging messages are generated by the library during each operation, + * to help in diagnosing problems. The handler will be called for each + * message. The handler can be set to NULL to ignore all debug messages. + * + * The handler function should accept a format string and variable length + * argument list, in the same manner as e.g. printf(). + * + * The default handler is sp_default_debug_handler(). + * + * @param[in] handler The handler function to use. Can be NULL (in that case + * all debug messages will be ignored). + * + * @since 0.1.0 + */ +SP_API void sp_set_debug_handler(void (*handler)(const char *format, ...)); + +/** + * Default handler function for library debugging messages. + * + * This function prints debug messages to the standard error stream if the + * environment variable LIBSERIALPORT_DEBUG is set. Otherwise, they are + * ignored. + * + * @param[in] format The format string to use. Must not be NULL. + * @param[in] ... The variable length argument list to use. + * + * @since 0.1.0 + */ +SP_API void sp_default_debug_handler(const char *format, ...); + +/** @} */ + +/** + * @defgroup Versions Versions + * + * Version number querying functions, definitions, and macros. + * + * This set of API calls returns two different version numbers related + * to libserialport. The "package version" is the release version number of the + * libserialport tarball in the usual "major.minor.micro" format, e.g. "0.1.0". + * + * The "library version" is independent of that; it is the libtool version + * number in the "current:revision:age" format, e.g. "2:0:0". + * See http://www.gnu.org/software/libtool/manual/libtool.html#Libtool-versioning for details. + * + * Both version numbers (and/or individual components of them) can be + * retrieved via the API calls at runtime, and/or they can be checked at + * compile/preprocessor time using the respective macros. + * + * @{ + */ + +/* + * Package version macros (can be used for conditional compilation). + */ + +/** The libserialport package 'major' version number. */ +#define SP_PACKAGE_VERSION_MAJOR 0 + +/** The libserialport package 'minor' version number. */ +#define SP_PACKAGE_VERSION_MINOR 1 + +/** The libserialport package 'micro' version number. */ +#define SP_PACKAGE_VERSION_MICRO 1 + +/** The libserialport package version ("major.minor.micro") as string. */ +#define SP_PACKAGE_VERSION_STRING "0.1.1" + +/* + * Library/libtool version macros (can be used for conditional compilation). + */ + +/** The libserialport libtool 'current' version number. */ +#define SP_LIB_VERSION_CURRENT 1 + +/** The libserialport libtool 'revision' version number. */ +#define SP_LIB_VERSION_REVISION 0 + +/** The libserialport libtool 'age' version number. */ +#define SP_LIB_VERSION_AGE 1 + +/** The libserialport libtool version ("current:revision:age") as string. */ +#define SP_LIB_VERSION_STRING "1:0:1" + +/** + * Get the major libserialport package version number. + * + * @return The major package version number. + * + * @since 0.1.0 + */ +SP_API int sp_get_major_package_version(void); + +/** + * Get the minor libserialport package version number. + * + * @return The minor package version number. + * + * @since 0.1.0 + */ +SP_API int sp_get_minor_package_version(void); + +/** + * Get the micro libserialport package version number. + * + * @return The micro package version number. + * + * @since 0.1.0 + */ +SP_API int sp_get_micro_package_version(void); + +/** + * Get the libserialport package version number as a string. + * + * @return The package version number string. The returned string is + * static and thus should NOT be free'd by the caller. + * + * @since 0.1.0 + */ +SP_API const char *sp_get_package_version_string(void); + +/** + * Get the "current" part of the libserialport library version number. + * + * @return The "current" library version number. + * + * @since 0.1.0 + */ +SP_API int sp_get_current_lib_version(void); + +/** + * Get the "revision" part of the libserialport library version number. + * + * @return The "revision" library version number. + * + * @since 0.1.0 + */ +SP_API int sp_get_revision_lib_version(void); + +/** + * Get the "age" part of the libserialport library version number. + * + * @return The "age" library version number. + * + * @since 0.1.0 + */ +SP_API int sp_get_age_lib_version(void); + +/** + * Get the libserialport library version number as a string. + * + * @return The library version number string. The returned string is + * static and thus should NOT be free'd by the caller. + * + * @since 0.1.0 + */ +SP_API const char *sp_get_lib_version_string(void); + +/** @} */ + +/** + * @example list_ports.c Getting a list of ports present on the system. + * @example port_info.c Getting information on a particular serial port. + * @example port_config.c Accessing configuration settings of a port. + * @example send_receive.c Sending and receiving data. + * @example await_events.c Awaiting events on multiple ports. + * @example handle_errors.c Handling errors returned from the library. +*/ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/libserialport/libserialport_internal.h b/src/libserialport/libserialport_internal.h new file mode 100644 index 000000000..ecf8fe95f --- /dev/null +++ b/src/libserialport/libserialport_internal.h @@ -0,0 +1,311 @@ +/* + * This file is part of the libserialport project. + * + * Copyright (C) 2014 Martin Ling + * Copyright (C) 2014 Aurelien Jacobs + * + * This program 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 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 Lesser General Public License + * along with this program. If not, see . + */ + +#ifndef LIBSERIALPORT_LIBSERIALPORT_INTERNAL_H +#define LIBSERIALPORT_LIBSERIALPORT_INTERNAL_H + +/* These MSVC-specific defines must appear before other headers.*/ +#ifdef _MSC_VER +#define _CRT_NONSTDC_NO_DEPRECATE +#define _CRT_SECURE_NO_WARNINGS +#endif + +/* These feature test macros must appear before other headers.*/ +#if defined(__linux__) || defined(__CYGWIN__) +/* For timeradd, timersub, timercmp, realpath. */ +#define _BSD_SOURCE 1 /* for glibc < 2.19 */ +#define _DEFAULT_SOURCE 1 /* for glibc >= 2.20 */ +/* For clock_gettime and associated types. */ +#define _POSIX_C_SOURCE 199309L +#endif + +#ifdef LIBSERIALPORT_ATBUILD +/* If building with autoconf, include the generated config.h. */ +#include +#endif + +#ifdef LIBSERIALPORT_MSBUILD +/* If building with MS tools, define necessary things that + would otherwise appear in config.h. */ +#define SP_PRIV +#endif + +#include "libserialport.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef _WIN32 +#include +#include +#include +#include +#undef DEFINE_GUID +#define DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ + static const GUID name = { l,w1,w2,{ b1,b2,b3,b4,b5,b6,b7,b8 } } +#include +#include +/* The largest size that can be passed to WriteFile() safely + * on any architecture. This arises from the expression: + * PAGE_SIZE * (65535 - sizeof(MDL)) / sizeof(ULONG_PTR) + * and this worst-case value is found on x64. */ +#define WRITEFILE_MAX_SIZE 33525760 +#else +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_SYS_FILE_H +#include +#endif +#endif +#ifdef __APPLE__ +#include +#include +#include +#include +#include +#include +#endif +#ifdef __linux__ +#include +/* Android only has linux/serial.h from platform 21 onwards. */ +#if !(defined(__ANDROID__) && (__ANDROID_API__ < 21)) +#include +#endif +#include "linux_termios.h" + +/* TCGETX/TCSETX is not available everywhere. */ +#if defined(TCGETX) && defined(TCSETX) && defined(HAVE_STRUCT_TERMIOX) +#define USE_TERMIOX +#endif +#endif + +/* TIOCINQ/TIOCOUTQ is not available everywhere. */ +#if !defined(TIOCINQ) && defined(FIONREAD) +#define TIOCINQ FIONREAD +#endif +#if !defined(TIOCOUTQ) && defined(FIONWRITE) +#define TIOCOUTQ FIONWRITE +#endif + +/* + * O_CLOEXEC is not available everywhere, fallback to not setting the + * flag on those systems. + */ +#ifndef _WIN32 +#ifndef O_CLOEXEC +#define O_CLOEXEC 0 +#endif +#endif + +/* Non-standard baudrates are not available everywhere. */ +#if (defined(HAVE_TERMIOS_SPEED) || defined(HAVE_TERMIOS2_SPEED)) && HAVE_DECL_BOTHER +#define USE_TERMIOS_SPEED +#endif + +struct sp_port { + char *name; + char *description; + enum sp_transport transport; + int usb_bus; + int usb_address; + int usb_vid; + int usb_pid; + char *usb_manufacturer; + char *usb_product; + char *usb_serial; + char *bluetooth_address; +#ifdef _WIN32 + char *usb_path; + HANDLE hdl; + COMMTIMEOUTS timeouts; + OVERLAPPED write_ovl; + OVERLAPPED read_ovl; + OVERLAPPED wait_ovl; + DWORD events; + BYTE *write_buf; + DWORD write_buf_size; + BOOL writing; + BOOL wait_running; +#else + int fd; +#endif +}; + +struct sp_port_config { + int baudrate; + int bits; + enum sp_parity parity; + int stopbits; + enum sp_rts rts; + enum sp_cts cts; + enum sp_dtr dtr; + enum sp_dsr dsr; + enum sp_xonxoff xon_xoff; +}; + +struct port_data { +#ifdef _WIN32 + DCB dcb; +#else + struct termios term; + int controlbits; + int termiox_supported; + int rts_flow; + int cts_flow; + int dtr_flow; + int dsr_flow; +#endif +}; + +#ifdef _WIN32 +typedef HANDLE event_handle; +#else +typedef int event_handle; +#endif + +/* Standard baud rates. */ +#ifdef _WIN32 +#define BAUD_TYPE DWORD +#define BAUD(n) {CBR_##n, n} +#else +#define BAUD_TYPE speed_t +#define BAUD(n) {B##n, n} +#endif + +struct std_baudrate { + BAUD_TYPE index; + int value; +}; + +#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) + +extern void (*sp_debug_handler)(const char *format, ...); + +/* Debug output macros. */ +#define DEBUG_FMT(fmt, ...) do { \ + if (sp_debug_handler) \ + sp_debug_handler(fmt ".\n", __VA_ARGS__); \ +} while (0) +#define DEBUG(msg) DEBUG_FMT(msg, NULL) +#define DEBUG_ERROR(err, msg) DEBUG_FMT("%s returning " #err ": " msg, __func__) +#define DEBUG_FAIL(msg) do { \ + char *errmsg = sp_last_error_message(); \ + DEBUG_FMT("%s returning SP_ERR_FAIL: " msg ": %s", __func__, errmsg); \ + sp_free_error_message(errmsg); \ +} while (0); +#define RETURN() do { \ + DEBUG_FMT("%s returning", __func__); \ + return; \ +} while (0) +#define RETURN_CODE(x) do { \ + DEBUG_FMT("%s returning " #x, __func__); \ + return x; \ +} while (0) +#define RETURN_CODEVAL(x) do { \ + switch (x) { \ + case SP_OK: RETURN_CODE(SP_OK); \ + case SP_ERR_ARG: RETURN_CODE(SP_ERR_ARG); \ + case SP_ERR_FAIL: RETURN_CODE(SP_ERR_FAIL); \ + case SP_ERR_MEM: RETURN_CODE(SP_ERR_MEM); \ + case SP_ERR_SUPP: RETURN_CODE(SP_ERR_SUPP); \ + default: RETURN_CODE(SP_ERR_FAIL); \ + } \ +} while (0) +#define RETURN_OK() RETURN_CODE(SP_OK); +#define RETURN_ERROR(err, msg) do { \ + DEBUG_ERROR(err, msg); \ + return err; \ +} while (0) +#define RETURN_FAIL(msg) do { \ + DEBUG_FAIL(msg); \ + return SP_ERR_FAIL; \ +} while (0) +#define RETURN_INT(x) do { \ + int _x = x; \ + DEBUG_FMT("%s returning %d", __func__, _x); \ + return _x; \ +} while (0) +#define RETURN_STRING(x) do { \ + char *_x = x; \ + DEBUG_FMT("%s returning %s", __func__, _x); \ + return _x; \ +} while (0) +#define RETURN_POINTER(x) do { \ + void *_x = x; \ + DEBUG_FMT("%s returning %p", __func__, _x); \ + return _x; \ +} while (0) +#define SET_ERROR(val, err, msg) do { DEBUG_ERROR(err, msg); val = err; } while (0) +#define SET_FAIL(val, msg) do { DEBUG_FAIL(msg); val = SP_ERR_FAIL; } while (0) +#define TRACE(fmt, ...) DEBUG_FMT("%s(" fmt ") called", __func__, __VA_ARGS__) +#define TRACE_VOID() DEBUG_FMT("%s() called", __func__) + +#define TRY(x) do { int retval = x; if (retval != SP_OK) RETURN_CODEVAL(retval); } while (0) + +SP_PRIV struct sp_port **list_append(struct sp_port **list, const char *portname); + +/* OS-specific Helper functions. */ +SP_PRIV enum sp_return get_port_details(struct sp_port *port); +SP_PRIV enum sp_return list_ports(struct sp_port ***list); + +/* Timing abstraction */ + +struct time { +#ifdef _WIN32 + int64_t ticks; +#else + struct timeval tv; +#endif +}; + +struct timeout { + unsigned int ms, limit_ms; + struct time start, now, end, delta, delta_max; + struct timeval delta_tv; + bool calls_started, overflow; +}; + +SP_PRIV void time_get(struct time *time); +SP_PRIV void time_set_ms(struct time *time, unsigned int ms); +SP_PRIV void time_add(const struct time *a, const struct time *b, struct time *result); +SP_PRIV void time_sub(const struct time *a, const struct time *b, struct time *result); +SP_PRIV bool time_greater(const struct time *a, const struct time *b); +SP_PRIV void time_as_timeval(const struct time *time, struct timeval *tv); +SP_PRIV unsigned int time_as_ms(const struct time *time); +SP_PRIV void timeout_start(struct timeout *timeout, unsigned int timeout_ms); +SP_PRIV void timeout_limit(struct timeout *timeout, unsigned int limit_ms); +SP_PRIV bool timeout_check(struct timeout *timeout); +SP_PRIV void timeout_update(struct timeout *timeout); +SP_PRIV struct timeval *timeout_timeval(struct timeout *timeout); +SP_PRIV unsigned int timeout_remaining_ms(struct timeout *timeout); + +#endif diff --git a/src/libserialport/serialport.c b/src/libserialport/serialport.c new file mode 100644 index 000000000..e6097eeda --- /dev/null +++ b/src/libserialport/serialport.c @@ -0,0 +1,2624 @@ +/* + * This file is part of the libserialport project. + * + * Copyright (C) 2010-2012 Bert Vermeulen + * Copyright (C) 2010-2015 Uwe Hermann + * Copyright (C) 2013-2015 Martin Ling + * Copyright (C) 2013 Matthias Heidbrink + * Copyright (C) 2014 Aurelien Jacobs + * + * This program 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 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 Lesser General Public License + * along with this program. If not, see . + */ + +#include "libserialport_internal.h" + +static const struct std_baudrate std_baudrates[] = { +#ifdef _WIN32 + /* + * The baudrates 50/75/134/150/200/1800/230400/460800 do not seem to + * have documented CBR_* macros. + */ + BAUD(110), BAUD(300), BAUD(600), BAUD(1200), BAUD(2400), BAUD(4800), + BAUD(9600), BAUD(14400), BAUD(19200), BAUD(38400), BAUD(57600), + BAUD(115200), BAUD(128000), BAUD(256000), +#else + BAUD(50), BAUD(75), BAUD(110), BAUD(134), BAUD(150), BAUD(200), + BAUD(300), BAUD(600), BAUD(1200), BAUD(1800), BAUD(2400), BAUD(4800), + BAUD(9600), BAUD(19200), BAUD(38400), BAUD(57600), BAUD(115200), + BAUD(230400), +#if !defined(__APPLE__) && !defined(__OpenBSD__) + BAUD(460800), +#endif +#endif +}; + +#define NUM_STD_BAUDRATES ARRAY_SIZE(std_baudrates) + +void (*sp_debug_handler)(const char *format, ...) = sp_default_debug_handler; + +static enum sp_return get_config(struct sp_port *port, struct port_data *data, + struct sp_port_config *config); + +static enum sp_return set_config(struct sp_port *port, struct port_data *data, + const struct sp_port_config *config); + +SP_API enum sp_return sp_get_port_by_name(const char *portname, struct sp_port **port_ptr) +{ + struct sp_port *port; +#ifndef NO_PORT_METADATA + enum sp_return ret; +#endif + size_t len; + + TRACE("%s, %p", portname, port_ptr); + + if (!port_ptr) + RETURN_ERROR(SP_ERR_ARG, "Null result pointer"); + + *port_ptr = NULL; + + if (!portname) + RETURN_ERROR(SP_ERR_ARG, "Null port name"); + + DEBUG_FMT("Building structure for port %s", portname); + +#if !defined(_WIN32) && defined(HAVE_REALPATH) + /* + * get_port_details() below tries to be too smart and figure out + * some transport properties from the port name which breaks with + * symlinks. Therefore we canonicalize the portname first. + */ + char pathbuf[PATH_MAX + 1]; + char *res = realpath(portname, pathbuf); + if (!res) + RETURN_ERROR(SP_ERR_ARG, "Could not retrieve realpath behind port name"); + + portname = pathbuf; +#endif + + if (!(port = malloc(sizeof(struct sp_port)))) + RETURN_ERROR(SP_ERR_MEM, "Port structure malloc failed"); + + len = strlen(portname) + 1; + + if (!(port->name = malloc(len))) { + free(port); + RETURN_ERROR(SP_ERR_MEM, "Port name malloc failed"); + } + + memcpy(port->name, portname, len); + +#ifdef _WIN32 + port->usb_path = NULL; + port->hdl = INVALID_HANDLE_VALUE; + port->write_buf = NULL; + port->write_buf_size = 0; +#else + port->fd = -1; +#endif + + port->description = NULL; + port->transport = SP_TRANSPORT_NATIVE; + port->usb_bus = -1; + port->usb_address = -1; + port->usb_vid = -1; + port->usb_pid = -1; + port->usb_manufacturer = NULL; + port->usb_product = NULL; + port->usb_serial = NULL; + port->bluetooth_address = NULL; + +#ifndef NO_PORT_METADATA + if ((ret = get_port_details(port)) != SP_OK) { + sp_free_port(port); + return ret; + } +#endif + + *port_ptr = port; + + RETURN_OK(); +} + +SP_API char *sp_get_port_name(const struct sp_port *port) +{ + TRACE("%p", port); + + if (!port) + return NULL; + + RETURN_STRING(port->name); +} + +SP_API char *sp_get_port_description(const struct sp_port *port) +{ + TRACE("%p", port); + + if (!port || !port->description) + return NULL; + + RETURN_STRING(port->description); +} + +SP_API enum sp_transport sp_get_port_transport(const struct sp_port *port) +{ + TRACE("%p", port); + + RETURN_INT(port ? port->transport : SP_TRANSPORT_NATIVE); +} + +SP_API enum sp_return sp_get_port_usb_bus_address(const struct sp_port *port, + int *usb_bus,int *usb_address) +{ + TRACE("%p", port); + + if (!port) + RETURN_ERROR(SP_ERR_ARG, "Null port"); + if (port->transport != SP_TRANSPORT_USB) + RETURN_ERROR(SP_ERR_ARG, "Port does not use USB transport"); + if (port->usb_bus < 0 || port->usb_address < 0) + RETURN_ERROR(SP_ERR_SUPP, "Bus and address values are not available"); + + if (usb_bus) + *usb_bus = port->usb_bus; + if (usb_address) + *usb_address = port->usb_address; + + RETURN_OK(); +} + +SP_API enum sp_return sp_get_port_usb_vid_pid(const struct sp_port *port, + int *usb_vid, int *usb_pid) +{ + TRACE("%p", port); + + if (!port) + RETURN_ERROR(SP_ERR_ARG, "Null port"); + if (port->transport != SP_TRANSPORT_USB) + RETURN_ERROR(SP_ERR_ARG, "Port does not use USB transport"); + if (port->usb_vid < 0 || port->usb_pid < 0) + RETURN_ERROR(SP_ERR_SUPP, "VID:PID values are not available"); + + if (usb_vid) + *usb_vid = port->usb_vid; + if (usb_pid) + *usb_pid = port->usb_pid; + + RETURN_OK(); +} + +SP_API char *sp_get_port_usb_manufacturer(const struct sp_port *port) +{ + TRACE("%p", port); + + if (!port || port->transport != SP_TRANSPORT_USB || !port->usb_manufacturer) + return NULL; + + RETURN_STRING(port->usb_manufacturer); +} + +SP_API char *sp_get_port_usb_product(const struct sp_port *port) +{ + TRACE("%p", port); + + if (!port || port->transport != SP_TRANSPORT_USB || !port->usb_product) + return NULL; + + RETURN_STRING(port->usb_product); +} + +SP_API char *sp_get_port_usb_serial(const struct sp_port *port) +{ + TRACE("%p", port); + + if (!port || port->transport != SP_TRANSPORT_USB || !port->usb_serial) + return NULL; + + RETURN_STRING(port->usb_serial); +} + +SP_API char *sp_get_port_bluetooth_address(const struct sp_port *port) +{ + TRACE("%p", port); + + if (!port || port->transport != SP_TRANSPORT_BLUETOOTH + || !port->bluetooth_address) + return NULL; + + RETURN_STRING(port->bluetooth_address); +} + +SP_API enum sp_return sp_get_port_handle(const struct sp_port *port, + void *result_ptr) +{ + TRACE("%p, %p", port, result_ptr); + + if (!port) + RETURN_ERROR(SP_ERR_ARG, "Null port"); + if (!result_ptr) + RETURN_ERROR(SP_ERR_ARG, "Null result pointer"); + +#ifdef _WIN32 + HANDLE *handle_ptr = result_ptr; + *handle_ptr = port->hdl; +#else + int *fd_ptr = result_ptr; + *fd_ptr = port->fd; +#endif + + RETURN_OK(); +} + +SP_API enum sp_return sp_copy_port(const struct sp_port *port, + struct sp_port **copy_ptr) +{ + TRACE("%p, %p", port, copy_ptr); + + if (!copy_ptr) + RETURN_ERROR(SP_ERR_ARG, "Null result pointer"); + + *copy_ptr = NULL; + + if (!port) + RETURN_ERROR(SP_ERR_ARG, "Null port"); + + if (!port->name) + RETURN_ERROR(SP_ERR_ARG, "Null port name"); + + DEBUG("Copying port structure"); + + RETURN_INT(sp_get_port_by_name(port->name, copy_ptr)); +} + +SP_API void sp_free_port(struct sp_port *port) +{ + TRACE("%p", port); + + if (!port) { + DEBUG("Null port"); + RETURN(); + } + + DEBUG("Freeing port structure"); + + if (port->name) + free(port->name); + if (port->description) + free(port->description); + if (port->usb_manufacturer) + free(port->usb_manufacturer); + if (port->usb_product) + free(port->usb_product); + if (port->usb_serial) + free(port->usb_serial); + if (port->bluetooth_address) + free(port->bluetooth_address); +#ifdef _WIN32 + if (port->usb_path) + free(port->usb_path); + if (port->write_buf) + free(port->write_buf); +#endif + + free(port); + + RETURN(); +} + +SP_PRIV struct sp_port **list_append(struct sp_port **list, + const char *portname) +{ + void *tmp; + size_t count; + + for (count = 0; list[count]; count++) + ; + if (!(tmp = realloc(list, sizeof(struct sp_port *) * (count + 2)))) + goto fail; + list = tmp; + if (sp_get_port_by_name(portname, &list[count]) != SP_OK) + goto fail; + list[count + 1] = NULL; + return list; + +fail: + sp_free_port_list(list); + return NULL; +} + +SP_API enum sp_return sp_list_ports(struct sp_port ***list_ptr) +{ +#ifndef NO_ENUMERATION + struct sp_port **list; + int ret; +#endif + + TRACE("%p", list_ptr); + + if (!list_ptr) + RETURN_ERROR(SP_ERR_ARG, "Null result pointer"); + + *list_ptr = NULL; + +#ifdef NO_ENUMERATION + RETURN_ERROR(SP_ERR_SUPP, "Enumeration not supported on this platform"); +#else + DEBUG("Enumerating ports"); + + if (!(list = malloc(sizeof(struct sp_port *)))) + RETURN_ERROR(SP_ERR_MEM, "Port list malloc failed"); + + list[0] = NULL; + + ret = list_ports(&list); + + if (ret == SP_OK) { + *list_ptr = list; + } else { + sp_free_port_list(list); + *list_ptr = NULL; + } + + RETURN_CODEVAL(ret); +#endif +} + +SP_API void sp_free_port_list(struct sp_port **list) +{ + unsigned int i; + + TRACE("%p", list); + + if (!list) { + DEBUG("Null list"); + RETURN(); + } + + DEBUG("Freeing port list"); + + for (i = 0; list[i]; i++) + sp_free_port(list[i]); + free(list); + + RETURN(); +} + +#define CHECK_PORT() do { \ + if (!port) \ + RETURN_ERROR(SP_ERR_ARG, "Null port"); \ + if (!port->name) \ + RETURN_ERROR(SP_ERR_ARG, "Null port name"); \ +} while (0) +#ifdef _WIN32 +#define CHECK_PORT_HANDLE() do { \ + if (port->hdl == INVALID_HANDLE_VALUE) \ + RETURN_ERROR(SP_ERR_ARG, "Port not open"); \ +} while (0) +#else +#define CHECK_PORT_HANDLE() do { \ + if (port->fd < 0) \ + RETURN_ERROR(SP_ERR_ARG, "Port not open"); \ +} while (0) +#endif +#define CHECK_OPEN_PORT() do { \ + CHECK_PORT(); \ + CHECK_PORT_HANDLE(); \ +} while (0) + +#ifdef WIN32 +/** To be called after port receive buffer is emptied. */ +static enum sp_return restart_wait(struct sp_port *port) +{ + DWORD wait_result; + + if (port->wait_running) { + /* Check status of running wait operation. */ + if (GetOverlappedResult(port->hdl, &port->wait_ovl, + &wait_result, FALSE)) { + DEBUG("Previous wait completed"); + port->wait_running = FALSE; + } else if (GetLastError() == ERROR_IO_INCOMPLETE) { + DEBUG("Previous wait still running"); + RETURN_OK(); + } else { + RETURN_FAIL("GetOverlappedResult() failed"); + } + } + + if (!port->wait_running) { + /* Start new wait operation. */ + if (WaitCommEvent(port->hdl, &port->events, + &port->wait_ovl)) { + DEBUG("New wait returned, events already pending"); + } else if (GetLastError() == ERROR_IO_PENDING) { + DEBUG("New wait running in background"); + port->wait_running = TRUE; + } else { + RETURN_FAIL("WaitCommEvent() failed"); + } + } + + RETURN_OK(); +} +#endif + +SP_API enum sp_return sp_open(struct sp_port *port, enum sp_mode flags) +{ + struct port_data data; + struct sp_port_config config; + enum sp_return ret; + + TRACE("%p, 0x%x", port, flags); + + CHECK_PORT(); + + if (flags > SP_MODE_READ_WRITE) + RETURN_ERROR(SP_ERR_ARG, "Invalid flags"); + + DEBUG_FMT("Opening port %s", port->name); + +#ifdef _WIN32 + DWORD desired_access = 0, flags_and_attributes = 0, errors; + char *escaped_port_name; + COMSTAT status; + + /* Prefix port name with '\\.\' to work with ports above COM9. */ + if (!(escaped_port_name = malloc(strlen(port->name) + 5))) + RETURN_ERROR(SP_ERR_MEM, "Escaped port name malloc failed"); + sprintf(escaped_port_name, "\\\\.\\%s", port->name); + + /* Map 'flags' to the OS-specific settings. */ + flags_and_attributes = FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED; + if (flags & SP_MODE_READ) + desired_access |= GENERIC_READ; + if (flags & SP_MODE_WRITE) + desired_access |= GENERIC_WRITE; + + port->hdl = CreateFileA(escaped_port_name, desired_access, 0, 0, + OPEN_EXISTING, flags_and_attributes, 0); + + free(escaped_port_name); + + if (port->hdl == INVALID_HANDLE_VALUE) + RETURN_FAIL("Port CreateFile() failed"); + + /* All timeouts initially disabled. */ + port->timeouts.ReadIntervalTimeout = 0; + port->timeouts.ReadTotalTimeoutMultiplier = 0; + port->timeouts.ReadTotalTimeoutConstant = 0; + port->timeouts.WriteTotalTimeoutMultiplier = 0; + port->timeouts.WriteTotalTimeoutConstant = 0; + + if (SetCommTimeouts(port->hdl, &port->timeouts) == 0) { + sp_close(port); + RETURN_FAIL("SetCommTimeouts() failed"); + } + + /* Prepare OVERLAPPED structures. */ +#define INIT_OVERLAPPED(ovl) do { \ + memset(&port->ovl, 0, sizeof(port->ovl)); \ + port->ovl.hEvent = INVALID_HANDLE_VALUE; \ + if ((port->ovl.hEvent = CreateEvent(NULL, TRUE, TRUE, NULL)) \ + == INVALID_HANDLE_VALUE) { \ + sp_close(port); \ + RETURN_FAIL(#ovl "CreateEvent() failed"); \ + } \ +} while (0) + + INIT_OVERLAPPED(read_ovl); + INIT_OVERLAPPED(write_ovl); + INIT_OVERLAPPED(wait_ovl); + + /* Set event mask for RX and error events. */ + if (SetCommMask(port->hdl, EV_RXCHAR | EV_ERR) == 0) { + sp_close(port); + RETURN_FAIL("SetCommMask() failed"); + } + + port->writing = FALSE; + port->wait_running = FALSE; + + ret = restart_wait(port); + + if (ret < 0) { + sp_close(port); + RETURN_CODEVAL(ret); + } +#else + int flags_local = O_NONBLOCK | O_NOCTTY | O_CLOEXEC; + + /* Map 'flags' to the OS-specific settings. */ + if ((flags & SP_MODE_READ_WRITE) == SP_MODE_READ_WRITE) + flags_local |= O_RDWR; + else if (flags & SP_MODE_READ) + flags_local |= O_RDONLY; + else if (flags & SP_MODE_WRITE) + flags_local |= O_WRONLY; + + if ((port->fd = open(port->name, flags_local)) < 0) + RETURN_FAIL("open() failed"); + + /* + * On POSIX in the default case the file descriptor of a serial port + * is not opened exclusively. Therefore the settings of a port are + * overwritten if the serial port is opened a second time. Windows + * opens all serial ports exclusively. + * So the idea is to open the serial ports alike in the exclusive mode. + * + * ioctl(*, TIOCEXCL) defines the file descriptor as exclusive. So all + * further open calls on the serial port will fail. + * + * There is a race condition if two processes open the same serial + * port. None of the processes will notice the exclusive ownership of + * the other process because ioctl() doesn't return an error code if + * the file descriptor is already marked as exclusive. + * This can be solved with flock(). It returns an error if the file + * descriptor is already locked by another process. + */ +#ifdef HAVE_FLOCK + if (flock(port->fd, LOCK_EX | LOCK_NB) < 0) + RETURN_FAIL("flock() failed"); +#endif + +#ifdef TIOCEXCL + /* + * Before Linux 3.8 ioctl(*, TIOCEXCL) was not implemented and could + * lead to EINVAL or ENOTTY. + * These errors aren't fatal and can be ignored. + */ + if (ioctl(port->fd, TIOCEXCL) < 0 && errno != EINVAL && errno != ENOTTY) + RETURN_FAIL("ioctl() failed"); +#endif + +#endif + + ret = get_config(port, &data, &config); + + if (ret < 0) { + sp_close(port); + RETURN_CODEVAL(ret); + } + + /* + * Assume a default baudrate if the OS does not provide one. + * Cannot assign -1 here since Windows holds the baudrate in + * the DCB and does not configure the rate individually. + */ + if (config.baudrate == 0) { + config.baudrate = 9600; + } + + /* Set sane port settings. */ +#ifdef _WIN32 + data.dcb.fBinary = TRUE; + data.dcb.fDsrSensitivity = FALSE; + data.dcb.fErrorChar = FALSE; + data.dcb.fNull = FALSE; + data.dcb.fAbortOnError = FALSE; +#else + /* Turn off all fancy termios tricks, give us a raw channel. */ + data.term.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IMAXBEL); +#ifdef IUCLC + data.term.c_iflag &= ~IUCLC; +#endif + data.term.c_oflag &= ~(OPOST | ONLCR | OCRNL | ONOCR | ONLRET); +#ifdef OLCUC + data.term.c_oflag &= ~OLCUC; +#endif +#ifdef NLDLY + data.term.c_oflag &= ~NLDLY; +#endif +#ifdef CRDLY + data.term.c_oflag &= ~CRDLY; +#endif +#ifdef TABDLY + data.term.c_oflag &= ~TABDLY; +#endif +#ifdef BSDLY + data.term.c_oflag &= ~BSDLY; +#endif +#ifdef VTDLY + data.term.c_oflag &= ~VTDLY; +#endif +#ifdef FFDLY + data.term.c_oflag &= ~FFDLY; +#endif +#ifdef OFILL + data.term.c_oflag &= ~OFILL; +#endif + data.term.c_lflag &= ~(ISIG | ICANON | ECHO | IEXTEN); + data.term.c_cc[VMIN] = 0; + data.term.c_cc[VTIME] = 0; + + /* Ignore modem status lines; enable receiver; leave control lines alone on close. */ + data.term.c_cflag |= (CLOCAL | CREAD); + data.term.c_cflag &= ~(HUPCL); +#endif + +#ifdef _WIN32 + if (ClearCommError(port->hdl, &errors, &status) == 0) + RETURN_FAIL("ClearCommError() failed"); +#endif + + ret = set_config(port, &data, &config); + + if (ret < 0) { + sp_close(port); + RETURN_CODEVAL(ret); + } + + RETURN_OK(); +} + +SP_API enum sp_return sp_close(struct sp_port *port) +{ + TRACE("%p", port); + + CHECK_OPEN_PORT(); + + DEBUG_FMT("Closing port %s", port->name); + +#ifdef _WIN32 + /* Returns non-zero upon success, 0 upon failure. */ + if (CloseHandle(port->hdl) == 0) + RETURN_FAIL("Port CloseHandle() failed"); + port->hdl = INVALID_HANDLE_VALUE; + + /* Close event handles for overlapped structures. */ +#define CLOSE_OVERLAPPED(ovl) do { \ + if (port->ovl.hEvent != INVALID_HANDLE_VALUE && \ + CloseHandle(port->ovl.hEvent) == 0) \ + RETURN_FAIL(# ovl "event CloseHandle() failed"); \ +} while (0) + CLOSE_OVERLAPPED(read_ovl); + CLOSE_OVERLAPPED(write_ovl); + CLOSE_OVERLAPPED(wait_ovl); + + if (port->write_buf) { + free(port->write_buf); + port->write_buf = NULL; + } +#else + /* Returns 0 upon success, -1 upon failure. */ + if (close(port->fd) == -1) + RETURN_FAIL("close() failed"); + port->fd = -1; +#endif + + RETURN_OK(); +} + +SP_API enum sp_return sp_flush(struct sp_port *port, enum sp_buffer buffers) +{ + TRACE("%p, 0x%x", port, buffers); + + CHECK_OPEN_PORT(); + + if (buffers > SP_BUF_BOTH) + RETURN_ERROR(SP_ERR_ARG, "Invalid buffer selection"); + + const char *buffer_names[] = {"no", "input", "output", "both"}; + + DEBUG_FMT("Flushing %s buffers on port %s", + buffer_names[buffers], port->name); + +#ifdef _WIN32 + DWORD flags = 0; + if (buffers & SP_BUF_INPUT) + flags |= PURGE_RXCLEAR; + if (buffers & SP_BUF_OUTPUT) + flags |= PURGE_TXCLEAR; + + /* Returns non-zero upon success, 0 upon failure. */ + if (PurgeComm(port->hdl, flags) == 0) + RETURN_FAIL("PurgeComm() failed"); + + if (buffers & SP_BUF_INPUT) + TRY(restart_wait(port)); +#else + int flags = 0; + if (buffers == SP_BUF_BOTH) + flags = TCIOFLUSH; + else if (buffers == SP_BUF_INPUT) + flags = TCIFLUSH; + else if (buffers == SP_BUF_OUTPUT) + flags = TCOFLUSH; + + /* Returns 0 upon success, -1 upon failure. */ + if (tcflush(port->fd, flags) < 0) + RETURN_FAIL("tcflush() failed"); +#endif + RETURN_OK(); +} + +SP_API enum sp_return sp_drain(struct sp_port *port) +{ + TRACE("%p", port); + + CHECK_OPEN_PORT(); + + DEBUG_FMT("Draining port %s", port->name); + +#ifdef _WIN32 + /* Returns non-zero upon success, 0 upon failure. */ + if (FlushFileBuffers(port->hdl) == 0) + RETURN_FAIL("FlushFileBuffers() failed"); + RETURN_OK(); +#else + int result; + while (1) { +#if defined(__ANDROID__) && (__ANDROID_API__ < 21) + /* Android only has tcdrain from platform 21 onwards. + * On previous API versions, use the ioctl directly. */ + int arg = 1; + result = ioctl(port->fd, TCSBRK, &arg); +#else + result = tcdrain(port->fd); +#endif + if (result < 0) { + if (errno == EINTR) { + DEBUG("tcdrain() was interrupted"); + continue; + } else { + RETURN_FAIL("tcdrain() failed"); + } + } else { + RETURN_OK(); + } + } +#endif +} + +#ifdef _WIN32 +static enum sp_return await_write_completion(struct sp_port *port) +{ + TRACE("%p", port); + DWORD bytes_written; + BOOL result; + + /* Wait for previous non-blocking write to complete, if any. */ + if (port->writing) { + DEBUG("Waiting for previous write to complete"); + result = GetOverlappedResult(port->hdl, &port->write_ovl, &bytes_written, TRUE); + port->writing = 0; + if (!result) + RETURN_FAIL("Previous write failed to complete"); + DEBUG("Previous write completed"); + } + + RETURN_OK(); +} +#endif + +SP_API enum sp_return sp_blocking_write(struct sp_port *port, const void *buf, + size_t count, unsigned int timeout_ms) +{ + TRACE("%p, %p, %d, %d", port, buf, count, timeout_ms); + + CHECK_OPEN_PORT(); + + if (!buf) + RETURN_ERROR(SP_ERR_ARG, "Null buffer"); + + if (timeout_ms) + DEBUG_FMT("Writing %d bytes to port %s, timeout %d ms", + count, port->name, timeout_ms); + else + DEBUG_FMT("Writing %d bytes to port %s, no timeout", + count, port->name); + + if (count == 0) + RETURN_INT(0); + +#ifdef _WIN32 + DWORD remaining_ms, write_size, bytes_written; + size_t remaining_bytes, total_bytes_written = 0; + const uint8_t *write_ptr = (uint8_t *) buf; + bool result; + struct timeout timeout; + + timeout_start(&timeout, timeout_ms); + + TRY(await_write_completion(port)); + + while (total_bytes_written < count) { + + if (timeout_check(&timeout)) + break; + + remaining_ms = timeout_remaining_ms(&timeout); + + if (port->timeouts.WriteTotalTimeoutConstant != remaining_ms) { + port->timeouts.WriteTotalTimeoutConstant = remaining_ms; + if (SetCommTimeouts(port->hdl, &port->timeouts) == 0) + RETURN_FAIL("SetCommTimeouts() failed"); + } + + /* Reduce write size if it exceeds the WriteFile limit. */ + remaining_bytes = count - total_bytes_written; + if (remaining_bytes > WRITEFILE_MAX_SIZE) + write_size = WRITEFILE_MAX_SIZE; + else + write_size = (DWORD) remaining_bytes; + + /* Start write. */ + + result = WriteFile(port->hdl, write_ptr, write_size, NULL, &port->write_ovl); + + timeout_update(&timeout); + + if (result) { + DEBUG("Write completed immediately"); + bytes_written = write_size; + } else if (GetLastError() == ERROR_IO_PENDING) { + DEBUG("Waiting for write to complete"); + if (GetOverlappedResult(port->hdl, &port->write_ovl, &bytes_written, TRUE) == 0) { + if (GetLastError() == ERROR_SEM_TIMEOUT) { + DEBUG("Write timed out"); + break; + } else { + RETURN_FAIL("GetOverlappedResult() failed"); + } + } + DEBUG_FMT("Write completed, %d/%d bytes written", bytes_written, write_size); + } else { + RETURN_FAIL("WriteFile() failed"); + } + + write_ptr += bytes_written; + total_bytes_written += bytes_written; + } + + RETURN_INT((int) total_bytes_written); +#else + size_t bytes_written = 0; + unsigned char *ptr = (unsigned char *) buf; + struct timeout timeout; + fd_set fds; + int result; + + timeout_start(&timeout, timeout_ms); + + FD_ZERO(&fds); + FD_SET(port->fd, &fds); + + /* Loop until we have written the requested number of bytes. */ + while (bytes_written < count) { + + if (timeout_check(&timeout)) + break; + + result = select(port->fd + 1, NULL, &fds, NULL, timeout_timeval(&timeout)); + + timeout_update(&timeout); + + if (result < 0) { + if (errno == EINTR) { + DEBUG("select() call was interrupted, repeating"); + continue; + } else { + RETURN_FAIL("select() failed"); + } + } else if (result == 0) { + /* Timeout has expired. */ + break; + } + + /* Do write. */ + result = write(port->fd, ptr, count - bytes_written); + + if (result < 0) { + if (errno == EAGAIN) + /* This shouldn't happen because we did a select() first, but handle anyway. */ + continue; + else + /* This is an actual failure. */ + RETURN_FAIL("write() failed"); + } + + bytes_written += result; + ptr += result; + } + + if (bytes_written < count) + DEBUG("Write timed out"); + + RETURN_INT(bytes_written); +#endif +} + +SP_API enum sp_return sp_nonblocking_write(struct sp_port *port, + const void *buf, size_t count) +{ + TRACE("%p, %p, %d", port, buf, count); + + CHECK_OPEN_PORT(); + + if (!buf) + RETURN_ERROR(SP_ERR_ARG, "Null buffer"); + + DEBUG_FMT("Writing up to %d bytes to port %s", count, port->name); + + if (count == 0) + RETURN_INT(0); + +#ifdef _WIN32 + size_t buf_bytes; + + /* Check whether previous write is complete. */ + if (port->writing) { + if (HasOverlappedIoCompleted(&port->write_ovl)) { + DEBUG("Previous write completed"); + port->writing = 0; + } else { + DEBUG("Previous write not complete"); + /* Can't take a new write until the previous one finishes. */ + RETURN_INT(0); + } + } + + /* Set timeout. */ + if (port->timeouts.WriteTotalTimeoutConstant != 0) { + port->timeouts.WriteTotalTimeoutConstant = 0; + if (SetCommTimeouts(port->hdl, &port->timeouts) == 0) + RETURN_FAIL("SetCommTimeouts() failed"); + } + + /* Reduce count if it exceeds the WriteFile limit. */ + if (count > WRITEFILE_MAX_SIZE) + count = WRITEFILE_MAX_SIZE; + + /* Copy data to our write buffer. */ + buf_bytes = min(port->write_buf_size, count); + memcpy(port->write_buf, buf, buf_bytes); + + /* Start asynchronous write. */ + if (WriteFile(port->hdl, port->write_buf, (DWORD) buf_bytes, NULL, &port->write_ovl) == 0) { + if (GetLastError() == ERROR_IO_PENDING) { + if ((port->writing = !HasOverlappedIoCompleted(&port->write_ovl))) + DEBUG("Asynchronous write completed immediately"); + else + DEBUG("Asynchronous write running"); + } else { + /* Actual failure of some kind. */ + RETURN_FAIL("WriteFile() failed"); + } + } + + DEBUG("All bytes written immediately"); + + RETURN_INT((int) buf_bytes); +#else + /* Returns the number of bytes written, or -1 upon failure. */ + ssize_t written = write(port->fd, buf, count); + + if (written < 0) { + if (errno == EAGAIN) + // Buffer is full, no bytes written. + RETURN_INT(0); + else + RETURN_FAIL("write() failed"); + } else { + RETURN_INT(written); + } +#endif +} + +#ifdef _WIN32 +/* Restart wait operation if buffer was emptied. */ +static enum sp_return restart_wait_if_needed(struct sp_port *port, unsigned int bytes_read) +{ + DWORD errors; + COMSTAT comstat; + + if (bytes_read == 0) + RETURN_OK(); + + if (ClearCommError(port->hdl, &errors, &comstat) == 0) + RETURN_FAIL("ClearCommError() failed"); + + if (comstat.cbInQue == 0) + TRY(restart_wait(port)); + + RETURN_OK(); +} +#endif + +SP_API enum sp_return sp_blocking_read(struct sp_port *port, void *buf, + size_t count, unsigned int timeout_ms) +{ + TRACE("%p, %p, %d, %d", port, buf, count, timeout_ms); + + CHECK_OPEN_PORT(); + + if (!buf) + RETURN_ERROR(SP_ERR_ARG, "Null buffer"); + + if (timeout_ms) + DEBUG_FMT("Reading %d bytes from port %s, timeout %d ms", + count, port->name, timeout_ms); + else + DEBUG_FMT("Reading %d bytes from port %s, no timeout", + count, port->name); + + if (count == 0) + RETURN_INT(0); + +#ifdef _WIN32 + DWORD bytes_read; + + /* Set timeout. */ + if (port->timeouts.ReadIntervalTimeout != 0 || + port->timeouts.ReadTotalTimeoutMultiplier != 0 || + port->timeouts.ReadTotalTimeoutConstant != timeout_ms) { + port->timeouts.ReadIntervalTimeout = 0; + port->timeouts.ReadTotalTimeoutMultiplier = 0; + port->timeouts.ReadTotalTimeoutConstant = timeout_ms; + if (SetCommTimeouts(port->hdl, &port->timeouts) == 0) + RETURN_FAIL("SetCommTimeouts() failed"); + } + + /* Start read. */ + if (ReadFile(port->hdl, buf, (DWORD) count, NULL, &port->read_ovl)) { + DEBUG("Read completed immediately"); + bytes_read = (DWORD) count; + } else if (GetLastError() == ERROR_IO_PENDING) { + DEBUG("Waiting for read to complete"); + if (GetOverlappedResult(port->hdl, &port->read_ovl, &bytes_read, TRUE) == 0) + RETURN_FAIL("GetOverlappedResult() failed"); + DEBUG_FMT("Read completed, %d/%d bytes read", bytes_read, count); + } else { + RETURN_FAIL("ReadFile() failed"); + } + + TRY(restart_wait_if_needed(port, bytes_read)); + + RETURN_INT((int) bytes_read); + +#else + size_t bytes_read = 0; + unsigned char *ptr = (unsigned char *) buf; + struct timeout timeout; + fd_set fds; + int result; + + timeout_start(&timeout, timeout_ms); + + FD_ZERO(&fds); + FD_SET(port->fd, &fds); + + /* Loop until we have the requested number of bytes. */ + while (bytes_read < count) { + + if (timeout_check(&timeout)) + /* Timeout has expired. */ + break; + + result = select(port->fd + 1, &fds, NULL, NULL, timeout_timeval(&timeout)); + + timeout_update(&timeout); + + if (result < 0) { + if (errno == EINTR) { + DEBUG("select() call was interrupted, repeating"); + continue; + } else { + RETURN_FAIL("select() failed"); + } + } else if (result == 0) { + /* Timeout has expired. */ + break; + } + + /* Do read. */ + result = read(port->fd, ptr, count - bytes_read); + + if (result < 0) { + if (errno == EAGAIN) + /* + * This shouldn't happen because we did a + * select() first, but handle anyway. + */ + continue; + else + /* This is an actual failure. */ + RETURN_FAIL("read() failed"); + } + + bytes_read += result; + ptr += result; + } + + if (bytes_read < count) + DEBUG("Read timed out"); + + RETURN_INT(bytes_read); +#endif +} + +SP_API enum sp_return sp_blocking_read_next(struct sp_port *port, void *buf, + size_t count, unsigned int timeout_ms) +{ + TRACE("%p, %p, %d, %d", port, buf, count, timeout_ms); + + CHECK_OPEN_PORT(); + + if (!buf) + RETURN_ERROR(SP_ERR_ARG, "Null buffer"); + + if (count == 0) + RETURN_ERROR(SP_ERR_ARG, "Zero count"); + + if (timeout_ms) + DEBUG_FMT("Reading next max %d bytes from port %s, timeout %d ms", + count, port->name, timeout_ms); + else + DEBUG_FMT("Reading next max %d bytes from port %s, no timeout", + count, port->name); + +#ifdef _WIN32 + DWORD bytes_read = 0; + + /* If timeout_ms == 0, set maximum timeout. */ + DWORD timeout_val = (timeout_ms == 0 ? MAXDWORD - 1 : timeout_ms); + + /* Set timeout. */ + if (port->timeouts.ReadIntervalTimeout != MAXDWORD || + port->timeouts.ReadTotalTimeoutMultiplier != MAXDWORD || + port->timeouts.ReadTotalTimeoutConstant != timeout_val) { + port->timeouts.ReadIntervalTimeout = MAXDWORD; + port->timeouts.ReadTotalTimeoutMultiplier = MAXDWORD; + port->timeouts.ReadTotalTimeoutConstant = timeout_val; + if (SetCommTimeouts(port->hdl, &port->timeouts) == 0) + RETURN_FAIL("SetCommTimeouts() failed"); + } + + /* Loop until we have at least one byte, or timeout is reached. */ + while (bytes_read == 0) { + /* Start read. */ + if (ReadFile(port->hdl, buf, (DWORD) count, &bytes_read, &port->read_ovl)) { + DEBUG("Read completed immediately"); + } else if (GetLastError() == ERROR_IO_PENDING) { + DEBUG("Waiting for read to complete"); + if (GetOverlappedResult(port->hdl, &port->read_ovl, &bytes_read, TRUE) == 0) + RETURN_FAIL("GetOverlappedResult() failed"); + if (bytes_read > 0) { + DEBUG("Read completed"); + } else if (timeout_ms > 0) { + DEBUG("Read timed out"); + break; + } else { + DEBUG("Restarting read"); + } + } else { + RETURN_FAIL("ReadFile() failed"); + } + } + + TRY(restart_wait_if_needed(port, bytes_read)); + + RETURN_INT(bytes_read); + +#else + size_t bytes_read = 0; + struct timeout timeout; + fd_set fds; + int result; + + timeout_start(&timeout, timeout_ms); + + FD_ZERO(&fds); + FD_SET(port->fd, &fds); + + /* Loop until we have at least one byte, or timeout is reached. */ + while (bytes_read == 0) { + + if (timeout_check(&timeout)) + /* Timeout has expired. */ + break; + + result = select(port->fd + 1, &fds, NULL, NULL, timeout_timeval(&timeout)); + + timeout_update(&timeout); + + if (result < 0) { + if (errno == EINTR) { + DEBUG("select() call was interrupted, repeating"); + continue; + } else { + RETURN_FAIL("select() failed"); + } + } else if (result == 0) { + /* Timeout has expired. */ + break; + } + + /* Do read. */ + result = read(port->fd, buf, count); + + if (result < 0) { + if (errno == EAGAIN) + /* This shouldn't happen because we did a select() first, but handle anyway. */ + continue; + else + /* This is an actual failure. */ + RETURN_FAIL("read() failed"); + } + + bytes_read = result; + } + + if (bytes_read == 0) + DEBUG("Read timed out"); + + RETURN_INT(bytes_read); +#endif +} + +SP_API enum sp_return sp_nonblocking_read(struct sp_port *port, void *buf, + size_t count) +{ + TRACE("%p, %p, %d", port, buf, count); + + CHECK_OPEN_PORT(); + + if (!buf) + RETURN_ERROR(SP_ERR_ARG, "Null buffer"); + + DEBUG_FMT("Reading up to %d bytes from port %s", count, port->name); + +#ifdef _WIN32 + DWORD bytes_read; + + /* Set timeout. */ + if (port->timeouts.ReadIntervalTimeout != MAXDWORD || + port->timeouts.ReadTotalTimeoutMultiplier != 0 || + port->timeouts.ReadTotalTimeoutConstant != 0) { + port->timeouts.ReadIntervalTimeout = MAXDWORD; + port->timeouts.ReadTotalTimeoutMultiplier = 0; + port->timeouts.ReadTotalTimeoutConstant = 0; + if (SetCommTimeouts(port->hdl, &port->timeouts) == 0) + RETURN_FAIL("SetCommTimeouts() failed"); + } + + /* Do read. */ + if (ReadFile(port->hdl, buf, (DWORD) count, NULL, &port->read_ovl) == 0) + if (GetLastError() != ERROR_IO_PENDING) + RETURN_FAIL("ReadFile() failed"); + + /* Get number of bytes read. */ + if (GetOverlappedResult(port->hdl, &port->read_ovl, &bytes_read, FALSE) == 0) + RETURN_FAIL("GetOverlappedResult() failed"); + + TRY(restart_wait_if_needed(port, bytes_read)); + + RETURN_INT(bytes_read); +#else + ssize_t bytes_read; + + /* Returns the number of bytes read, or -1 upon failure. */ + if ((bytes_read = read(port->fd, buf, count)) < 0) { + if (errno == EAGAIN) + /* No bytes available. */ + bytes_read = 0; + else + /* This is an actual failure. */ + RETURN_FAIL("read() failed"); + } + RETURN_INT(bytes_read); +#endif +} + +SP_API enum sp_return sp_input_waiting(struct sp_port *port) +{ + TRACE("%p", port); + + CHECK_OPEN_PORT(); + + DEBUG_FMT("Checking input bytes waiting on port %s", port->name); + +#ifdef _WIN32 + DWORD errors; + COMSTAT comstat; + + if (ClearCommError(port->hdl, &errors, &comstat) == 0) + RETURN_FAIL("ClearCommError() failed"); + RETURN_INT(comstat.cbInQue); +#else + int bytes_waiting; + if (ioctl(port->fd, TIOCINQ, &bytes_waiting) < 0) + RETURN_FAIL("TIOCINQ ioctl failed"); + RETURN_INT(bytes_waiting); +#endif +} + +SP_API enum sp_return sp_output_waiting(struct sp_port *port) +{ + TRACE("%p", port); + +#ifdef __CYGWIN__ + /* TIOCOUTQ is not defined in Cygwin headers */ + RETURN_ERROR(SP_ERR_SUPP, + "Getting output bytes waiting is not supported on Cygwin"); +#else + CHECK_OPEN_PORT(); + + DEBUG_FMT("Checking output bytes waiting on port %s", port->name); + +#ifdef _WIN32 + DWORD errors; + COMSTAT comstat; + + if (ClearCommError(port->hdl, &errors, &comstat) == 0) + RETURN_FAIL("ClearCommError() failed"); + RETURN_INT(comstat.cbOutQue); +#else + int bytes_waiting; + if (ioctl(port->fd, TIOCOUTQ, &bytes_waiting) < 0) + RETURN_FAIL("TIOCOUTQ ioctl failed"); + RETURN_INT(bytes_waiting); +#endif +#endif +} + +SP_API enum sp_return sp_new_event_set(struct sp_event_set **result_ptr) +{ + struct sp_event_set *result; + + TRACE("%p", result_ptr); + + if (!result_ptr) + RETURN_ERROR(SP_ERR_ARG, "Null result"); + + *result_ptr = NULL; + + if (!(result = malloc(sizeof(struct sp_event_set)))) + RETURN_ERROR(SP_ERR_MEM, "sp_event_set malloc() failed"); + + memset(result, 0, sizeof(struct sp_event_set)); + + *result_ptr = result; + + RETURN_OK(); +} + +static enum sp_return add_handle(struct sp_event_set *event_set, + event_handle handle, enum sp_event mask) +{ + void *new_handles; + enum sp_event *new_masks; + + TRACE("%p, %d, %d", event_set, handle, mask); + + if (!(new_handles = realloc(event_set->handles, + sizeof(event_handle) * (event_set->count + 1)))) + RETURN_ERROR(SP_ERR_MEM, "Handle array realloc() failed"); + + event_set->handles = new_handles; + + if (!(new_masks = realloc(event_set->masks, + sizeof(enum sp_event) * (event_set->count + 1)))) + RETURN_ERROR(SP_ERR_MEM, "Mask array realloc() failed"); + + event_set->masks = new_masks; + + ((event_handle *) event_set->handles)[event_set->count] = handle; + event_set->masks[event_set->count] = mask; + + event_set->count++; + + RETURN_OK(); +} + +SP_API enum sp_return sp_add_port_events(struct sp_event_set *event_set, + const struct sp_port *port, enum sp_event mask) +{ + TRACE("%p, %p, %d", event_set, port, mask); + + if (!event_set) + RETURN_ERROR(SP_ERR_ARG, "Null event set"); + + if (!port) + RETURN_ERROR(SP_ERR_ARG, "Null port"); + + if (mask > (SP_EVENT_RX_READY | SP_EVENT_TX_READY | SP_EVENT_ERROR)) + RETURN_ERROR(SP_ERR_ARG, "Invalid event mask"); + + if (!mask) + RETURN_OK(); + +#ifdef _WIN32 + enum sp_event handle_mask; + if ((handle_mask = mask & SP_EVENT_TX_READY)) + TRY(add_handle(event_set, port->write_ovl.hEvent, handle_mask)); + if ((handle_mask = mask & (SP_EVENT_RX_READY | SP_EVENT_ERROR))) + TRY(add_handle(event_set, port->wait_ovl.hEvent, handle_mask)); +#else + TRY(add_handle(event_set, port->fd, mask)); +#endif + + RETURN_OK(); +} + +SP_API void sp_free_event_set(struct sp_event_set *event_set) +{ + TRACE("%p", event_set); + + if (!event_set) { + DEBUG("Null event set"); + RETURN(); + } + + DEBUG("Freeing event set"); + + if (event_set->handles) + free(event_set->handles); + if (event_set->masks) + free(event_set->masks); + + free(event_set); + + RETURN(); +} + +SP_API enum sp_return sp_wait(struct sp_event_set *event_set, + unsigned int timeout_ms) +{ + TRACE("%p, %d", event_set, timeout_ms); + + if (!event_set) + RETURN_ERROR(SP_ERR_ARG, "Null event set"); + +#ifdef _WIN32 + if (WaitForMultipleObjects(event_set->count, event_set->handles, FALSE, + timeout_ms ? timeout_ms : INFINITE) == WAIT_FAILED) + RETURN_FAIL("WaitForMultipleObjects() failed"); + + RETURN_OK(); +#else + struct timeout timeout; + int poll_timeout; + int result; + struct pollfd *pollfds; + unsigned int i; + + if (!(pollfds = malloc(sizeof(struct pollfd) * event_set->count))) + RETURN_ERROR(SP_ERR_MEM, "pollfds malloc() failed"); + + for (i = 0; i < event_set->count; i++) { + pollfds[i].fd = ((int *)event_set->handles)[i]; + pollfds[i].events = 0; + pollfds[i].revents = 0; + if (event_set->masks[i] & SP_EVENT_RX_READY) + pollfds[i].events |= POLLIN; + if (event_set->masks[i] & SP_EVENT_TX_READY) + pollfds[i].events |= POLLOUT; + if (event_set->masks[i] & SP_EVENT_ERROR) + pollfds[i].events |= POLLERR; + } + + timeout_start(&timeout, timeout_ms); + timeout_limit(&timeout, INT_MAX); + + /* Loop until an event occurs. */ + while (1) { + + if (timeout_check(&timeout)) { + DEBUG("Wait timed out"); + break; + } + + poll_timeout = (int) timeout_remaining_ms(&timeout); + if (poll_timeout == 0) + poll_timeout = -1; + + result = poll(pollfds, event_set->count, poll_timeout); + + timeout_update(&timeout); + + if (result < 0) { + if (errno == EINTR) { + DEBUG("poll() call was interrupted, repeating"); + continue; + } else { + free(pollfds); + RETURN_FAIL("poll() failed"); + } + } else if (result == 0) { + DEBUG("poll() timed out"); + if (!timeout.overflow) + break; + } else { + DEBUG("poll() completed"); + break; + } + } + + free(pollfds); + RETURN_OK(); +#endif +} + +#ifdef USE_TERMIOS_SPEED +static enum sp_return get_baudrate(int fd, int *baudrate) +{ + void *data; + + TRACE("%d, %p", fd, baudrate); + + DEBUG("Getting baud rate"); + + if (!(data = malloc(get_termios_size()))) + RETURN_ERROR(SP_ERR_MEM, "termios malloc failed"); + + if (ioctl(fd, get_termios_get_ioctl(), data) < 0) { + free(data); + RETURN_FAIL("Getting termios failed"); + } + + *baudrate = get_termios_speed(data); + + free(data); + + RETURN_OK(); +} + +static enum sp_return set_baudrate(int fd, int baudrate) +{ + void *data; + + TRACE("%d, %d", fd, baudrate); + + DEBUG("Getting baud rate"); + + if (!(data = malloc(get_termios_size()))) + RETURN_ERROR(SP_ERR_MEM, "termios malloc failed"); + + if (ioctl(fd, get_termios_get_ioctl(), data) < 0) { + free(data); + RETURN_FAIL("Getting termios failed"); + } + + DEBUG("Setting baud rate"); + + set_termios_speed(data, baudrate); + + if (ioctl(fd, get_termios_set_ioctl(), data) < 0) { + free(data); + RETURN_FAIL("Setting termios failed"); + } + + free(data); + + RETURN_OK(); +} +#endif /* USE_TERMIOS_SPEED */ + +#ifdef USE_TERMIOX +static enum sp_return get_flow(int fd, struct port_data *data) +{ + void *termx; + + TRACE("%d, %p", fd, data); + + DEBUG("Getting advanced flow control"); + + if (!(termx = malloc(get_termiox_size()))) + RETURN_ERROR(SP_ERR_MEM, "termiox malloc failed"); + + if (ioctl(fd, TCGETX, termx) < 0) { + free(termx); + RETURN_FAIL("Getting termiox failed"); + } + + get_termiox_flow(termx, &data->rts_flow, &data->cts_flow, + &data->dtr_flow, &data->dsr_flow); + + free(termx); + + RETURN_OK(); +} + +static enum sp_return set_flow(int fd, struct port_data *data) +{ + void *termx; + + TRACE("%d, %p", fd, data); + + DEBUG("Getting advanced flow control"); + + if (!(termx = malloc(get_termiox_size()))) + RETURN_ERROR(SP_ERR_MEM, "termiox malloc failed"); + + if (ioctl(fd, TCGETX, termx) < 0) { + free(termx); + RETURN_FAIL("Getting termiox failed"); + } + + DEBUG("Setting advanced flow control"); + + set_termiox_flow(termx, data->rts_flow, data->cts_flow, + data->dtr_flow, data->dsr_flow); + + if (ioctl(fd, TCSETX, termx) < 0) { + free(termx); + RETURN_FAIL("Setting termiox failed"); + } + + free(termx); + + RETURN_OK(); +} +#endif /* USE_TERMIOX */ + +static enum sp_return get_config(struct sp_port *port, struct port_data *data, + struct sp_port_config *config) +{ + unsigned int i; + + TRACE("%p, %p, %p", port, data, config); + + DEBUG_FMT("Getting configuration for port %s", port->name); + +#ifdef _WIN32 + if (!GetCommState(port->hdl, &data->dcb)) + RETURN_FAIL("GetCommState() failed"); + + for (i = 0; i < NUM_STD_BAUDRATES; i++) { + if (data->dcb.BaudRate == std_baudrates[i].index) { + config->baudrate = std_baudrates[i].value; + break; + } + } + + if (i == NUM_STD_BAUDRATES) + /* BaudRate field can be either an index or a custom baud rate. */ + config->baudrate = data->dcb.BaudRate; + + config->bits = data->dcb.ByteSize; + + switch (data->dcb.Parity) { + case NOPARITY: + config->parity = SP_PARITY_NONE; + break; + case ODDPARITY: + config->parity = SP_PARITY_ODD; + break; + case EVENPARITY: + config->parity = SP_PARITY_EVEN; + break; + case MARKPARITY: + config->parity = SP_PARITY_MARK; + break; + case SPACEPARITY: + config->parity = SP_PARITY_SPACE; + break; + default: + config->parity = -1; + } + + switch (data->dcb.StopBits) { + case ONESTOPBIT: + config->stopbits = 1; + break; + case TWOSTOPBITS: + config->stopbits = 2; + break; + default: + config->stopbits = -1; + } + + switch (data->dcb.fRtsControl) { + case RTS_CONTROL_DISABLE: + config->rts = SP_RTS_OFF; + break; + case RTS_CONTROL_ENABLE: + config->rts = SP_RTS_ON; + break; + case RTS_CONTROL_HANDSHAKE: + config->rts = SP_RTS_FLOW_CONTROL; + break; + default: + config->rts = -1; + } + + config->cts = data->dcb.fOutxCtsFlow ? SP_CTS_FLOW_CONTROL : SP_CTS_IGNORE; + + switch (data->dcb.fDtrControl) { + case DTR_CONTROL_DISABLE: + config->dtr = SP_DTR_OFF; + break; + case DTR_CONTROL_ENABLE: + config->dtr = SP_DTR_ON; + break; + case DTR_CONTROL_HANDSHAKE: + config->dtr = SP_DTR_FLOW_CONTROL; + break; + default: + config->dtr = -1; + } + + config->dsr = data->dcb.fOutxDsrFlow ? SP_DSR_FLOW_CONTROL : SP_DSR_IGNORE; + + if (data->dcb.fInX) { + if (data->dcb.fOutX) + config->xon_xoff = SP_XONXOFF_INOUT; + else + config->xon_xoff = SP_XONXOFF_IN; + } else { + if (data->dcb.fOutX) + config->xon_xoff = SP_XONXOFF_OUT; + else + config->xon_xoff = SP_XONXOFF_DISABLED; + } + +#else // !_WIN32 + + if (tcgetattr(port->fd, &data->term) < 0) + RETURN_FAIL("tcgetattr() failed"); + + if (ioctl(port->fd, TIOCMGET, &data->controlbits) < 0) + RETURN_FAIL("TIOCMGET ioctl failed"); + +#ifdef USE_TERMIOX + int ret = get_flow(port->fd, data); + + if (ret == SP_ERR_FAIL && errno == EINVAL) + data->termiox_supported = 0; + else if (ret < 0) + RETURN_CODEVAL(ret); + else + data->termiox_supported = 1; +#else + data->termiox_supported = 0; +#endif + + for (i = 0; i < NUM_STD_BAUDRATES; i++) { + if (cfgetispeed(&data->term) == std_baudrates[i].index) { + config->baudrate = std_baudrates[i].value; + break; + } + } + + if (i == NUM_STD_BAUDRATES) { +#ifdef __APPLE__ + config->baudrate = (int)data->term.c_ispeed; +#elif defined(USE_TERMIOS_SPEED) + TRY(get_baudrate(port->fd, &config->baudrate)); +#else + config->baudrate = -1; +#endif + } + + switch (data->term.c_cflag & CSIZE) { + case CS8: + config->bits = 8; + break; + case CS7: + config->bits = 7; + break; + case CS6: + config->bits = 6; + break; + case CS5: + config->bits = 5; + break; + default: + config->bits = -1; + } + + if (!(data->term.c_cflag & PARENB) && (data->term.c_iflag & IGNPAR)) + config->parity = SP_PARITY_NONE; + else if (!(data->term.c_cflag & PARENB) || (data->term.c_iflag & IGNPAR)) + config->parity = -1; +#ifdef CMSPAR + else if (data->term.c_cflag & CMSPAR) + config->parity = (data->term.c_cflag & PARODD) ? SP_PARITY_MARK : SP_PARITY_SPACE; +#endif + else + config->parity = (data->term.c_cflag & PARODD) ? SP_PARITY_ODD : SP_PARITY_EVEN; + + config->stopbits = (data->term.c_cflag & CSTOPB) ? 2 : 1; + + if (data->term.c_cflag & CRTSCTS) { + config->rts = SP_RTS_FLOW_CONTROL; + config->cts = SP_CTS_FLOW_CONTROL; + } else { + if (data->termiox_supported && data->rts_flow) + config->rts = SP_RTS_FLOW_CONTROL; + else + config->rts = (data->controlbits & TIOCM_RTS) ? SP_RTS_ON : SP_RTS_OFF; + + config->cts = (data->termiox_supported && data->cts_flow) ? + SP_CTS_FLOW_CONTROL : SP_CTS_IGNORE; + } + + if (data->termiox_supported && data->dtr_flow) + config->dtr = SP_DTR_FLOW_CONTROL; + else + config->dtr = (data->controlbits & TIOCM_DTR) ? SP_DTR_ON : SP_DTR_OFF; + + config->dsr = (data->termiox_supported && data->dsr_flow) ? + SP_DSR_FLOW_CONTROL : SP_DSR_IGNORE; + + if (data->term.c_iflag & IXOFF) { + if (data->term.c_iflag & IXON) + config->xon_xoff = SP_XONXOFF_INOUT; + else + config->xon_xoff = SP_XONXOFF_IN; + } else { + if (data->term.c_iflag & IXON) + config->xon_xoff = SP_XONXOFF_OUT; + else + config->xon_xoff = SP_XONXOFF_DISABLED; + } +#endif + + RETURN_OK(); +} + +static enum sp_return set_config(struct sp_port *port, struct port_data *data, + const struct sp_port_config *config) +{ + unsigned int i; +#ifdef __APPLE__ + BAUD_TYPE baud_nonstd; + + baud_nonstd = B0; +#endif +#ifdef USE_TERMIOS_SPEED + int baud_nonstd = 0; +#endif + + TRACE("%p, %p, %p", port, data, config); + + DEBUG_FMT("Setting configuration for port %s", port->name); + +#ifdef _WIN32 + BYTE* new_buf; + + TRY(await_write_completion(port)); + + if (config->baudrate >= 0) { + for (i = 0; i < NUM_STD_BAUDRATES; i++) { + if (config->baudrate == std_baudrates[i].value) { + data->dcb.BaudRate = std_baudrates[i].index; + break; + } + } + + if (i == NUM_STD_BAUDRATES) + data->dcb.BaudRate = config->baudrate; + + /* Allocate write buffer for 50ms of data at baud rate. */ + port->write_buf_size = max(config->baudrate / (8 * 20), 1); + new_buf = realloc(port->write_buf, port->write_buf_size); + if (!new_buf) + RETURN_ERROR(SP_ERR_MEM, "Allocating write buffer failed"); + port->write_buf = new_buf; + } + + if (config->bits >= 0) + data->dcb.ByteSize = config->bits; + + if (config->parity >= 0) { + switch (config->parity) { + case SP_PARITY_NONE: + data->dcb.Parity = NOPARITY; + break; + case SP_PARITY_ODD: + data->dcb.Parity = ODDPARITY; + break; + case SP_PARITY_EVEN: + data->dcb.Parity = EVENPARITY; + break; + case SP_PARITY_MARK: + data->dcb.Parity = MARKPARITY; + break; + case SP_PARITY_SPACE: + data->dcb.Parity = SPACEPARITY; + break; + default: + RETURN_ERROR(SP_ERR_ARG, "Invalid parity setting"); + } + } + + if (config->stopbits >= 0) { + switch (config->stopbits) { + /* Note: There's also ONE5STOPBITS == 1.5 (unneeded so far). */ + case 1: + data->dcb.StopBits = ONESTOPBIT; + break; + case 2: + data->dcb.StopBits = TWOSTOPBITS; + break; + default: + RETURN_ERROR(SP_ERR_ARG, "Invalid stop bit setting"); + } + } + + if (config->rts >= 0) { + switch (config->rts) { + case SP_RTS_OFF: + data->dcb.fRtsControl = RTS_CONTROL_DISABLE; + break; + case SP_RTS_ON: + data->dcb.fRtsControl = RTS_CONTROL_ENABLE; + break; + case SP_RTS_FLOW_CONTROL: + data->dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; + break; + default: + RETURN_ERROR(SP_ERR_ARG, "Invalid RTS setting"); + } + } + + if (config->cts >= 0) { + switch (config->cts) { + case SP_CTS_IGNORE: + data->dcb.fOutxCtsFlow = FALSE; + break; + case SP_CTS_FLOW_CONTROL: + data->dcb.fOutxCtsFlow = TRUE; + break; + default: + RETURN_ERROR(SP_ERR_ARG, "Invalid CTS setting"); + } + } + + if (config->dtr >= 0) { + switch (config->dtr) { + case SP_DTR_OFF: + data->dcb.fDtrControl = DTR_CONTROL_DISABLE; + break; + case SP_DTR_ON: + data->dcb.fDtrControl = DTR_CONTROL_ENABLE; + break; + case SP_DTR_FLOW_CONTROL: + data->dcb.fDtrControl = DTR_CONTROL_HANDSHAKE; + break; + default: + RETURN_ERROR(SP_ERR_ARG, "Invalid DTR setting"); + } + } + + if (config->dsr >= 0) { + switch (config->dsr) { + case SP_DSR_IGNORE: + data->dcb.fOutxDsrFlow = FALSE; + break; + case SP_DSR_FLOW_CONTROL: + data->dcb.fOutxDsrFlow = TRUE; + break; + default: + RETURN_ERROR(SP_ERR_ARG, "Invalid DSR setting"); + } + } + + if (config->xon_xoff >= 0) { + switch (config->xon_xoff) { + case SP_XONXOFF_DISABLED: + data->dcb.fInX = FALSE; + data->dcb.fOutX = FALSE; + break; + case SP_XONXOFF_IN: + data->dcb.fInX = TRUE; + data->dcb.fOutX = FALSE; + break; + case SP_XONXOFF_OUT: + data->dcb.fInX = FALSE; + data->dcb.fOutX = TRUE; + break; + case SP_XONXOFF_INOUT: + data->dcb.fInX = TRUE; + data->dcb.fOutX = TRUE; + break; + default: + RETURN_ERROR(SP_ERR_ARG, "Invalid XON/XOFF setting"); + } + } + + if (!SetCommState(port->hdl, &data->dcb)) + RETURN_FAIL("SetCommState() failed"); + +#else /* !_WIN32 */ + + int controlbits; + + if (config->baudrate >= 0) { + for (i = 0; i < NUM_STD_BAUDRATES; i++) { + if (config->baudrate == std_baudrates[i].value) { + if (cfsetospeed(&data->term, std_baudrates[i].index) < 0) + RETURN_FAIL("cfsetospeed() failed"); + + if (cfsetispeed(&data->term, std_baudrates[i].index) < 0) + RETURN_FAIL("cfsetispeed() failed"); + break; + } + } + + /* Non-standard baud rate */ + if (i == NUM_STD_BAUDRATES) { +#ifdef __APPLE__ + /* Set "dummy" baud rate. */ + if (cfsetspeed(&data->term, B9600) < 0) + RETURN_FAIL("cfsetspeed() failed"); + baud_nonstd = config->baudrate; +#elif defined(USE_TERMIOS_SPEED) + baud_nonstd = 1; +#else + RETURN_ERROR(SP_ERR_SUPP, "Non-standard baudrate not supported"); +#endif + } + } + + if (config->bits >= 0) { + data->term.c_cflag &= ~CSIZE; + switch (config->bits) { + case 8: + data->term.c_cflag |= CS8; + break; + case 7: + data->term.c_cflag |= CS7; + break; + case 6: + data->term.c_cflag |= CS6; + break; + case 5: + data->term.c_cflag |= CS5; + break; + default: + RETURN_ERROR(SP_ERR_ARG, "Invalid data bits setting"); + } + } + + if (config->parity >= 0) { + data->term.c_iflag &= ~IGNPAR; + data->term.c_cflag &= ~(PARENB | PARODD); +#ifdef CMSPAR + data->term.c_cflag &= ~CMSPAR; +#endif + switch (config->parity) { + case SP_PARITY_NONE: + data->term.c_iflag |= IGNPAR; + break; + case SP_PARITY_EVEN: + data->term.c_cflag |= PARENB; + break; + case SP_PARITY_ODD: + data->term.c_cflag |= PARENB | PARODD; + break; +#ifdef CMSPAR + case SP_PARITY_MARK: + data->term.c_cflag |= PARENB | PARODD; + data->term.c_cflag |= CMSPAR; + break; + case SP_PARITY_SPACE: + data->term.c_cflag |= PARENB; + data->term.c_cflag |= CMSPAR; + break; +#else + case SP_PARITY_MARK: + case SP_PARITY_SPACE: + RETURN_ERROR(SP_ERR_SUPP, "Mark/space parity not supported"); +#endif + default: + RETURN_ERROR(SP_ERR_ARG, "Invalid parity setting"); + } + } + + if (config->stopbits >= 0) { + data->term.c_cflag &= ~CSTOPB; + switch (config->stopbits) { + case 1: + data->term.c_cflag &= ~CSTOPB; + break; + case 2: + data->term.c_cflag |= CSTOPB; + break; + default: + RETURN_ERROR(SP_ERR_ARG, "Invalid stop bits setting"); + } + } + + if (config->rts >= 0 || config->cts >= 0) { + if (data->termiox_supported) { + data->rts_flow = data->cts_flow = 0; + switch (config->rts) { + case SP_RTS_OFF: + case SP_RTS_ON: + controlbits = TIOCM_RTS; + if (ioctl(port->fd, config->rts == SP_RTS_ON ? TIOCMBIS : TIOCMBIC, &controlbits) < 0) + RETURN_FAIL("Setting RTS signal level failed"); + break; + case SP_RTS_FLOW_CONTROL: + data->rts_flow = 1; + break; + default: + break; + } + if (config->cts == SP_CTS_FLOW_CONTROL) + data->cts_flow = 1; + + if (data->rts_flow && data->cts_flow) + data->term.c_iflag |= CRTSCTS; + else + data->term.c_iflag &= ~CRTSCTS; + } else { + /* Asymmetric use of RTS/CTS not supported. */ + if (data->term.c_iflag & CRTSCTS) { + /* Flow control can only be disabled for both RTS & CTS together. */ + if (config->rts >= 0 && config->rts != SP_RTS_FLOW_CONTROL) { + if (config->cts != SP_CTS_IGNORE) + RETURN_ERROR(SP_ERR_SUPP, "RTS & CTS flow control must be disabled together"); + } + if (config->cts >= 0 && config->cts != SP_CTS_FLOW_CONTROL) { + if (config->rts <= 0 || config->rts == SP_RTS_FLOW_CONTROL) + RETURN_ERROR(SP_ERR_SUPP, "RTS & CTS flow control must be disabled together"); + } + } else { + /* Flow control can only be enabled for both RTS & CTS together. */ + if (((config->rts == SP_RTS_FLOW_CONTROL) && (config->cts != SP_CTS_FLOW_CONTROL)) || + ((config->cts == SP_CTS_FLOW_CONTROL) && (config->rts != SP_RTS_FLOW_CONTROL))) + RETURN_ERROR(SP_ERR_SUPP, "RTS & CTS flow control must be enabled together"); + } + + if (config->rts >= 0) { + if (config->rts == SP_RTS_FLOW_CONTROL) { + data->term.c_iflag |= CRTSCTS; + } else { + controlbits = TIOCM_RTS; + if (ioctl(port->fd, config->rts == SP_RTS_ON ? TIOCMBIS : TIOCMBIC, + &controlbits) < 0) + RETURN_FAIL("Setting RTS signal level failed"); + } + } + } + } + + if (config->dtr >= 0 || config->dsr >= 0) { + if (data->termiox_supported) { + data->dtr_flow = data->dsr_flow = 0; + switch (config->dtr) { + case SP_DTR_OFF: + case SP_DTR_ON: + controlbits = TIOCM_DTR; + if (ioctl(port->fd, config->dtr == SP_DTR_ON ? TIOCMBIS : TIOCMBIC, &controlbits) < 0) + RETURN_FAIL("Setting DTR signal level failed"); + break; + case SP_DTR_FLOW_CONTROL: + data->dtr_flow = 1; + break; + default: + break; + } + if (config->dsr == SP_DSR_FLOW_CONTROL) + data->dsr_flow = 1; + } else { + /* DTR/DSR flow control not supported. */ + if (config->dtr == SP_DTR_FLOW_CONTROL || config->dsr == SP_DSR_FLOW_CONTROL) + RETURN_ERROR(SP_ERR_SUPP, "DTR/DSR flow control not supported"); + + if (config->dtr >= 0) { + controlbits = TIOCM_DTR; + if (ioctl(port->fd, config->dtr == SP_DTR_ON ? TIOCMBIS : TIOCMBIC, + &controlbits) < 0) + RETURN_FAIL("Setting DTR signal level failed"); + } + } + } + + if (config->xon_xoff >= 0) { + data->term.c_iflag &= ~(IXON | IXOFF | IXANY); + switch (config->xon_xoff) { + case SP_XONXOFF_DISABLED: + break; + case SP_XONXOFF_IN: + data->term.c_iflag |= IXOFF; + break; + case SP_XONXOFF_OUT: + data->term.c_iflag |= IXON | IXANY; + break; + case SP_XONXOFF_INOUT: + data->term.c_iflag |= IXON | IXOFF | IXANY; + break; + default: + RETURN_ERROR(SP_ERR_ARG, "Invalid XON/XOFF setting"); + } + } + + if (tcsetattr(port->fd, TCSANOW, &data->term) < 0) + RETURN_FAIL("tcsetattr() failed"); + +#ifdef __APPLE__ + if (baud_nonstd != B0) { + if (ioctl(port->fd, IOSSIOSPEED, &baud_nonstd) == -1) + RETURN_FAIL("IOSSIOSPEED ioctl failed"); + /* + * Set baud rates in data->term to correct, but incompatible + * with tcsetattr() value, same as delivered by tcgetattr(). + */ + if (cfsetspeed(&data->term, baud_nonstd) < 0) + RETURN_FAIL("cfsetspeed() failed"); + } +#elif defined(__linux__) +#ifdef USE_TERMIOS_SPEED + if (baud_nonstd) + TRY(set_baudrate(port->fd, config->baudrate)); +#endif +#ifdef USE_TERMIOX + if (data->termiox_supported) + TRY(set_flow(port->fd, data)); +#endif +#endif + +#endif /* !_WIN32 */ + + RETURN_OK(); +} + +SP_API enum sp_return sp_new_config(struct sp_port_config **config_ptr) +{ + struct sp_port_config *config; + + TRACE("%p", config_ptr); + + if (!config_ptr) + RETURN_ERROR(SP_ERR_ARG, "Null result pointer"); + + *config_ptr = NULL; + + if (!(config = malloc(sizeof(struct sp_port_config)))) + RETURN_ERROR(SP_ERR_MEM, "Config malloc failed"); + + config->baudrate = -1; + config->bits = -1; + config->parity = -1; + config->stopbits = -1; + config->rts = -1; + config->cts = -1; + config->dtr = -1; + config->dsr = -1; + + *config_ptr = config; + + RETURN_OK(); +} + +SP_API void sp_free_config(struct sp_port_config *config) +{ + TRACE("%p", config); + + if (!config) + DEBUG("Null config"); + else + free(config); + + RETURN(); +} + +SP_API enum sp_return sp_get_config(struct sp_port *port, + struct sp_port_config *config) +{ + struct port_data data; + + TRACE("%p, %p", port, config); + + CHECK_OPEN_PORT(); + + if (!config) + RETURN_ERROR(SP_ERR_ARG, "Null config"); + + TRY(get_config(port, &data, config)); + + RETURN_OK(); +} + +SP_API enum sp_return sp_set_config(struct sp_port *port, + const struct sp_port_config *config) +{ + struct port_data data; + struct sp_port_config prev_config; + + TRACE("%p, %p", port, config); + + CHECK_OPEN_PORT(); + + if (!config) + RETURN_ERROR(SP_ERR_ARG, "Null config"); + + TRY(get_config(port, &data, &prev_config)); + TRY(set_config(port, &data, config)); + + RETURN_OK(); +} + +#define CREATE_ACCESSORS(x, type) \ +SP_API enum sp_return sp_set_##x(struct sp_port *port, type x) { \ + struct port_data data; \ + struct sp_port_config config; \ + TRACE("%p, %d", port, x); \ + CHECK_OPEN_PORT(); \ + TRY(get_config(port, &data, &config)); \ + config.x = x; \ + TRY(set_config(port, &data, &config)); \ + RETURN_OK(); \ +} \ +SP_API enum sp_return sp_get_config_##x(const struct sp_port_config *config, \ + type *x) { \ + TRACE("%p, %p", config, x); \ + if (!x) \ + RETURN_ERROR(SP_ERR_ARG, "Null result pointer"); \ + if (!config) \ + RETURN_ERROR(SP_ERR_ARG, "Null config"); \ + *x = config->x; \ + RETURN_OK(); \ +} \ +SP_API enum sp_return sp_set_config_##x(struct sp_port_config *config, \ + type x) { \ + TRACE("%p, %d", config, x); \ + if (!config) \ + RETURN_ERROR(SP_ERR_ARG, "Null config"); \ + config->x = x; \ + RETURN_OK(); \ +} + +CREATE_ACCESSORS(baudrate, int) +CREATE_ACCESSORS(bits, int) +CREATE_ACCESSORS(parity, enum sp_parity) +CREATE_ACCESSORS(stopbits, int) +CREATE_ACCESSORS(rts, enum sp_rts) +CREATE_ACCESSORS(cts, enum sp_cts) +CREATE_ACCESSORS(dtr, enum sp_dtr) +CREATE_ACCESSORS(dsr, enum sp_dsr) +CREATE_ACCESSORS(xon_xoff, enum sp_xonxoff) + +SP_API enum sp_return sp_set_config_flowcontrol(struct sp_port_config *config, + enum sp_flowcontrol flowcontrol) +{ + if (!config) + RETURN_ERROR(SP_ERR_ARG, "Null configuration"); + + if (flowcontrol > SP_FLOWCONTROL_DTRDSR) + RETURN_ERROR(SP_ERR_ARG, "Invalid flow control setting"); + + if (flowcontrol == SP_FLOWCONTROL_XONXOFF) + config->xon_xoff = SP_XONXOFF_INOUT; + else + config->xon_xoff = SP_XONXOFF_DISABLED; + + if (flowcontrol == SP_FLOWCONTROL_RTSCTS) { + config->rts = SP_RTS_FLOW_CONTROL; + config->cts = SP_CTS_FLOW_CONTROL; + } else { + if (config->rts == SP_RTS_FLOW_CONTROL) + config->rts = SP_RTS_ON; + config->cts = SP_CTS_IGNORE; + } + + if (flowcontrol == SP_FLOWCONTROL_DTRDSR) { + config->dtr = SP_DTR_FLOW_CONTROL; + config->dsr = SP_DSR_FLOW_CONTROL; + } else { + if (config->dtr == SP_DTR_FLOW_CONTROL) + config->dtr = SP_DTR_ON; + config->dsr = SP_DSR_IGNORE; + } + + RETURN_OK(); +} + +SP_API enum sp_return sp_set_flowcontrol(struct sp_port *port, + enum sp_flowcontrol flowcontrol) +{ + struct port_data data; + struct sp_port_config config; + + TRACE("%p, %d", port, flowcontrol); + + CHECK_OPEN_PORT(); + + TRY(get_config(port, &data, &config)); + + TRY(sp_set_config_flowcontrol(&config, flowcontrol)); + + TRY(set_config(port, &data, &config)); + + RETURN_OK(); +} + +SP_API enum sp_return sp_get_signals(struct sp_port *port, + enum sp_signal *signals) +{ + TRACE("%p, %p", port, signals); + + CHECK_OPEN_PORT(); + + if (!signals) + RETURN_ERROR(SP_ERR_ARG, "Null result pointer"); + + DEBUG_FMT("Getting control signals for port %s", port->name); + + *signals = 0; +#ifdef _WIN32 + DWORD bits; + if (GetCommModemStatus(port->hdl, &bits) == 0) + RETURN_FAIL("GetCommModemStatus() failed"); + if (bits & MS_CTS_ON) + *signals |= SP_SIG_CTS; + if (bits & MS_DSR_ON) + *signals |= SP_SIG_DSR; + if (bits & MS_RLSD_ON) + *signals |= SP_SIG_DCD; + if (bits & MS_RING_ON) + *signals |= SP_SIG_RI; +#else + int bits; + if (ioctl(port->fd, TIOCMGET, &bits) < 0) + RETURN_FAIL("TIOCMGET ioctl failed"); + if (bits & TIOCM_CTS) + *signals |= SP_SIG_CTS; + if (bits & TIOCM_DSR) + *signals |= SP_SIG_DSR; + if (bits & TIOCM_CAR) + *signals |= SP_SIG_DCD; + if (bits & TIOCM_RNG) + *signals |= SP_SIG_RI; +#endif + RETURN_OK(); +} + +SP_API enum sp_return sp_start_break(struct sp_port *port) +{ + TRACE("%p", port); + + CHECK_OPEN_PORT(); +#ifdef _WIN32 + if (SetCommBreak(port->hdl) == 0) + RETURN_FAIL("SetCommBreak() failed"); +#else + if (ioctl(port->fd, TIOCSBRK, 1) < 0) + RETURN_FAIL("TIOCSBRK ioctl failed"); +#endif + + RETURN_OK(); +} + +SP_API enum sp_return sp_end_break(struct sp_port *port) +{ + TRACE("%p", port); + + CHECK_OPEN_PORT(); +#ifdef _WIN32 + if (ClearCommBreak(port->hdl) == 0) + RETURN_FAIL("ClearCommBreak() failed"); +#else + if (ioctl(port->fd, TIOCCBRK, 1) < 0) + RETURN_FAIL("TIOCCBRK ioctl failed"); +#endif + + RETURN_OK(); +} + +SP_API int sp_last_error_code(void) +{ + TRACE_VOID(); +#ifdef _WIN32 + RETURN_INT(GetLastError()); +#else + RETURN_INT(errno); +#endif +} + +SP_API char *sp_last_error_message(void) +{ + TRACE_VOID(); + +#ifdef _WIN32 + char *message; + DWORD error = GetLastError(); + + DWORD length = FormatMessageA( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + error, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPSTR) &message, + 0, NULL ); + + if (length >= 2 && message[length - 2] == '\r') + message[length - 2] = '\0'; + + RETURN_STRING(message); +#else + RETURN_STRING(strerror(errno)); +#endif +} + +SP_API void sp_free_error_message(char *message) +{ + TRACE("%s", message); + +#ifdef _WIN32 + LocalFree(message); +#else + (void)message; +#endif + + RETURN(); +} + +SP_API void sp_set_debug_handler(void (*handler)(const char *format, ...)) +{ + TRACE("%p", handler); + + sp_debug_handler = handler; + + RETURN(); +} + +SP_API void sp_default_debug_handler(const char *format, ...) +{ + va_list args; + va_start(args, format); + if (getenv("LIBSERIALPORT_DEBUG")) { + fputs("sp: ", stderr); + vfprintf(stderr, format, args); + } + va_end(args); +} + +SP_API int sp_get_major_package_version(void) +{ + return SP_PACKAGE_VERSION_MAJOR; +} + +SP_API int sp_get_minor_package_version(void) +{ + return SP_PACKAGE_VERSION_MINOR; +} + +SP_API int sp_get_micro_package_version(void) +{ + return SP_PACKAGE_VERSION_MICRO; +} + +SP_API const char *sp_get_package_version_string(void) +{ + return SP_PACKAGE_VERSION_STRING; +} + +SP_API int sp_get_current_lib_version(void) +{ + return SP_LIB_VERSION_CURRENT; +} + +SP_API int sp_get_revision_lib_version(void) +{ + return SP_LIB_VERSION_REVISION; +} + +SP_API int sp_get_age_lib_version(void) +{ + return SP_LIB_VERSION_AGE; +} + +SP_API const char *sp_get_lib_version_string(void) +{ + return SP_LIB_VERSION_STRING; +} + +/** @} */ diff --git a/src/libserialport/timing.c b/src/libserialport/timing.c new file mode 100644 index 000000000..25876d622 --- /dev/null +++ b/src/libserialport/timing.c @@ -0,0 +1,174 @@ +/* + * This file is part of the libserialport project. + * + * Copyright (C) 2019 Martin Ling + * + * This program 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 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 Lesser General Public License + * along with this program. If not, see . + */ + +#include "libserialport_internal.h" + +SP_PRIV void time_get(struct time *time) +{ +#ifdef _WIN32 + LARGE_INTEGER count; + QueryPerformanceCounter(&count); + time->ticks = count.QuadPart; +#elif defined(HAVE_CLOCK_GETTIME) + struct timespec ts; + if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1) + clock_gettime(CLOCK_REALTIME, &ts); + time->tv.tv_sec = ts.tv_sec; + time->tv.tv_usec = ts.tv_nsec / 1000; +#elif defined(__APPLE__) + mach_timebase_info_data_t info; + mach_timebase_info(&info); + uint64_t ticks = mach_absolute_time(); + uint64_t ns = (ticks * info.numer) / info.denom; + time->tv.tv_sec = ns / 1000000000; + time->tv.tv_usec = (ns % 1000000000) / 1000; +#else + gettimeofday(&time->tv, NULL); +#endif +} + +SP_PRIV void time_set_ms(struct time *time, unsigned int ms) +{ +#ifdef _WIN32 + LARGE_INTEGER frequency; + QueryPerformanceFrequency(&frequency); + time->ticks = ms * (frequency.QuadPart / 1000); +#else + time->tv.tv_sec = ms / 1000; + time->tv.tv_usec = (ms % 1000) * 1000; +#endif +} + +SP_PRIV void time_add(const struct time *a, + const struct time *b, struct time *result) +{ +#ifdef _WIN32 + result->ticks = a->ticks + b->ticks; +#else + timeradd(&a->tv, &b->tv, &result->tv); +#endif +} + +SP_PRIV void time_sub(const struct time *a, + const struct time *b, struct time *result) +{ +#ifdef _WIN32 + result->ticks = a->ticks - b->ticks; +#else + timersub(&a->tv, &b->tv, &result->tv); +#endif +} + +SP_PRIV bool time_greater(const struct time *a, const struct time *b) +{ +#ifdef _WIN32 + return (a->ticks > b->ticks); +#else + return timercmp(&a->tv, &b->tv, >); +#endif +} + +SP_PRIV void time_as_timeval(const struct time *time, struct timeval *tv) +{ +#ifdef _WIN32 + LARGE_INTEGER frequency; + QueryPerformanceFrequency(&frequency); + tv->tv_sec = (long) (time->ticks / frequency.QuadPart); + tv->tv_usec = (long) ((time->ticks % frequency.QuadPart) / + (frequency.QuadPart / 1000000)); +#else + *tv = time->tv; +#endif +} + +SP_PRIV unsigned int time_as_ms(const struct time *time) +{ +#ifdef _WIN32 + LARGE_INTEGER frequency; + QueryPerformanceFrequency(&frequency); + return (unsigned int) (time->ticks / (frequency.QuadPart / 1000)); +#else + return time->tv.tv_sec * 1000 + time->tv.tv_usec / 1000; +#endif +} + +SP_PRIV void timeout_start(struct timeout *timeout, unsigned int timeout_ms) +{ + timeout->ms = timeout_ms; + + /* Get time at start of operation. */ + time_get(&timeout->start); + /* Define duration of timeout. */ + time_set_ms(&timeout->delta, timeout_ms); + /* Calculate time at which we should give up. */ + time_add(&timeout->start, &timeout->delta, &timeout->end); + /* Disable limit unless timeout_limit() called. */ + timeout->limit_ms = 0; + /* First blocking call has not yet been made. */ + timeout->calls_started = false; +} + +SP_PRIV void timeout_limit(struct timeout *timeout, unsigned int limit_ms) +{ + timeout->limit_ms = limit_ms; + timeout->overflow = (timeout->ms > timeout->limit_ms); + time_set_ms(&timeout->delta_max, timeout->limit_ms); +} + +SP_PRIV bool timeout_check(struct timeout *timeout) +{ + if (!timeout->calls_started) + return false; + + if (timeout->ms == 0) + return false; + + time_get(&timeout->now); + time_sub(&timeout->end, &timeout->now, &timeout->delta); + if (timeout->limit_ms) + if ((timeout->overflow = time_greater(&timeout->delta, &timeout->delta_max))) + timeout->delta = timeout->delta_max; + + return time_greater(&timeout->now, &timeout->end); +} + +SP_PRIV void timeout_update(struct timeout *timeout) +{ + timeout->calls_started = true; +} + +#ifndef _WIN32 +SP_PRIV struct timeval *timeout_timeval(struct timeout *timeout) +{ + if (timeout->ms == 0) + return NULL; + + time_as_timeval(&timeout->delta, &timeout->delta_tv); + + return &timeout->delta_tv; +} +#endif + +SP_PRIV unsigned int timeout_remaining_ms(struct timeout *timeout) +{ + if (timeout->limit_ms && timeout->overflow) + return timeout->limit_ms; + else + return time_as_ms(&timeout->delta); +} diff --git a/src/libserialport/windows.c b/src/libserialport/windows.c new file mode 100644 index 000000000..2825a9208 --- /dev/null +++ b/src/libserialport/windows.c @@ -0,0 +1,569 @@ +/* + * This file is part of the libserialport project. + * + * Copyright (C) 2013-2014 Martin Ling + * Copyright (C) 2014 Aurelien Jacobs + * + * This program 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 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 Lesser General Public License + * along with this program. If not, see . + */ + +#include "libserialport_internal.h" + +/* USB path is a string of at most 8 decimal numbers < 128 separated by dots. */ +#define MAX_USB_PATH ((8 * 3) + (7 * 1) + 1) + +static void enumerate_hub(struct sp_port *port, const char *hub_name, + const char *parent_path, DEVINST dev_inst); + +static char *wc_to_utf8(PWCHAR wc_buffer, ULONG wc_bytes) +{ + ULONG wc_length = wc_bytes / sizeof(WCHAR); + ULONG utf8_bytes; + WCHAR *wc_str = NULL; + char *utf8_str = NULL; + + /* Allocate aligned wide char buffer */ + if (!(wc_str = malloc((wc_length + 1) * sizeof(WCHAR)))) + goto wc_to_utf8_end; + + /* Zero-terminate the wide char string. */ + memcpy(wc_str, wc_buffer, wc_bytes); + wc_str[wc_length] = 0; + + /* Compute the size of the UTF-8 converted string. */ + if (!(utf8_bytes = WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS, wc_str, -1, + NULL, 0, NULL, NULL))) + goto wc_to_utf8_end; + + /* Allocate UTF-8 output buffer. */ + if (!(utf8_str = malloc(utf8_bytes))) + goto wc_to_utf8_end; + + /* Actually converted to UTF-8. */ + if (!WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS, wc_str, -1, + utf8_str, utf8_bytes, NULL, NULL)) { + free(utf8_str); + utf8_str = NULL; + goto wc_to_utf8_end; + } + +wc_to_utf8_end: + if (wc_str) + free(wc_str); + + return utf8_str; +} + +static char *get_root_hub_name(HANDLE host_controller) +{ + USB_ROOT_HUB_NAME root_hub_name; + PUSB_ROOT_HUB_NAME root_hub_name_wc; + char *root_hub_name_utf8; + ULONG size = 0; + + /* Compute the size of the root hub name string. */ + if (!DeviceIoControl(host_controller, IOCTL_USB_GET_ROOT_HUB_NAME, 0, 0, + &root_hub_name, sizeof(root_hub_name), &size, NULL)) + return NULL; + + /* Allocate wide char root hub name string. */ + size = root_hub_name.ActualLength; + if (!(root_hub_name_wc = malloc(size))) + return NULL; + + /* Actually get the root hub name string. */ + if (!DeviceIoControl(host_controller, IOCTL_USB_GET_ROOT_HUB_NAME, + NULL, 0, root_hub_name_wc, size, &size, NULL)) { + free(root_hub_name_wc); + return NULL; + } + + /* Convert the root hub name string to UTF-8. */ + root_hub_name_utf8 = wc_to_utf8(root_hub_name_wc->RootHubName, size - offsetof(USB_ROOT_HUB_NAME, RootHubName)); + free(root_hub_name_wc); + return root_hub_name_utf8; +} + +static char *get_external_hub_name(HANDLE hub, ULONG connection_index) +{ + USB_NODE_CONNECTION_NAME ext_hub_name; + PUSB_NODE_CONNECTION_NAME ext_hub_name_wc; + char *ext_hub_name_utf8; + ULONG size; + + /* Compute the size of the external hub name string. */ + ext_hub_name.ConnectionIndex = connection_index; + if (!DeviceIoControl(hub, IOCTL_USB_GET_NODE_CONNECTION_NAME, + &ext_hub_name, sizeof(ext_hub_name), + &ext_hub_name, sizeof(ext_hub_name), &size, NULL)) + return NULL; + + /* Allocate wide char external hub name string. */ + size = ext_hub_name.ActualLength; + if (size <= sizeof(ext_hub_name) + || !(ext_hub_name_wc = malloc(size))) + return NULL; + + /* Get the name of the external hub attached to the specified port. */ + ext_hub_name_wc->ConnectionIndex = connection_index; + if (!DeviceIoControl(hub, IOCTL_USB_GET_NODE_CONNECTION_NAME, + ext_hub_name_wc, size, + ext_hub_name_wc, size, &size, NULL)) { + free(ext_hub_name_wc); + return NULL; + } + + /* Convert the external hub name string to UTF-8. */ + ext_hub_name_utf8 = wc_to_utf8(ext_hub_name_wc->NodeName, size - offsetof(USB_NODE_CONNECTION_NAME, NodeName)); + free(ext_hub_name_wc); + return ext_hub_name_utf8; +} + +static char *get_string_descriptor(HANDLE hub_device, ULONG connection_index, + UCHAR descriptor_index) +{ + char desc_req_buf[sizeof(USB_DESCRIPTOR_REQUEST) + + MAXIMUM_USB_STRING_LENGTH] = { 0 }; + PUSB_DESCRIPTOR_REQUEST desc_req = (void *)desc_req_buf; + PUSB_STRING_DESCRIPTOR desc = (void *)(desc_req + 1); + ULONG size = sizeof(desc_req_buf); + + desc_req->ConnectionIndex = connection_index; + desc_req->SetupPacket.wValue = (USB_STRING_DESCRIPTOR_TYPE << 8) + | descriptor_index; + desc_req->SetupPacket.wIndex = 0; + desc_req->SetupPacket.wLength = (USHORT) (size - sizeof(*desc_req)); + + if (!DeviceIoControl(hub_device, + IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, + desc_req, size, desc_req, size, &size, NULL) + || size < 2 + || desc->bDescriptorType != USB_STRING_DESCRIPTOR_TYPE + || desc->bLength != size - sizeof(*desc_req) + || desc->bLength % 2) + return NULL; + + return wc_to_utf8(desc->bString, desc->bLength - offsetof(USB_STRING_DESCRIPTOR, bString)); +} + +static void enumerate_hub_ports(struct sp_port *port, HANDLE hub_device, + ULONG nb_ports, const char *parent_path, DEVINST dev_inst) +{ + char path[MAX_USB_PATH]; + ULONG index = 0; + + for (index = 1; index <= nb_ports; index++) { + PUSB_NODE_CONNECTION_INFORMATION_EX connection_info_ex; + ULONG size = sizeof(*connection_info_ex) + (30 * sizeof(USB_PIPE_INFO)); + + if (!(connection_info_ex = malloc(size))) + break; + + connection_info_ex->ConnectionIndex = index; + if (!DeviceIoControl(hub_device, + IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX, + connection_info_ex, size, + connection_info_ex, size, &size, NULL)) { + /* + * Try to get CONNECTION_INFORMATION if + * CONNECTION_INFORMATION_EX did not work. + */ + PUSB_NODE_CONNECTION_INFORMATION connection_info; + + size = sizeof(*connection_info) + (30 * sizeof(USB_PIPE_INFO)); + if (!(connection_info = malloc(size))) { + free(connection_info_ex); + continue; + } + connection_info->ConnectionIndex = index; + if (!DeviceIoControl(hub_device, + IOCTL_USB_GET_NODE_CONNECTION_INFORMATION, + connection_info, size, + connection_info, size, &size, NULL)) { + free(connection_info); + free(connection_info_ex); + continue; + } + + connection_info_ex->ConnectionIndex = connection_info->ConnectionIndex; + connection_info_ex->DeviceDescriptor = connection_info->DeviceDescriptor; + connection_info_ex->DeviceIsHub = connection_info->DeviceIsHub; + connection_info_ex->DeviceAddress = connection_info->DeviceAddress; + free(connection_info); + } + + if (connection_info_ex->DeviceIsHub) { + /* Recursively enumerate external hub. */ + PCHAR ext_hub_name; + if ((ext_hub_name = get_external_hub_name(hub_device, index))) { + snprintf(path, sizeof(path), "%s%ld.", + parent_path, connection_info_ex->ConnectionIndex); + enumerate_hub(port, ext_hub_name, path, dev_inst); + } + free(connection_info_ex); + } else { + snprintf(path, sizeof(path), "%s%ld", + parent_path, connection_info_ex->ConnectionIndex); + + /* Check if this device is the one we search for. */ + if (strcmp(path, port->usb_path)) { + free(connection_info_ex); + continue; + } + + /* Finally grab detailed information regarding the device. */ + port->usb_address = connection_info_ex->DeviceAddress + 1; + port->usb_vid = connection_info_ex->DeviceDescriptor.idVendor; + port->usb_pid = connection_info_ex->DeviceDescriptor.idProduct; + + if (connection_info_ex->DeviceDescriptor.iManufacturer) + port->usb_manufacturer = get_string_descriptor(hub_device, index, + connection_info_ex->DeviceDescriptor.iManufacturer); + if (connection_info_ex->DeviceDescriptor.iProduct) + port->usb_product = get_string_descriptor(hub_device, index, + connection_info_ex->DeviceDescriptor.iProduct); + if (connection_info_ex->DeviceDescriptor.iSerialNumber) { + port->usb_serial = get_string_descriptor(hub_device, index, + connection_info_ex->DeviceDescriptor.iSerialNumber); + if (port->usb_serial == NULL) { + //composite device, get the parent's serial number + char device_id[MAX_DEVICE_ID_LEN]; + if (CM_Get_Parent(&dev_inst, dev_inst, 0) == CR_SUCCESS) { + if (CM_Get_Device_IDA(dev_inst, device_id, sizeof(device_id), 0) == CR_SUCCESS) + port->usb_serial = strdup(strrchr(device_id, '\\')+1); + } + } + } + + free(connection_info_ex); + break; + } + } +} + +static void enumerate_hub(struct sp_port *port, const char *hub_name, + const char *parent_path, DEVINST dev_inst) +{ + USB_NODE_INFORMATION hub_info; + HANDLE hub_device; + ULONG size = sizeof(hub_info); + char *device_name; + + /* Open the hub with its full name. */ + if (!(device_name = malloc(strlen("\\\\.\\") + strlen(hub_name) + 1))) + return; + strcpy(device_name, "\\\\.\\"); + strcat(device_name, hub_name); + hub_device = CreateFileA(device_name, GENERIC_WRITE, FILE_SHARE_WRITE, + NULL, OPEN_EXISTING, 0, NULL); + free(device_name); + if (hub_device == INVALID_HANDLE_VALUE) + return; + + /* Get the number of ports of the hub. */ + if (DeviceIoControl(hub_device, IOCTL_USB_GET_NODE_INFORMATION, + &hub_info, size, &hub_info, size, &size, NULL)) + /* Enumerate the ports of the hub. */ + enumerate_hub_ports(port, hub_device, + hub_info.u.HubInformation.HubDescriptor.bNumberOfPorts, parent_path, dev_inst); + + CloseHandle(hub_device); +} + +static void enumerate_host_controller(struct sp_port *port, + HANDLE host_controller_device, + DEVINST dev_inst) +{ + char *root_hub_name; + + if ((root_hub_name = get_root_hub_name(host_controller_device))) { + enumerate_hub(port, root_hub_name, "", dev_inst); + free(root_hub_name); + } +} + +static void get_usb_details(struct sp_port *port, DEVINST dev_inst_match) +{ + HDEVINFO device_info; + SP_DEVINFO_DATA device_info_data; + ULONG i, size = 0; + + device_info = SetupDiGetClassDevs(&GUID_CLASS_USB_HOST_CONTROLLER, NULL, NULL, + DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); + device_info_data.cbSize = sizeof(device_info_data); + + for (i = 0; SetupDiEnumDeviceInfo(device_info, i, &device_info_data); i++) { + SP_DEVICE_INTERFACE_DATA device_interface_data; + PSP_DEVICE_INTERFACE_DETAIL_DATA device_detail_data; + DEVINST dev_inst = dev_inst_match; + HANDLE host_controller_device; + + device_interface_data.cbSize = sizeof(device_interface_data); + if (!SetupDiEnumDeviceInterfaces(device_info, 0, + &GUID_CLASS_USB_HOST_CONTROLLER, + i, &device_interface_data)) + continue; + + if (!SetupDiGetDeviceInterfaceDetail(device_info,&device_interface_data, + NULL, 0, &size, NULL) + && GetLastError() != ERROR_INSUFFICIENT_BUFFER) + continue; + + if (!(device_detail_data = malloc(size))) + continue; + device_detail_data->cbSize = sizeof(*device_detail_data); + if (!SetupDiGetDeviceInterfaceDetail(device_info,&device_interface_data, + device_detail_data, size, &size, + NULL)) { + free(device_detail_data); + continue; + } + + while (CM_Get_Parent(&dev_inst, dev_inst, 0) == CR_SUCCESS + && dev_inst != device_info_data.DevInst) { } + if (dev_inst != device_info_data.DevInst) { + free(device_detail_data); + continue; + } + + port->usb_bus = i + 1; + + host_controller_device = CreateFile(device_detail_data->DevicePath, + GENERIC_WRITE, FILE_SHARE_WRITE, + NULL, OPEN_EXISTING, 0, NULL); + if (host_controller_device != INVALID_HANDLE_VALUE) { + enumerate_host_controller(port, host_controller_device, dev_inst_match); + CloseHandle(host_controller_device); + } + free(device_detail_data); + } + + SetupDiDestroyDeviceInfoList(device_info); + return; +} + +SP_PRIV enum sp_return get_port_details(struct sp_port *port) +{ + /* + * Description limited to 127 char, anything longer + * would not be user friendly anyway. + */ + char description[128]; + SP_DEVINFO_DATA device_info_data = { .cbSize = sizeof(device_info_data) }; + HDEVINFO device_info; + int i; + + device_info = SetupDiGetClassDevs(NULL, 0, 0, + DIGCF_PRESENT | DIGCF_ALLCLASSES); + if (device_info == INVALID_HANDLE_VALUE) + RETURN_FAIL("SetupDiGetClassDevs() failed"); + + for (i = 0; SetupDiEnumDeviceInfo(device_info, i, &device_info_data); i++) { + HKEY device_key; + DEVINST dev_inst; + char value[8], class[16]; + DWORD size, type; + CONFIGRET cr; + + /* Check if this is the device we are looking for. */ + device_key = SetupDiOpenDevRegKey(device_info, &device_info_data, + DICS_FLAG_GLOBAL, 0, + DIREG_DEV, KEY_QUERY_VALUE); + if (device_key == INVALID_HANDLE_VALUE) + continue; + size = sizeof(value); + if (RegQueryValueExA(device_key, "PortName", NULL, &type, (LPBYTE)value, + &size) != ERROR_SUCCESS || type != REG_SZ) { + RegCloseKey(device_key); + continue; + } + RegCloseKey(device_key); + value[sizeof(value) - 1] = 0; + if (strcmp(value, port->name)) + continue; + + /* Check port transport type. */ + dev_inst = device_info_data.DevInst; + size = sizeof(class); + cr = CR_FAILURE; + while (CM_Get_Parent(&dev_inst, dev_inst, 0) == CR_SUCCESS && + (cr = CM_Get_DevNode_Registry_PropertyA(dev_inst, + CM_DRP_CLASS, 0, class, &size, 0)) != CR_SUCCESS) { } + if (cr == CR_SUCCESS) { + if (!strcmp(class, "USB")) + port->transport = SP_TRANSPORT_USB; + } + + /* Get port description (friendly name). */ + dev_inst = device_info_data.DevInst; + size = sizeof(description); + while ((cr = CM_Get_DevNode_Registry_PropertyA(dev_inst, + CM_DRP_FRIENDLYNAME, 0, description, &size, 0)) != CR_SUCCESS + && CM_Get_Parent(&dev_inst, dev_inst, 0) == CR_SUCCESS) { } + if (cr == CR_SUCCESS) + port->description = strdup(description); + + /* Get more informations for USB connected ports. */ + if (port->transport == SP_TRANSPORT_USB) { + char usb_path[MAX_USB_PATH] = "", tmp[MAX_USB_PATH]; + char device_id[MAX_DEVICE_ID_LEN]; + + /* Recurse over parents to build the USB device path. */ + dev_inst = device_info_data.DevInst; + do { + /* Verify that this layer of the tree is USB related. */ + if (CM_Get_Device_IDA(dev_inst, device_id, + sizeof(device_id), 0) != CR_SUCCESS + || strncmp(device_id, "USB\\", 4)) + continue; + + /* Discard one layer for composite devices. */ + char compat_ids[512], *p = compat_ids; + size = sizeof(compat_ids); + if (CM_Get_DevNode_Registry_PropertyA(dev_inst, + CM_DRP_COMPATIBLEIDS, 0, + &compat_ids, + &size, 0) == CR_SUCCESS) { + while (*p) { + if (!strncmp(p, "USB\\COMPOSITE", 13)) + break; + p += strlen(p) + 1; + } + if (*p) + continue; + } + + /* Stop the recursion when reaching the USB root. */ + if (!strncmp(device_id, "USB\\ROOT", 8)) + break; + + /* Prepend the address of current USB layer to the USB path. */ + DWORD address; + size = sizeof(address); + if (CM_Get_DevNode_Registry_PropertyA(dev_inst, CM_DRP_ADDRESS, + 0, &address, &size, 0) == CR_SUCCESS) { + strcpy(tmp, usb_path); + snprintf(usb_path, sizeof(usb_path), "%d%s%s", + (int)address, *tmp ? "." : "", tmp); + } + } while (CM_Get_Parent(&dev_inst, dev_inst, 0) == CR_SUCCESS); + + port->usb_path = strdup(usb_path); + + /* Wake up the USB device to be able to read string descriptor. */ + char *escaped_port_name; + HANDLE handle; + if (!(escaped_port_name = malloc(strlen(port->name) + 5))) + RETURN_ERROR(SP_ERR_MEM, "Escaped port name malloc failed"); + sprintf(escaped_port_name, "\\\\.\\%s", port->name); + handle = CreateFileA(escaped_port_name, GENERIC_READ, 0, 0, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, 0); + free(escaped_port_name); + CloseHandle(handle); + + /* Retrieve USB device details from the device descriptor. */ + get_usb_details(port, device_info_data.DevInst); + } + break; + } + + SetupDiDestroyDeviceInfoList(device_info); + + RETURN_OK(); +} + +SP_PRIV enum sp_return list_ports(struct sp_port ***list) +{ + HKEY key; + TCHAR *value, *data; + DWORD max_value_len, max_data_size, max_data_len; + DWORD value_len, data_size, data_len; + DWORD type, index = 0; + LSTATUS result; + char *name; + int name_len; + int ret = SP_OK; + + DEBUG("Opening registry key"); + if ((result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("HARDWARE\\DEVICEMAP\\SERIALCOMM"), + 0, KEY_QUERY_VALUE, &key)) != ERROR_SUCCESS) { + /* It's possible for this key to not exist if there are no serial ports + * at all. In that case we're done. Return a failure for any other error. */ + if (result != ERROR_FILE_NOT_FOUND) { + SetLastError(result); + SET_FAIL(ret, "RegOpenKeyEx() failed"); + } + goto out_done; + } + DEBUG("Querying registry key value and data sizes"); + if ((result = RegQueryInfoKey(key, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + &max_value_len, &max_data_size, NULL, NULL)) != ERROR_SUCCESS) { + SetLastError(result); + SET_FAIL(ret, "RegQueryInfoKey() failed"); + goto out_close; + } + max_data_len = max_data_size / sizeof(TCHAR); + if (!(value = malloc((max_value_len + 1) * sizeof(TCHAR)))) { + SET_ERROR(ret, SP_ERR_MEM, "Registry value malloc failed"); + goto out_close; + } + if (!(data = malloc((max_data_len + 1) * sizeof(TCHAR)))) { + SET_ERROR(ret, SP_ERR_MEM, "Registry data malloc failed"); + goto out_free_value; + } + DEBUG("Iterating over values"); + while ( + value_len = max_value_len + 1, + data_size = max_data_size, + RegEnumValue(key, index, value, &value_len, + NULL, &type, (LPBYTE)data, &data_size) == ERROR_SUCCESS) + { + if (type == REG_SZ) { + data_len = data_size / sizeof(TCHAR); + data[data_len] = '\0'; +#ifdef UNICODE + name_len = WideCharToMultiByte(CP_ACP, 0, data, -1, NULL, 0, NULL, NULL); +#else + name_len = data_len + 1; +#endif + if (!(name = malloc(name_len))) { + SET_ERROR(ret, SP_ERR_MEM, "Registry port name malloc failed"); + goto out; + } +#ifdef UNICODE + WideCharToMultiByte(CP_ACP, 0, data, -1, name, name_len, NULL, NULL); +#else + strcpy(name, data); +#endif + DEBUG_FMT("Found port %s", name); + if (!(*list = list_append(*list, name))) { + SET_ERROR(ret, SP_ERR_MEM, "List append failed"); + free(name); + goto out; + } + free(name); + } + index++; + } +out: + free(data); +out_free_value: + free(value); +out_close: + RegCloseKey(key); +out_done: + + return ret; +} From 6305aca09b93d88a441fa7f37fd219512fa3673c Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 14 Feb 2023 08:45:26 +0100 Subject: [PATCH 08/41] feat: create upload_reset binary for windows to remove java dependecy on Windows fixes #67 Signed-off-by: Frederic Pillon --- linux/{upload-reset => upload_reset} | Bin macosx/{upload-reset => upload_reset} | Bin .../unix/upload_reset.c} | 22 ++--- src/upload_reset/win/Makefile | 23 +++++ src/upload_reset/win/upload_reset.c | 85 ++++++++++++++++++ win/upload_reset.exe | Bin 0 -> 227850 bytes 6 files changed, 119 insertions(+), 11 deletions(-) rename linux/{upload-reset => upload_reset} (100%) rename macosx/{upload-reset => upload_reset} (100%) rename src/{upload-reset/upload-reset.c => upload_reset/unix/upload_reset.c} (95%) create mode 100644 src/upload_reset/win/Makefile create mode 100644 src/upload_reset/win/upload_reset.c create mode 100644 win/upload_reset.exe diff --git a/linux/upload-reset b/linux/upload_reset similarity index 100% rename from linux/upload-reset rename to linux/upload_reset diff --git a/macosx/upload-reset b/macosx/upload_reset similarity index 100% rename from macosx/upload-reset rename to macosx/upload_reset diff --git a/src/upload-reset/upload-reset.c b/src/upload_reset/unix/upload_reset.c similarity index 95% rename from src/upload-reset/upload-reset.c rename to src/upload_reset/unix/upload_reset.c index 1d03bff51..975ef258d 100644 --- a/src/upload-reset/upload-reset.c +++ b/src/upload_reset/unix/upload_reset.c @@ -1,5 +1,5 @@ /* Copyright (C) 2015 Roger Clark - * + * * 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 2 of the License, or @@ -17,7 +17,7 @@ /* Copyright (C) 2003 Heiko Noordhof - * + * * 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 2 of the License, or @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include #include @@ -38,7 +38,7 @@ int openserial(char *devicename); void closeserial(void); int setDTR(unsigned short level); -int setRTS(unsigned short level); +int setRTS(unsigned short level); /* Two globals for use by this module only */ @@ -53,11 +53,11 @@ void closeserial(void) } -int openserial(char *devicename) +int openserial(char *devicename) { struct termios attr; - if ((fd = open(devicename, O_RDWR)) == -1) return 0; /* Error */ + if ((fd = open(devicename, O_RDWR)) == -1) return 0; /* Error */ atexit(closeserial); if (tcgetattr(fd, &oldterminfo) == -1) return 0; /* Error */ @@ -65,7 +65,7 @@ int openserial(char *devicename) attr.c_cflag |= CRTSCTS | CLOCAL; attr.c_oflag = 0; if (tcflush(fd, TCIOFLUSH) == -1) return 0; /* Error */ - if (tcsetattr(fd, TCSANOW, &attr) == -1) return 0; /* Error */ + if (tcsetattr(fd, TCSANOW, &attr) == -1) return 0; /* Error */ /* Set the lines to a known state, and */ /* finally return non-zero is successful. */ @@ -114,13 +114,13 @@ int setDTR(unsigned short level) } /* This portion of code was written by Roger Clark - * It was informed by various other pieces of code written by Leaflabs to reset their - * Maple and Maple mini boards + * It was informed by various other pieces of code written by Leaflabs to reset their + * Maple and Maple mini boards */ main(int argc, char *argv[]) { - + if (argc<2 || argc >3) { printf("Usage upload-reset \n\r"); @@ -147,7 +147,7 @@ main(int argc, char *argv[]) usleep(50000L); write(fd,"1EAF",4); - + closeserial(); if (argc==3) { diff --git a/src/upload_reset/win/Makefile b/src/upload_reset/win/Makefile new file mode 100644 index 000000000..4aac4846b --- /dev/null +++ b/src/upload_reset/win/Makefile @@ -0,0 +1,23 @@ +CC = gcc +SRC = $(wildcard *.c) +LIBSRC = $(wildcard ../../libserialport/*.c) +OBJ = $(SRC:.c=.o) $(LIBSRC:.c=.o) +CFLAGS = -DLIBSERIALPORT_MSBUILD -Wall -I../../libserialport +LDFLAGS = -lsetupapi +DEST = ../../../win +BIN = $(SRC:.c=) + +.PHONY: all clean + +all: $(BIN) install + +$(BIN): $(OBJ) + $(CC) -o $@ $^ $(LDFLAGS) + +install: $(BIN) + @echo "$@ $^..." + @mv $(BIN) $(DEST)/ + +clean: + rm -f $(OBJ) $(DEST)/$(BIN) + diff --git a/src/upload_reset/win/upload_reset.c b/src/upload_reset/win/upload_reset.c new file mode 100644 index 000000000..414e0c6a6 --- /dev/null +++ b/src/upload_reset/win/upload_reset.c @@ -0,0 +1,85 @@ +#include +#include +#include +/* + * Utility to send the reset sequence on RTS and DTR and chars + * which resets the libmaple and causes the bootloader to be run + */ + +/* Helper function for error handling. */ +int check(enum sp_return result) +{ + char *error_message; + + switch (result) { + case SP_ERR_ARG: + printf("Error: Invalid argument.\n"); + exit(SP_ERR_ARG); + case SP_ERR_FAIL: + error_message = sp_last_error_message(); + printf("Error: Failed: %s\n", error_message); + sp_free_error_message(error_message); + exit(SP_ERR_FAIL); + case SP_ERR_SUPP: + printf("Error: Not supported.\n"); + exit(SP_ERR_SUPP); + case SP_ERR_MEM: + printf("Error: Couldn't allocate memory.\n"); + exit(SP_ERR_MEM); + case SP_OK: + default: + return result; + } +} + +int main(int argc, char **argv) +{ + if (argc<2 || argc >3) + { + printf("Usage %s \n", argv[0]); + return -1; + } + + char *port_name = argv[1]; + /* A pointer to a struct sp_port, which will refer to + * the port found. */ + struct sp_port *port; + printf("Looking for port %s.\n", port_name); + /* Call sp_get_port_by_name() to find the port. The port + * pointer will be updated to refer to the port found. */ + check(sp_get_port_by_name(port_name, &port)); + + /* Display some basic information about the port. */ + printf("Port name: %s\n", sp_get_port_name(port)); + printf("Description: %s\n", sp_get_port_description(port)); + + /* The port must be open to access its configuration. */ + printf("Opening port.\n"); + check(sp_open(port, SP_MODE_READ_WRITE)); + check(sp_set_flowcontrol(port, SP_FLOWCONTROL_RTSCTS)); + check(sp_flush(port, SP_BUF_BOTH)); + // check(sp_set_rts(port, SP_RTS_OFF)); + // check(sp_set_dtr(port, SP_DTR_OFF)); + + // Send magic sequence of DTR and RTS followed by the magic word "1EAF" + check(sp_set_rts(port, SP_RTS_OFF)); + check(sp_set_dtr(port, SP_DTR_OFF)); + check(sp_set_dtr(port, SP_DTR_ON)); + Sleep(50); + check(sp_set_dtr(port, SP_DTR_OFF)); + check(sp_set_rts(port, SP_RTS_ON)); + check(sp_set_dtr(port, SP_DTR_ON)); + Sleep(50); + check(sp_set_dtr(port, SP_DTR_OFF)); + Sleep(50); + check(sp_blocking_write(port, "1EAF", 4, 1000)); + + /* Now clean up by closing the port and freeing structures. */ + check(sp_close(port)); + sp_free_port(port); + if (argc==3) + { + Sleep(atol(argv[2])); + } + return 0; +} diff --git a/win/upload_reset.exe b/win/upload_reset.exe new file mode 100644 index 0000000000000000000000000000000000000000..27cdc459b25a8baa18aeae0ce578b825af206900 GIT binary patch literal 227850 zcmeEvX?PSx7w#lsASmNRWi)<(LM2xthqQ(s-1{GW&uDS1fPIY%B1ie1b{dsvbbGrLIOPxA(>U4Ea z&43Ha11W((pauSKXb1$B;FJHdArW8RN!h6LR_0ygFiHgZAUxof5QWT;m3{|Q8)r8v&0Gb!)7OJ6t2Pg zV<#$bem7i81MYZye!Ckk>(~j3lQyEQfmC4Hi*OH|1(C;2QCtme8g6i%n!#N>X%ZRX zMl`zdb)M(HV%j%O<%zEe-VYa!Zj8?&uJ74{a3wIDf9B&l+xy>UaD|tPUg^sP2A95|~R@3XvwzBXgv6Sm!v?qwN(N3 z3JyQOp?C0+eQ-Gr#?0tB;DVxXbY%Xi(WL4bJ(<%B$AIm6T#SVt9hMY`2g)i6`z~d_ zCcgL-e+J=CG#=@FB(CijOG})p$07Il_O+t;walbINzbIh{B9M|l2w^2%a_uk#Qi|m zy+V7#i}TaR%=m5Zq{3W&Bp1ypS;E%r6TV?;LqkKnydDSL)|PDy&#kN-hcn@h#W(}q zp)X)v;@)apR@vc>Ie|dQltQp(0hkjnW?t>KHn*&T%tzzgm~!~1CtCJ0c=Md#2Nxv; zqE6&P`3P;oM?4S83j6=u$Ot2Gr?azjWXe>Dq*^FMPK%d1sY#f>t zaHb|jM>a$&x28m6zb1y`VqU!S3%C%CtuFf{d~-i)Ecqd|+b8|wZQ3U~eu6`1LQ*ug zBXI)2{bSqVt`33z@wV-wvC3%4%GAUs#Ps^SXhSsVhiH||$kEs_Lm@K}t)hLw9fzY& z;=w*R6%XZ6Sv-&zqp>}RIs)y9htfgDf(PJl+1haF8+1k_z@v?Yh3J=z3ojZrG<(R( zG47avOS_<{%YC<%J@r>Z!&0Wd#Bu0N^<~*YoP?$h;=@o&d?a>!44=287vbcxdjLS7 z-I!8)3n)*1;x?e-!LlJR*HZ6|Nyw~4yAZA$@ln;1b|mfuPi+s1DUZggYQF;&t4utI zvy4xU-yp%#*NMB)MdggSOvD_N$n|eJ^E&?}uHEf=;=oPpp8BMNDuk`v`iDMm4X)bv zWGH0?R$A9c7DQv;Ku6cufV7h7X$^%(;cp-udk{RJ{wh3?f5UTb(c?b~2jlq9!pm!m zaRMXdir?{pwhV=5mqJBD;!RMA*^lsaZhbV4|6?lv9BP2u-p3U=TbbzlD45`jhQu9U z0_Y3_3RBu2yf9raoM|rXL_?RN{SApxxDd}xLwmapU1>EU8Y@UoY+WVRCtcSP)}~x{ z7!;;+q=+R)8d(>^k|hw;P}>H5u8^$M##Z+**pq0rQ?T8&d<(i2tzHh}aSFj-nJ8`n zh$u)mOi9{Qx%!QFwY9nW)qB$9z0F~Jb|FM9LzWPao*fYtLyQU;-PBVwPtNDK=Ux1% zhspV)-SZG5a*mlM=i4?t|IQ6^{tqSu>Sdr({!%^vHO?<(4T|6lT!}2|S6uh}8V5_CAd29cG_sG_nZ+ z40e1RVx4+?Z;6PMqJzDC zmu^R66O%sRF@|Z$^mfA z6*xo&fVY_pXi`xxJyn_5A>$)>q^0g)Rkt-w+>&moYp3c&NPGaa(BEsQe4-As`e;>F zRC+?b=j-3(tWbMPiD9zL}a>rpjiQk zIM6*UI?JPB^XD%i>TFIKhBYzXkW&0(t04cE?}efOaBP zVe!vV7y=E|Zpdc&c~F8i9;_xBoQV10D$?RKM(ATIprPJGC_=22$f;xR=-6O~1szMo z3>8tYK|WGNtXC2Ad81TpOc-GCXE!pTukugxO(+bhZX{uZiLvKo@0?60!9TwC+q9iD z{Gx6AWMVQVUnXQkBz#W}IuKj4yUjf4)M$AgX+ z{E;mJZczd2ML--_+aVcl0?CWzW`OfV%Z|)Oc3i4rM*4P0_DC@d41--?q2W#>OOaOz zQnLptItCw&MmNB={A!#pnoU6hcev+2&$vDm&97*IaRDP2?PE!8om7h~~ zVRN4A*^F^Ljd6!r!Vhd@+(&zf=Pv$x}B|5{`(9Kb0V!2IYpF8 z;;Wk=$wwGIBFH4Xx0K<7*5bleJ7j2Zpx6D6!%LgT2`@h%$7aTzX9<|C0_LiKr79qR ze~q%cjxBBH1%{jLJd@WUR&D_8S~<#C8CaOvPAiVHr;V<+-)EAdu;fz|fbYmOysh9&Iy zMooscu-kkzJzdsc=nW}l3PG3yT>O0v@-FTf02pIyNLLzOjP<8nMk~g z$RL%8NBoN%$lgVa;L5~}{>7+$G0KaVdKaZm=Joy6Ks^TJG#3K;6rqEKpQx8Hr3Wt| z?L_XvVh3(}G-}E*KK#ksA0Jh@sL!w%7>t(W)+a$vebi~YS^|kqNvbw?2{m%5q$0V| zW$1qsGjx>q870%V2MPxQwjGCbaT7_r^^i#H^gyuqbxGyG zrO`3Nlg;C`W`=q^IO$_`0ON8jX)oVC7!*G|^qr(cZ-DkO49sIEk#-_iD{{g%e|&!< zaR&ojtAcwOKF0H3SoK(DM%|k4$+eWXFNx>Y7^l!1Xe;Z!jli-qsqYQa$eXI~3E^BK zw{bAuAtnN?IMHDT2>n#8YZ0hHptli<0^l;TwO0 zMX?HaxlAn$Zi2pei{$7$n6Mr+dbt7p8|-RX*hwuM-9l5AdW8J7@8S=@DHeDavLIyj zRB#(@j+AeYDfj~dOxxEfcy9&&D!sARK#(oQB3e|Zn73~MkLoVw7@Wpb2V zkb}|UlrNArfQ)D5N1XxNvX|0YT_d0$F63$xLgGXmEdIdv+S8z2uZ z$MFX|B_g2r*C~NO(U~}wbrZ;==f_$ydKnqPvyBptzkZ~h$l@ev+@x9=?;?FPT96nz z2bZ-*ZEv_30coVY8ueOb{#_$LiWMw%l_N(nm}~hAxRGjIRbZYN!=#y^X9HyM&lXEPt#jef9uP`-G z*Do>VW+;*+qhM#l$z~r!8YxF_%S*5-j#=eiSA?Xe)^M1PVUD*1mr~7W-%Q$x3{bAt z3D46AC3l5n#0+Y^Sr6J*^B+7xWr?s{ID3d>g$yo7$0rFOKc-O@nqq0hI9 zTFFS4?uAnfQC%oeSFm?kYio=x2WC>aEr;3fj#kAt!Jx1O|7FYABnfk%eN`kxulW=8fvm5HoMKuRitoCpT3ARH;5)2+-a z*Ba@J>+x#J4}SsVgl4HJGOtV$Q`l?{S<{yfsqVyiui;5cZhbMHG-Hk~sY!ydt!4~h zekqm{$^MBfl#7%Qt;*@t6#(>3eJrn2CJr+YcL5#e*-Ll{2E(Yk&eMhE0!&za@`V=- zDPg0;5y%fE^$kV+6I zN`(c-;Xx%I2++ebiPk0vqxjady$C83*WCm}EVlxjy)E0jsqGbN`_t%s*xtsqy@IwM z;@N(fYkNt>geI0>^}1*Itbek+sKBzEXk)pMj0(^4S6agIRWY%A4JGj+T7nCpuZit1VgC+C|LD2z$Ut1AssKMR@=L)?FYEFSJUfHgHvsP7J^huR{pXXR4Fl9C6?GR z>QLhyvk1uD1dRoj#{Q~tlWJV~8$eFzYe|uiy@?uoc^XeK8mo%2-YNg6-=B`f8gL|b z@%B-7{Z-LVke2aoF zP_Sgzh=PB33p$O>Uy*hqqZE9af?1N*^2Gz#yut!6Qg9Cie}hT^Hj5dr5bQX^!H5T* z<@Bm~&XU%{duGwts&olbY-Ct3bOR?`9d)Sq*xup4vla*Z3YkQmt=cf$P^3 z6}d*iA+??ftM<=iT!{xiB*6IPO$FyE_&4oKX==5CpR&OBE4ZVAxvmPoh{qpR@N^4& zm4biVB{sjWVDb251?OAf90jjd@FdHO{s70z=x_|Ey{d#N?i>h&7v;_?S(7v?cb-r+ z%ayvTq~`Zoxp(0ls9hd~t9Qu|kn-2z)32yAcL+YbB5xdCUtwsDz*kSd zslMXO_WruI_laO03l=LnBcR+D>W@Wn!TWT_j_ZuTKE*@j85%&fh@Vi40UQmq^{Q ziNb~8XD#r93g&YINUm0}M9O0dF1Emh3jXC60l%(bxmV;}<+&E}bVa_Y$mbL(_lmr$ zJlaBLDDpu?4)hJEW0jk1A$P8oc3rK=!#?$#5S_7VJB;<7nq-+p|J7uGQ`pN(NqaYz zr>KmdH%l*j#jU*0WxO~`we73OWYvbqYN)N0KyOssUT8G2uLdgPrk}-0OR-Gkx__3( zXsR(5xfvE~TV=gZS;u_ovknl};7^$Lq(vxlw~|JtVvQ|D?l9mHttfK6F(DJz_yOJ! zsGUKG41p(HQLy1&5#vuCHvdO{5NF3&UI z5;dS6N{_G%Xr~64<@Ni1f|X8a%NNo+=B96N&wy;#fOzpN#we-)PpO;`rBi&RKNU-> zw?pZRRUl1BJVx5P<;qm0OI@YgIq>g*xjIE4lNoPI%_2%in3lqLIv(OvT&4XI*QwG3 z&i1yHc2lJZ%{DJ#IUFsW?J7-B=^?Jtx(kegO;iA@54DeheB@M|nxZw>&GZ0-n$h|(X(uvCS&!B%B0A@T z)w`p7$zpk2S+bPntQue271ZVgC*o8zmW#*a!Aq6g1ah>JH6TYQ$u7RY2=0;>51mO` zj7{TWY&>VR)SWU$PZk!8(Ra*^sCO&aqGZ4ysos4ck6O4b=FOmlSNqewfzc8~=QDflr3A8G}V znZUNKgc#HFHKb7&DVQ(OA!zIgY`Fz~Nx^vv{!=5&o51E;$e1DzRpfVy^d_*&EaWgn z)_*TeyIGMmKqjzk3)x+f8x(o*2c8o!81uc^tE-v4S{Y8xUcaw^aBudyPX(ML0{k)f z0YSzq>quifC^AP?$#~$`AvCZEmc@I`o7!@$nuI;O+*@C7Ldz?b)jw83j?k+w4`-&%}Jc#8FcTk*C_uwEvlO&z z<}$+*ywU*Zy^*AyNP87qj^T-D3E-bKz0BBF%@gKTLcR%<6C1$V?(hnnhMC<#{|9uQ zWXl0*@q*0QpiV#(WJEz^42V_I2TtUDgdnUxLoM;Dw$GNU92&Hdv=ez+k$Gy6#QnM; zu9$!`asQ~rc$YFxRK^snhPiQni^piqJ(pUn7b$BGWnG{NKy;ot1Jni|bD4(|70}tP9po zYJn3~xtM6kC@&Wz(1B4$Zs}Og1g6QAG}6x^gT`{dE}8x{=9L{OoPNG`=at_Dto<0$0jRXVvhL(WZdUL*tB;>m@a-0O zmP#I>;Kd4-d8JsvV=eH73O-T6TvtW($Sw3a3O?BaAFJS23cgjroLXuRS8&JzCn@;j zgfy_LWyY_`JmtB0*wjFvv?5&gbmP-U!TVD1^NprUdgay>PC_?fjMc>QFCn%2V(j-Q zu+1&=(jw^4#jPo?f;36xa?RRElo7bXF)XRZ6e5MvJKvA66DMQy~5k%1)Of4SfFih^wVw>fmPPojJBsW<6*IN8K#T(yw z#^UkYGuiURA1`4K5TTd?%4X=WI#EuP)L$d-pd7C9!==CL)dMUYr%M*8{Q_4KCl^Z)JS$O`mb0$7oF|5sS68vL-9*g*xtKQn`k#-lXycvYnd@-zV)vHlQ*;%R&R@tndVBnGe(O;m-;aP%EMr5d_|>unC?9HdtiX**oJvBLisf3{j0$(mS}H?d65nspEmu@cMnBwu4UifwUK1 zNh+VuIsEYY9Gsf>XF?ZhEY3mp{rv-<%6p2ub#U+Ry*HWugpG~fWZDM~cI&WY&~6G9h-H1glb0gs1-}kb>$0)d;g8Qr$u;eyKN85sJEO0=<2PybC1>5)c z{8|b7m}b07+KFuYT+Ha8VDJ9^WefSFBDr<}gF}k+?(gFk@_I$iQzTzHL({zb`wOi74Uzd9KMc)@y zq@74Wk=bgEcsV_YD-wWooGby{Z86@gj8&hBYwB0|-Sc@1m(iNFhFPrVD676d9C}oe ztiIUs2wA;>a+Jl>QF+c+b+<^KRGtao@ot6cUw{B~GjD~qk(LHDcPlg*m4VD)dMmWt zFmlp+$!7$=Kj}?!S^Pwo)cp*4gL7tL54QyT#}aUoD*!WDdAV_ydBbf}lM?&e6Fr}V z#)(fbBL>$$@B5^JG;ShvndZk&aO8xZUM=G$j_DLWSpZJ;$zN*iY{P#ULZ%orAK0UC zgb1mVUq*~dfW1@KKXJz;JjmS+wFQ>i{;GDns-3E8ACcgOi*X}_=l`DC8=0jGpaWAh zF5LI4b(f6!z`jf7y-B0&Tnd?PcAi4R%w6)D=RljZ_$p~9^2^8k2-Q}4iK!Of1!7m+ zV}a)=c#VP|S?Le|8tu377WiTX-=pAL6fD^pS&WjiEpT@Qk5};Z3YNR%8x-8u0;eiC zTfvtrSQ7LQi2e3iNH?wfjI~_uhPva?aau(zGkA{T=Rl)~&u)k3H0`#dPA^p#TRerz^A_q!_-u<#g)*gV z)%1>4B(4hQSv*dbYfT9++3Ect!@~3)A}zKzm)_ro2pN5v-fN!5AtHh4{XNpk zhz~!#zvr^xsmpr^HJw$0@!U*&$&t}&7FChC`ASiH%0TKS?dR@4!ljp+dj-7r##R$n zl{LgAagVXb+=g``wp7$9xEo6MBAy1dd4>Ek?V! zsxZYg*3RF&TY$+~`FT$6dtMI53TiG_{kV3r{Wz1u`PS>hPeBIj^;C{=}HwTrzz#>UW(XHoNPnyUh?Ru-zHrB+%{* z@z@ifO%A=Av=jLWqXS)Eg_S6`em673H5T{^1;3%-nOLC&n4_S!hM|M;Z-KKEe3yc+ zRIoimbhN6Y-AA>PyV z&3OjT8DchQZ*k-Ecf}{)B5-&MxM|Nb1USz&Qn>Ea541ZwuzYB|?(~F;t(Ef8ui*DJ z0yr%MNjs726nVWEU{W;Gt&DW`pyb?5kKvT*&Gn?6NUk!TwAAmQFWscU5|8H0p4 z^%iB_OIg3NW|YUt>P-vdES{mt^T9@H4ZSV-O6{B^>Vl^lFmrTQ(qcMOtDmD6yn*w& z?u4r*6aR-uEu!VSW+yZj+E$vHBv-hKg`WH+yqQoV<+JXIYSROS43ZVq_KeOS%=Djq}9Uy ziPP1h?YPj|vgpr8#3EBmUil7=oY46iIA&V-4xE|+1D-`qYv;|ngzhahJlDl@#XCbG zQ&Vp_l^Iu*s^S_gVs}=H;wvQ%(Zm|2-a=2Y7O_}O(G<1md!{ITSJk8_@BP%>Qq(7C zjGLm~2JNP(6k`lW!>)&^J~BbA=!8YKCMoIz0?Y_lr{KN{{u~Q0O;Xg87Wh5|AE4m% z3bs?!Gz&aI!L@ITGnOgXPEi9ba9;(#s^G^J?4_vA7V;oP-m1u`Zv%_i&9d$n{N*8S zAX8K=XiOz${Z+Y6!%`VjRH9Le%90`$-~Tb(jPa*Qd+!tUR`xAev9cEvZZHgV{){Gq28`iu+$Z=krTXg`a!rLsPttmo^TB-6}l z8R@}q9)tvjD&8mfh_s{?1Tyztn!f@k8oy7_bggZ`;bs8zOH^M#v=n4>T&ZYwiAZ$| zvWQx8t~&taE^g9=X5_J>zSb}Q<{1&}s4URl>hrsAL5&l-U)+EvP>mLb+>YAEG9XzE zFfSP_RQBG&?#~&Y&WBVJ`0tQ*A~z}W49nlmbkrjj<2+?NOBs`2`iG7hXR!`d)&rFF zd26~c9d)V!v!l9_wma&GN}Txnj(P+yt;otpzr+!PiI$Gq@&HJasXiv{EsD-wk0U4a ztc)Tkla5*kPDzpMsDyUZ!$t%<>Q2yJN1d(`e!S{*RXv=`XYJlmeqm=!2 zVfQ=gM8m)ll}Xx(Bq{Rj3g6$i2iO*5(JBzw`YRoO5|s{4axuYW?? zi7e!OjuSejLWIe>=jo7CpS^@K5Vn+2ndm+npV9^Hc02c2vgW9)OH|gYSn@J?7Qx!| zjTn5DEC(-iz?#8E0w25%0PPk&sCyc{!_h^>u2@d7G=iJ9R3yog2BXCoCU(A0JH0lu zQu*mVoH1?QO4^BRTE~x2Oa$sP_pP27)4oPp%6u){`K&TAUe#FN_L^;}DONRCshW!| zHO0Of1XzBmx|CH78-*5C)}%y}%r~-=^{S%W%gMORbuzh#lTLmTVX=G&3AVC~`2AjK z>o!*Jc>jBW-6#HQoLTO2h3S*k_tZKR0|wEi zFFpPbNQ@l!rfRpBQ+B+D>*nj--+*>2ma{C=a@Djm)wGGvdA(N4J!WBhCkvde;6oIA zjCQejc%XuJ-3=ZS`*oz9$j`_SXfzj3;aaI!4ps0v3;eo*s}!87V5wMs5qAXdv%t3~ z_-+ONqV8nHQoBaM6D;s31z(}y+Y~Hj+#~LT?}MK2hYLSnh~+JB6W>4fJAMCi$@HIb zL#r>G{_OhxPoNtudB$G#eLo$v>-+cb@;$VcH1@aRU4;|c`Hb&-tviBGSm1jV{HTIo z(2f${<2HyLHPr%Nso*IJzF)!8=*JX%rUmY!;4>6FTfvf;r?LMnWV#~deP|~%O_5S6 z@*5Ms&GVb~J!vPh3+WO~>);z8FE>_O$W@AbOOZRC_MFhD?#M9H*&T+H1>#Mly#nzW z6|h2xd{^dq{kHVAhLNwuj|biKwfKirN~Rj?rO>{Hjftv<>YJj-vzAI{NRZJx%%Fuq zh^-6CmZI7!G)yKFyy>T3_LU_(2VZ+{sAkFBFL7W#%-5UP5AM*$vH#YQ_HJTZsLn@4 zCq&9k>@sj_J(LNCy9_febx7kql9l`jEql@qn`SBizS0S<^Na*8eVhT>oo!$SBFuh| zbGiyX*O(LRU^rPG?n_#F6wP8C9|g)S54jVibap<@K+Wd=cz3YjfrLq2xM40xbTa+0 zg0xo`wot_#Tt8siu1vfLPR*V7Aa|NqNb0hoDLtOwg0-L11_28>PVj`snR$|Wttjds z7tAIuPVit}Xv=vVTfNoo#SI}aokRBwa}M2V(iuQ@S?2!^ks^SSUz9% z=b8P(iz=|4$kiho<-13h`1$TG&?evIW|(~(Wm_j6Aj1agj;9egKw|=R*pEpLFck*s z=sjL(!2|Ag#{)(nNNR5j?eJTxlKSMra2?lP0B9pZ4J$W|^;p|jtgR~&ElO%q#QfyK zBO&4X<5g4=L~$1yh)M&qXA*Y1^i4{$<)&G3Q!5h56k3yHe5YIN!B|}RXN~E$#&la_ zx~(z2u|{czuaS=f=$_W7BuXm^yZDDmI1FjqGQ`6tngh|qRvSJWXe-X3eF)Qbx8Vc+ z;^+&Lb|U9j@FT>fGr#`!Ydwqr-J8{nzK?EI2^@WIf!_1z3#;Hwat{ym1BR2M?>5r* z=M6!!nQ z1s}#aKa$4xnH1a#qt2}PeZYTPgSv3p`K3J5Y1Nj4u@|Rno^n zG2?0re3^n*Dfn##OO^Djf={==|5fmv3ckWJqgcSX8Qge2JS&K(vC~fmUi5C1eU?7t zW}kx_XP!3 z>pON?Q5TdQ5Ev1$@)`+MOh?6}L>Lm8w_R4|_3#oCu(xMMzjB;0{dO{GCvqDrWhc~D zmnFoz(~ylcKPSX`8yXDzt6D72h^l#2;dbkErE$!i(}-mwfs5to+t>=UB%j>(Y2CtI??po?=7qyxDJPoU{}9 z`W0zt#Iocqq%T#^EmMbiq^m!}2v05f^7mQ!sdc@*<8>`~OijmFnhsG-e7_nl{p3Y| zK#%k^VMkWC&FO#FX6QtlQ@u9xSlXQGwOLQ0&1%WRTvaihdnaipvK=KHESX_h@(~7# zHk7-Znl^)Mrp>#Wv^mw))XUOzjB2_;HJxT@y3*5>!4Utz3-OGS`jo=!@h3co%R}_S zIrtNva|4cCOAf1>YP^l!{}cV{AN_?Rvw@Kbk9Enr0r+mF8$6BJ*CjDXWUNSNHRjc; z?ASqENipt>l6E2wvV6lnAusqHt50v5)^ZcD+qPNb>zfN6UGh#g5?RabjN`QT_*Cjb zCv=qvhTZb`bPG8BnszlAj5$k5JCXg=oGtfzvkWT!-M@PmH=I;^y{a`Ud-A?DieeF< zw?b_B1(vEaRn=lvYS@?NKELH3YJYkwd!2Bc*m@0cjaIormarrhcBu;cYJmuo#AzOa z)mO>3HSj=vRaOgA$bfVUJCJUn2GXsqK>qz^-^je~;-KtgW863qTH(e|IF~!22efTy z1(txU#lZ}7N0~!3IO)coq`f=Jr&Pcs5uk3w4;BRXHw>g(fyM|CMeU^Bb#2hfG}i1- zPoc2j*SL42eBRD&B8~lkRqzz)pT@UyS#HS$^izhD`<32L+T752+u0waa&}n;vY#g! zJ{B%xRO1gUk(^M?y?#Ht@09But2`6oW-o3m9;1wll<`h1{J2HT4jun+epbHsc=j(W zRk^G`l6E3fl{E+RzRS9Ztlm1@I*aFZ<>AvI+WDN%!?%N_Z->1jy=5C+ zjM?+s!Al^|ooSx|?Ur~^%YswYg4LXeozOUKFuT@$JGh+%4l8(`f;(Bm=UoOvJox>M z_%QMKC21#enS%FKu)P>lX@Or>@P8HDpdIEd#@uNk!9D2OjWQ z4^1OmqSl~qp9;o1N?ve(I z8CD*!U3|+9>sC+mfVUw2C&prUSKvTlE#szY~Kvs_&=Pwh6MAF2BnBYOH1ez;u)+6}jNW`H&$dNpY$ zGF~nCQH@791Zv08f_U%|3p`K3*$RHva?z;@zS;s`rr@>;zFWaEl)?%=-2(qt!CN^w zA~X~%Bl^oEF{6V8-dDlP6kMcW8PP8*czZE;Oas3r?L-^}?{Aqg3t-gpvE2F1IC|;7 z+1(@aao^GHLA#E=#Ij?E+7VPcVz+rA?auF~Sm5Inyy;om9?F^Phm;xD`&i&)1wXCe zZVDDhn{oXGmmQ2d-Y1RsyZ}n zJVgc+S$eDI1bbZL7xc`!9m21(;pY5)5b35x=qgTCPH3VyROd}T`Ty=Zzs+Beb|QBx zvfVA7H|s`gDj>tF7Q+H%7^e&yAMqKuc$p?Um+~h};=vm%u4|R+1m${M)dcXb(E}4{ zoF=XQhM7sLH|VBGtF=nnHJ|!@OZT&Mwp5*;KP^tkv@FF}M`3A!n)&&3-y83eb|TLx zOQ3l(S6R9BA;U~F?*QG@%xhIrzGWtF11__44pW`^iu|bDb7*Zdx%GI9@o;54P#MeT z_>9fw)?L&5cGi)0BAYqSI-%Y=@FgwpA-6`i{EOV$|6zZ~_Xh0_`6A1LacaQ@YQY_9 zJOjebtx*ens)CPE@L7J4)|%Yf&H{%O98fS9Pf>^2x%K<0z9YUQjeUil6h|DbU^}-~ zTHu!z{Fs6dQm~y{Z@0j+6nu?>7i+hQ8D4IEq?z10H1RKLrk@}59i0H}I=YQzM?me^ z!8s1E_S`J)5J#Ju>GNxG#bm&DNjs5M3QkxdWpe9_7Wgp*->KmD6>R6$G7Ef-f-hC@ zN(Fnl^+F3dP?7rHcjzTWdbzcmh3u@z161Z9-vGIHYGomR=NbvV*U9+@@4q;n6ZV)} z*OCKXVQzhmbkp3rL}eWy4)t^EEryR(Q<-YLS&_@*-T#hw$o=@t+Sp+Tgi3X6m1-{Rt@N;S?do>j_}jn_fV2=>dS_W zZF`b5-j7h^oA>*s^7)}8S6UmKVeu3x&;82tkotq6XioyGtn8X&m}zHE&`s^UTqXT@ zw{Iu2Ysk`>q&oX3a;o14&1Kj3u7)jUD6ApvL|QB3@i%!5G`p-csa)@}SRG~EfPxxc z{M^dud&sWe*8Gd?x<7pF-ix*Z?GE|_EerNm3-~Y$7I5jzy%#l=>$j6}#kBM@()e93 z1^;BZ$Yj^oEbt2o{t>e&B-bd|&aUMaxKzQb6}&;gc6J?UfzMO$JO#g^U^}~>WPy)V z@MQ`fY?}OWPu{R?E0>S ztWspEB6niV(afWgU7xg&_bKwThr|i%ZuFe6$LxBU;bwLnM!IQseM)655r_KO^#n`n z5vsLVkt1#pt*l|}?3!#b?3^S`AE*rJk~CzAsLo_pzJaMV;hTh-;jvuV(v@wS>S>y_ zv@X}u^=8A&tThvK)2#J9XKFl|zk?S0+4Ve2=NYPVl_IaW%Ws>XU14qTFpK9vPVdE_DFll^$RFNJ0K4>nxPPP~?RmK!$ ze6Q4NVDs7a6pQsZWnD90yf{OL{@>NEvp@M4+4a+T{-A#cv^(gRUZu`rtDhz9MEa=( zAFJ_<2)A~fZGnpwe2{|YS}ro#b(jS{N5R`L^CLoLD%j4h$6MgT6}()*6BKM`*PsRd zb%NM@tAd9r*v_t-2rwbPUcvHyx)b`nOnOJm@UrVO&1BaHKm8Zkb=IA}qo;v(9i4C4 zk)w8e%2^JN>Po~8akR;`v-L~^ezlGnDb|NJTKFDg}V+vkt zfnQVbxe9KjU@yBqU?Fc)|J+;pEf;qsZD z6ZV*0Lx!8#HHmc7?0T=tx?~`wm)5+KEh5WXcS0fZEyh5sP7-GGr^mvfF(I zlU@1nO|$D27TXAA+e_JQRz2)uyC$@=Ygfa}tkns0)2zkkXb6_i%4vX~U4Om8Z`*gI zoya0ZhAmV5>}WwiH{v;Mdrztn50=Fw@Rypqtv6uaZu(>|}O5%hH*v zIuBRma@8pj-OS2By2aQ=8NWmQ4p&UR-s_9zv+Jjq`@VUHv=ezzSr5}Z@pswv*bn|i zc76Odf6(6p+8y*4S{4jc3%aTW)6{rIgqvNDwZMleI7Pud{4jM_29hlBFPBN%KETWm zw{%jlon7A}z^(rk{G@{SQ?Q*~AGg5wD0rHJ8?>kF?0T&Q9v!XD+H~_5q@BnLMeZ}*bHX08>+^=2+4W)4O|$FGD(erC=%>Al83#_uT>yd_; zb{-76shxdP(x#hyJDFX78mrBtom)xc_i7Y5!taCTYS(2J<8#XRIqG*fHT_zzfz4;v z>n+wv%KC`1uGXRdciFXC-j+4rKKiGp)K|gR?#jSu(C(oBbBy2W9i*Mep=!awYCMvw zmtCtZ@G1rWf;#}T^drkfrgnYU0^h0NH41)1!FG0?Y=JLT@I4A%s9-z0_P4;j6+B+S z4=UKsuI(*wnu4N0w z?h=ftUB_DB3l%(D!4s^IGTHTH3w*4Chbefdg6-@YvcO3SK3>6RDA>!cUybq&{*bg2 zNmb-2iuAJUQVaR4B0u89H_fia zD(il6sGnUAvb2U&>$!?NZL&8&?d+Nu={J2dX(!TI8UBj-3?{qE+qbgr`hvywsIq;} z`4tvx23b2>bzT#=UArt*%j6XTU$JT zUM$TUqdZ(X`-kkho(z~EX=erKrgomFlCCZD?PPYHYuK1wW2$p6MW*$(Eq#aI`PeaQM;Z3U%T1$IMD8(e_(_6iM%h8D4f>(oA-}@vVQ6UANrmJNjeLuA@(~ z>^M^Gcp8Nee8;7;CfT*M1^#oGwD39w@25sfT)Z2=6?_kj08^f0pWr;)m?D~q~V~jsf+KEIJSv$cSpmuh>$zr%p84gs2`K3OC z$*%lzn63<*W3ip4Y&D!;olqgxvYN?Sc6L3$Ff(iI1-fb0TBMRz6;qO*T|XbHK4IJ5 zCGA9JEAp2T-&8-l@@3(tEuIII=X~Yi(pfWhuCi*^@rIdpUJSaaorkNW_LiN@u01TB zN2$&~W{Yng_4}Z??E2RbzkxrJb|Nd4ambZk1DnsTD=pT=$~sF~TU+UB4^Oq)zVR=z zYY<`KX4hZgcX!ZdTNZRz3tFlL7pw6Y!Cvj!)&i$0_#@n@AbdJ#_{g9)*>&rMzFR&a zjrTqjyqALQ?7GYXKc`@MuipvPtMl#b>R8|z3O-vUf1_YKyAHR&gB09Z!6gcAoLygS zCcAc7^DnaNf|{vo@j8D`qq0(4V5GgQ*+*ZOuc zyMA<@@0+(sJCU8NJ@CzbzYm(ruJbL%+m-P(W&CTL*TCkp>u8I0u(Hln)~BtEzK86( zsN!E_*SFzoH@mI`?GE~{&h=aUA!+RQtroPn)bq5v?z+eVKc(Pzai;WIOG1ha!9n zrdjK5m6SS}2Kd?aFiYows&j%Ods(LX*%j6Xe>mIs$5*8B{9bvubkFV&97)MzO0iX+cZtFST0wVZ&-fdd(alk8_JSY6oOx|IkIkxz`Z7T zfQuBET*NyDoRDoFlx&-XYjub6fIEWKCl?te*(bta41bEtFPk{%HEfCE^YdH6F2C&h zU@+u|2cJF5_uzx1oydQ*DH}#L>%mo4^*_Ndv!_RaZran^XHa11;6lHrIY0HXbRMHR z-%#Y^s#9{p!WLkL3#{*C1uVv&^Tk+487~?s#tP$9kJ0*0)@s5{(psvlXDch8uOL!{ zHH)mfe;ea~W&dJ+S~I28{bV1f5i@WTr3 zh(%D>T>kJnz_kPMVcPa7Y5YEug4-xq(&i`yziNROD7e3Ze^ckn{M19ib1ZO)g4-*2 ztAb^I+DpL~Ti|mQ`~yljG_Xv;V#cS*a1Xxl?Bvepw^v6)!vFO~W7DqoT{{7^>)OPb zpp64Ilg9q>s=4*W;;jJwxnEs-#R5OC;HZLEjr3h>zPfg^1)izkb_(X=Df&U$WWKsK z!U7j4_5nSQc9TR%04b`2DZ`xB#(iXM(i1pTI*Z;4l&3htW#I zKvj!LW1k^KcC)(YH|lE~MmJfE*D2%wlre!d9(OLP^cbx$8fdZhRn`{D%I7OC>kT%m zbnUPWrfd5p`Xs|3?b;+GjZOX~Dow7}?YN&ug$SQ*zsl}fep%Yz0Am#y;4e0R32FRJ zwsL)=t$-2Dd-^8BNwwFhTC)L0R0S**0ludPTdD@As)H3-WjU-FPiI(+ZI$sGRuE2z z>rSq_n)UQIr}@qMh_n-VN?DH@;j`}U=>h9KPj8|F)YEqwX>4+wv^R(fROssyY)?;3 zvORr)Wy+aqN=N0Is;y|o(|G^Q;!0O8{k}u!CZj9J{ejJoJ_mp4r|p&fzd?Ju6|ZMq zfRzqW#jT<2!807~dBt!t5S}OPM3yMeA+Dl%ZyH6A8m-Fd)Rh+FGgB;gxW7t{{0b|Q z2X-A_#?wm!`_oUs9K*}KQ~!((t0dsiC6%nw))uoRpfo9TNUy z45ah-A?@wim!@_O9&DVy9gQ3Aeob0$ZNT$!E_h64*g)FL4BI)O!#7tNe(oOvhPCVT zI5^*M^0C0}q@9R-U&0BUDDEuZ{gw~NOD%mDHPSa<_1$&8uP=D2AcEZu6IFE~jrTJZ zy;fT1syYYLY0s#0c_-$*jA*PN6Pvts&5I4d$=u8+!_^7iFdhO>Oje(OPqcjCQVe~x zJNUSCMt@8tOVCvT-NDNVUTX03k0)wqy$hcraB&KMjbRgZT};eAHV~jOJug&8FJWgJ z5@EkP346kjzdNK^MxeJ|L3FwKR}hVTgEniLcVv4?G=#rZ!buDJ&@eg2(r8kXNr7+d zdkp$3e)!d3ICwyPblKax&iU%mdse}NYofcpjp7$@D(hQCD}Vi8G`23yX*lf`h1DKR)im@Fv46HG-_3kHC`ma05<3BlZ(T6iXYuDE_zVf&INLALO@$W>tROVsx21`zUi)Nhbd-kO& z*M>Z!tEqDk=P$q zusH+g1L@>v$R{|=Ry6|*1X~|5)Ohuctez6Q8J<&{s+F(drLiFeY4NjLpa*VcUtx1J z{N_5>A6oEA)Hyv9M%)au=$j_u2*jR{JxjK8Z^yl4gw#H2OyGWgMdsWs<{X-dFsn?Y zSXwhH@H9K`mlk>9(aYP7!=bgQD_Y|KoUqn+N?feGA!u@GgJ_5kDrY^VZ7z! ztM`ln6UgefhXD-1@LG}^(dS4>Y}7wD}-41nouPA-1GZw*1$00h3M z)0Ul`!1OW(v8gm>tDcm*`}Bn?8N8A$d+YX(RV)i2UY7C{5>4)EMz{H0`obdoi~}_d zRC9F4{lbfRHjdvS-%SaoMRpDL)Rp;>HwhSojTC&niV6@D9TkXOG>@T~>V~?#%IjK{ zo1emF+Y9-seS$WuB#g4{IZxbLmHV|?kC^aGatdJipiW(JBC{pi<`f|9Ve4J}4FKxKiSvivj5?9{}Zfow`CF z{K3t`_N@5#6-M#?u0uXL8s!vQRCgqFJNbWTvnyKA4bL#Tq)?E#A@K~rxW0XNw;;JN zcjRutiq@7U_F<1J*ExGZ5uCHd*vLb~*Rr;rXD)CJG%aSRh-YfzxiuyAdrgL#8uic- zG^VMCVpM>RlT8Zn<7GMV0X5i?wZ4f-`0?M}TxMDE9?D*c8_!KI9%Z?y#>uBZ^o?fF zGTh$VZYl#9*IhTA7oD+9e$CB!rc*KPi#c3ejm_l}X-=$SR#^rJL}fKD@^h1XVs9|% zn57+s=fj_(Pe)_Fjlqu=l&nae#lK0ID5|5eG7j!&Tt7-G+TctL&Q#^D-n(TA6>}Jb z%hJ4lomrtCE$j>7*fDc5va48$?3Q$DO3~5YVE~&m0~4!=mL%FlvEwstj}0<_?TC?W zTWP#vuR8ZUb}DxA|1!tum1G9*55J*TW~`#;hjB`pu`Qog`<*~1MPp)aPONM@j`Cto zJwB?+*5fb#DFwDb?TsyXI2+^@IF1ViBcbU2E|gPNflJYn*Z6@fdO6@Qh)40c6o zx#Z4?JN$qzEARn`xXT~Sa@BUHz{H(V&z&bMS9gZX`0Fywo7GCqqO)L@_^b$TII3Eh z{dp!@^;C-3z^i*QQw038nF13t+jwTqe%*{C_LTxE6Jw#*GUI%jahPQWW*xDSkKP?N z9FI88t_E zW*`RBOY!q&vMM8;1)OvX+;jkbApyO+02<&%egq1K7?G?dC1RpZSvfAS`Pj)Y&k3%$ z40iw-IK=?zd>FgEOcpF1zFdg*&lQ0h!MU+YGs|Wtdq$D*RM=SC%0IVfeS>X%FCQvW zYD7_f)EGyBD?7`|ksSt`4u_71IWp9D@ajR~#TZXXI6)CH&#k!BCcL=XJCAn`#N9Z* zk9|JFJ&&!{FZ05a=yf;8-3#x(-OjH7;3Xsjn^rjay5rq!>)K z*t)u*aB95ZUd%H0;ulosL-uxie!16Ah)%(LsUECysRJv;CJ!d$%q!i?Sy!Z;x>rDLLF~^P)AkaweY#qe>1k;Dzj^yi>7)&b=#JF2e#--WuRB>=+YAo= zt9>y@hPgBssgHWmC7FmIezHb}(FA5MA+4S`#I?49TqwWr(GV^j0#T5R^uxG|I?g7L z%%?;-b9sS7Bop+{hUUy|qRNR3gwd*C*2^>>Gr->QG78~#@5qBHNk&vZLDYUn|J&z} zmGf_u{SGc(VUKW0%PCWpm5CD%=5!n`djYKRvbMM$EBgazwLA@MRb`uS7OTAo{JFdY zZhqL||GmT&EbJebYiMl^g?MYoUUU5>E~8t-`uV~g6FnubQCpzsc9(#E$|wsfru|0Z z1HD(=fi@TIV;Y2)N!S^?TVIT`<(@$qko)%rg@6}>!n+$(c-S5rzhjYhPoZaX2iQz? zH1?JD{N$V}&X*sH6H?xFNeY);P9X9sl=E|q`K&gdoA_zB%`_rPzSU^p%aRF^q;S^cTR>bwJ0G}6Nd@j?HYYuQH?SgZ9(UT>Txs&2^ znZS{B0t#f__9n24UouWDI}GKuMil{S%c*h|M%{)Q#d1%nIdmc?Gt8V&ck7jh8LK$c zd1Y<|n#N+yR7GZO4>JGf%S65ocGW|Af)eX55;vfdFzbhKx|>x|ec>v*ys8obRt)Zm z&l7HbDX(xGelIUMT>2gwf;Ca`Rxj~ZBJj18h!tR2J{mH#%MZcf0&^HIsL;N=dbk+! zgc=gpSi2AWXaWMTp|(i;8NAw;!**Pvhi*F_blI1%emP%S2O?hxr(gkRIotsjEF_WT z*VJy*@Jy!5l|jPIY@}6-G;qpuwg-l}?dHC{4b_R%ucX~;U?AsvtKCb?VZ30CwwpiV zjSfh64VOykQSiI%z6?H(=PtlaLOgdNE42#7XU}x7#Y|yYgtth87x{`frew;7znw@2 z)v!}uHGotZRS}W8-IJF&q5 z#_GnpM`z-Qg|O-M+-D>Rp1|cLdCq`mc;mqO*ctEyZ%}&Taa)bt7UIk!Br+Mx84O#P z3L6$Z&Cq1Wlwv$#KGPXxtN1`~D?U*gIe-k)g@JPf?(t@W_St*~dG<1Fuqkx|e zna^9z=S=g-9~j*x2xaYe=!yR*IHO|iAS%*Jd z%b&}Q6!Q>;*H^fi%v?D}aOd)gH6%n_D@{w2R96`tvVFT7~w7|hTeURX^p zb$^Nh)+s+Hyl+mY;U&FVhHrceX2#+0NZt@wGP1=?d6_ZXu^8uJV27?31_D3kgwwJ! zehjBwla4=EVPIXADz5`1&cOlzu0mQ@z6#((J|>(xP|jd+a0lqZP8o^I!U(T$8uh0^ zf42%qgazouDX^aYc=7@asXKhVzw-D7|9CBqYbT+z*goL9KvC^T|9A(lpTo#-I`rkW z)7Y`*-zQ%+?qBgo&uHw;sDrsj-)z7%bABEk$qmoLki3MGYi6QwU(T)V;0g0qM5qr$ z<5h{oO}G+`7k0{2Kb*nC*vHc5?TP6qViPquRc`D*PZZ`yM|R(d8+qt0+Zn$3K*@2z z1kU7kTZ=+09l@&cg`}3(Yvn{d#mP^NpPkx2sTzmjnK!|Z?2^hPU^BCO?I_w5jeV5Z zj!=lkst`Bf(k<*Wd@r9$oc4>Nm0#fprGc7~QH3ioDrIl<_IYixmvkl4X@jl|jukXk zfRT&R(;FfKpTH$bn+{Aor&ErTUs3Yq^1@U+WW$ei7426NJPs_dVpaZy7Y)OR;?GM( z<6NtX59-u2dr1};Kcs&_s6NcSR&eG6MmJa z)pg}@B(VCu!*lo&SUd&JEgOgY5bxW9+yd>-Jmh$;YB@Wd{F_FS*1I}v6keSv4KD96z%dxUeboLwM7R;XZ+OwKzPnT zhFQs9#o^hxq+-7&#-pytn$^Qob2D)9l=vB`@u@BHlD3Bzy^|MD%}d%<@>@o@v^=*4JE&&h08wYxy8nWF^J{ZWfTn)V1sAEe_%qO7#%u$J-BHP3<}R#&V$&m z)Smbn4Cr%-+b2`2Ee9O*S3Ke#3>}o;xil{Te0^!so}C|ln+yC z$AIw0U&(J-;j&+8XuOBEN8MdCCR(<0%7|zTIjw)J9uaslD%ZrbSjiT<;>IUsJFm&> z{|floCk=V6Kl7Xt&g=Epb<5?86wzL9T>mor<1?_wdemMnHWrhMXV>6t6sHSlq3PDb z%DN4b|IBf?bRMqOJ}aDb5>`}45giD zJr`l4j;vf`p(?yD-Y>u`kkcuvp_&WI=X3sxg?>fU)&AUuRY!R_%K;>hedBll`ev+h z#uxBf#*AP4_B{;|_yA;b$NGw^ukIbk$K*qTmQs4UOL6~vUU}n>Kt9KB%aOwNt zoP0`e-1*~ISbKNCN70GhHZE;}(}}a78e=jkT>1eH*@A=Qf_Z@yhGty2vNuLnapCu9 z>ZLGOnu(Mv*P;zI{+zqBPYaCQ^I&ydrOv;~@5VEfa`_>#8QDXX#*ETOz0vTYEWDNN#8ODSFN(q)EEF$H16R>zh!SUAG;C=0kZ42a z^TBJB;dgE!JN9-o_5lR!)vdw+S1!XnRe(1#fy7!=V$s-2_RR^=*aXZJ-T#^mCd}?T z8X|Abr#->-ID_M8tiuYS`eF{+j!SjVl&oo}d(zZz_?|O4-=wjk3l*l;ixB#xifD*T z5s{&5c#MMeh;AG4)5v%~5C*iv{2x#1wJ93UPAjU5qIf(QPX*Hw$B2zEXBv1d$*?Kd z4RY!}Z8Uvl1!O#+cnp`m7zhNe?g~lx3cx;qvYTJWxvJnFah<8$0ukYA<*$^Yt?}Te zfWWLz6Q`mt>pt+~756!Esb~z|^9F@+P_!6b`3PusWx88;A=uGRiOV?|qO*QLDwt19 zRj>#j{8ts6WT=M701VaI%MnnC_)aX9vww6PBwj)8sk_ay4`O5s@5o4UbOnbSY5IwJ zenzhW7vOiWN1kG~8a4HMqKO3;h@Z#*YIr!5O z({NJy7)}hwXFE|Our{$gCvQ!rJ05fJTdR3kY3sFOVrohhh4#9Md$Xv@>$RrnD-_Qr z{-UuBiNUSdi2Bs4@l%Jwg!M>Ecl zv~&IDKG23)B(QR%X_P#9mBJ(O$n79$}UxV?VNz+u2g8qA#PUq?vxCw$k=~ z(&!vQI60_A7-%n$*)uS&YK0~ z-+TY}etyj7bLKqHbDr~@{k&&+&N)vttb7vrgPGjQZzt}v<`0@wJ;Q&d>#7P>OfBiG z81U~qs>f40PkuY$;X02Zn&VryU&S9$rhxj+memc$Q&+9ZEa$GPb~8^;PI$PA1zW{} zb*O?}WJbO2ruJhfSeZ|MUUPa7eGHoAm+Cl;M3L65JT`a&MQUkb`2OI&h6@q@=Th;n zWBt+9%wMW`meozD!L0w-SJL@|{I92fRKvHH|HyjedYuR5&{9x;Q+t4kcxK@H zl{Zz&x`F(EDkJ}^P(P2T{I5d(KbgpZ-c)h@%5Tg1c|+B_zZ`q=#B8%YG~6(g=QS~n zK#8Bt8qwHUy}HqO!K@K^4b1-39MP;7zpT7r4+co=Bz`QThDf$}%=kSw@Juc0ZZqm` z(@pJ}@jE}KaowDw-}B6sKd-r=E~nA>0X?MqfD2pd&Jh7LJPacW6VvLh`lZCK@r$|=2}#!- zzkptH9f+GYTl`WAh7%Ps7Fbu|;@!Sy%bq#$gp)1#=?d_|9diOX*TY}^*N&hE!e9$i zzSL5ToCVfH^?Bd3dVUCH(Gxc)8FeGWlk&QyuSU*%5h%r(zSAo_6jNgpBd3RTay~jR zuUmfDxaxsyZAiW5KMNS}jGBu=T`BVE5B@tUXWIFZ&rTl!=U$mL>|3}(0R zPPF30z1nZerxIXqFP88B4Uu{Antk8IC%FM%-F@FWaSS4^`G+ARea#PsPYeM+aXJ3* zfVlU>ZU%tmwSArw>zHVQ&PGhZ{FOK4%sb%(E%jN)_h0uLAN-%I_`XIz3l;o1!c!FdNz=bsySPsH z*N>|8!c5!zz7Egly}{)B*X*?aiQ50$wa@>E3jhBv`_P9~_?dP(eY>T58egUP$G6k` zzruuw`I~8{-5-_iY5ZfF|9Wlj*7l{^zDV2WYkQTp7ixRDwzIVT*IRY?+I~^n&uaTo zZ6DJ1$FzODws&j$Qf*(P?en$0O4|#yJzd*b+WzY;I(%)vsO@L9&HLz?KZmsaF>PP3 z?cLH&=g&o&e!jL>X?vlzr%T)9|K-=`W(-;R`QUHMNwJ2bUh}7@T=#hA_urWVzj-vX z9QMCSxv-q9@xxal<7amlzsi&!wBd0Ze%OYKUuXJ{UuMX9vs2qcuPOKA+Fqmi;~GDr z@fL0S4COyZ+W~E}F7Am7F;C+`ZMW34ibE`_-Wr9p;Ob;F(G%_sQp~x*)y?sNo>)KdNVGS+E7;Q??Ca_6 z?MX&EWBrljxmlti7Tea-zcttuOGrPEu{cY#z<01e+!s|btcfN&6FpLtA~eUN{q)69 z7K^gl%C%-hwEgmyAHA@z_G=9Xo{Qf0iOBVz+?#j(?{dC!EPwB0G4zb*%P$0;c62Yt_=K}AA8P@uRio- z*C*?T>JQ!-er5S5Bi@ZSPd%{vrOM_nY%4$ewwFHt*%^Dot6qKRKQDM-!s-|PaLdn^ z9C~C{_c?18)qe8&li}EXx30Ns$B)1J%S$h=`s^!z3WvT^cd+b@$3Fi1Pd`-sp>JPz z%LSVYKG%RuKM-#TTvc6#qCxkPG3v*6I@fZ2S!(W2A z8Kw(nC5+4gMhz?(N!GNMM09&k48^x2+%pjDjP=EPqwJc|J!ZHh2hgPk6NCM1q$;>E zldvkdE;`V>J(}nZ$K%mRt8BoEfBfEm= zf!T0%cxiqW4fgaM;m&Pa6S2X5voVa(pD=4z1ves*)v><5S_Wf}k*-;#JLm7r?4U*~ zD%n4oU%sy1@K&bD`o&14a`bj1>rHL4GmH#U-=tCd37)Q)pB$(DsdUK(T#Y;%h_1yq z*PgOB_1_ki+0x$A7mW=LB>!dqEUi#%d#{SZsJT0Cx$H>v3`E~lz-Z;5($C8KrryV? zuR8sW;pDba(mr;$)xFVhLRKgah3sB`RfzTovmd4tW(7>$^x@$dFu$2LJp3fgEimsY z8Xhi#alw3l#_;eV7#7)R;mUd^i<=#53=IVJuDUmtG`p)esdv`;0$}21%{9p2#}hQRoK(5LB|+oJ(dGY^#EhMRoB59jDzC|4tlu)y)Qn@tzhyA7HOhKquR=mVL*skF;o*ZY zSHLvG)Fi?^sgdbhDsLG>_6$`rWn(mO_Kr-3944oFe>TnFKrHob(4FxZ^;6fcOy6px zWEG-60_ksz48{8SNqy(>t;dI9ek8L`W|oeYpXqU+Eq%!eK5Iq%l3L22De$@1<{Ff3&{Ssu)A0Gbkyy4-`!dwfp5hf$6E!j*d%(uZf zBc6&uI`0 zuF9LS7`3=XW%=-M0n9JTpr`wlKwXc=^v`kAIKD^om+q(4HybIDWx}Aw zlZ|C0QgwttO(Q*+aj zP0ef9S_45=kCqNqKTy)+)Q?B&@Lhn}0<#px1GDY?;o(7;D`ED*+zd0Cd|3~wWyKw_ z_#xYys?@SfNAsWV2hxmLt;55|FB~5J9L#kvn_)fyt-H%$YG9_q{0d6wzgj;$d<5oZ zm@b%=Fm;M<)C8Y|xdrB9n}>(vFx4nP5T9|1tufhEZnD)f*@aZsry=-{+ zn=nH#cR?ZZ3Ycb?IWT{M`}I38-hnBFal(9W`|$8fI}vY~_rPp|ITPl{704%;E|`@t zIWQC7jd=e%;tlgYm@v$ruNoeH2Ic@v45kXE?i$1!=66>k-Y_4AVat9i<*9qK@yp-r z*SmUSJ23v}A4tS{Ep^+mcX;@_?;Re#2j+5^CYbtt!^1@|zlGaVFt^fNk9rGpE=)em z&*08@TKZQdxo0bO3z8#x*wNCH(Z4pvB2n4N4vy&C$I6e4_E&{(>nIBhV~3ksUl`RV zz9*KC6u&M>3*Jy))mGbDU)j*o+}a+hsjXVSP9)>2f}(VB+2S%$wyJbh8DpLPVOX&> zIuPR2DAchl#09CeBOt5$2uGWHB)yxGl413qT3k-KX38H-c7!?xlOesLEV-=y>At-u z5{makQWEU$ec}GWuCQG2Pmsy(9#6y~*bf-fzuIL=IcNCqzykL`42uAk7+U3b%XJmy z7xYf7P|J)Z1$Y-$pRG7oV^Kl`Fayz*cquFFQT$-@p z5iT8=cvvo*$uBn|C|7NHkqs zj9$F^YUOVjqKn@}oP_Lv7PP>SV}Tz9t>~ zbdv2y4k@jLsp2ckUAl4Xu06t^EJ`*$^%YbO;K;;Pd{Qj%C*_$0;29!-XNb^vM|cp` zU?9r;OY?_PWHUK*Py4sHn{s*vG81T%XLq*COSx-#Y803XJ=I=S@r1vYx39wS(VhiDTa>q_I?V7~kG7`spYa`_VEZsh(ExWV-iZBNX}yY47x}+Q0Na zsyo|TB-$~!Rd+D960isZ_`hBM;D3Ak=O^d)LWxCMESa&#acxjifH52yA3fW5!eF8@#I& zOZ|lr^V!kD&GaW@YS;CshuVr-B#B{9TGaS74h z9W}L;dbr6H3np0?xZK}CmpBH*&^y3xPx1Pu8Z#E_`?vMScIec}c!&DJ1Ko&i@flpg zqm~2bc3ZJAu=R{!uo&7BsGsKmK^@w8$MEnXn5S>Yu~XO=!}P+ehG|5;>?ql>Vj1-| zxXmOBAL>u5xVjJZd9AH8KOXE3Q}+k^DfnWQKyi*MkRlk|(32P#4EM@5rE89yHK+E1 z!l+j%DN-o@QvO;Ju>r_3eeUQP=*ILu5)D$vf_!G$xo=rhu2sqmH|+P zNiK)ZPi=#Y>rbu*qN}j-GqzYH92p2=kF;YBz|xnM1p9$dV~olrO{y8~>WM1VF%*dI zk>gG zD;1gPJ8W}5{FBW53H&e&YmcGOPPX4@8AKqy%@AMDv^oRcy-wX4*{a@E+L5CJ9jhnD*;1^8lZOom+rAp8*G8&x45oE`_}srWf!U*p)DGz%8&R zPsZ&8fN5Vk6=x9u$6?Q$F2s$1X%E4C1TgKg8A99vnD%F34g;qBd)&18IAGdKX9;l> zFzsV7&jY62H(Q9~fN5t1g?J4x?Ym*#08IP+ry;#zL)x#*5h4JX_Gjh^Q3ROw?)gF# z1E&40(}h?DnD!rwF&G0(`@A!8)dyhO#Vc?I12FB)E0HIFX}`J}`2d*q?sIY54q)1k zoF~Lyz_e%JfXXd^Y41NDc>$RAf8YS>eSm3S)(Ss>Y2Um_h^GP5UU3Q15197L|0cvs zfNAgDf}boD8x4a({|k?#0!9FzqB9m08IPQ4+wD* zFzt>H3h{Tqw0VNlhsQ^07vgkj0btrkV1j^Yf8^shUjvx-_5(sx0H!_bHq?K>wEsLL zL0Zh_o4m+rd@GA z>OWxGyB|RP2Tc3!&!PSUrv0CvN7#UAcRq~z5195hA3+%aroG~esQ-XzPkI#j6)~iJ z4d4J^+Bg>|iU8BT;xW`|z_i~BvkWlp55lYlO#3#N8o;yPPhk!KroHV;$Sd;0eiG&| zd0Ym_IqKD0;aw33FH-E+Lyu{2Tc1um=k~x!}dOj_5zsptfzz!QIs|8+OMEJ z0H*!*r%`VJ)BeIU$Sc6K|L`pG3NY=aucNO3O#9$Bkw1WG-}XHE3c$2oKR})U-U9n$ zFmb>`u(Mu7djTAPy#(f3z@@O4!t4dS26hbQM!;Cl5x;}E1+e&`5KfpOz?cUK-%H3J z!mua7JPtSrdmqdZ!24nU{zqs>fW?o6c-K!*Hh{Ol{shcPz(cU_gLwlm=31ier)Woj zTVNl7adn}5VK4a^+7aMV*q?<7k`DX9pQ9ZShW#4MGQcNcuXz>a1eo@ZU{(V@4tvWl z5C&k{ABJfFJOq2v3A8o9LD(B$+Q|d^moS?EpM?E|U!uMN#u-#G3uX)XVRyiE1IF1? zaS$dB80SvK8!$V`|7)~Om}>#!JgKOLxe+kVkcvlP_5;SbQnBzg z{8r!xE&NuQCYI7(5UT@E+7-?lwg`yWg0Sp1}$@f!;^W!l}X=^YKucfTj! z={J@LM_l$(0T*6Z@fiyR(k}x$v;i*DyZqa=r`^B-` zrufB_y&e(R=@!}DF5!8_;*WAzDwN}O3GWA;rH(B|+?bqIJJ}hyI;S*yOIF-}#Cyzr z+<6jlXBeN>VY(f{U2c@x`+F&;T+6Y>)8uDdX&9c#XVUC8!{axF_SF`fa2<+w0%U|-_!QbwC%Z3#b<%G%e7sl z?TEH}wLPG1Gv4pk_f3T;BdJUW&4Tm%3DnB=M9sSEblZ+^Tg|iIuk$O?s-`3EK6zra<48 zAWt*!>dF+QmMW1#+$66u(02)luL{e35|Ho>jq{{yrI=>a;C%i-w3?@sJHx$gT5IJD z(6{$=M(bnMS{w8nqn1|(*%`(ChW%VT)`tz80HoDWXg1T95->E z=M+CNF`dF!Ox(OBL@aZ|za`Bv;_LgBYJ8-2XJ=I2riH*5t1I1Yz0qh~eA?aKn?&Zw znjyaJ);dO7S4fEOm=u{jA-?bCIeJF3mbbQu7bT8TvYocX8l`7rPb6C19Zs~zq+=CM z`->tE&#}vUQN$(@9-w-#Awr>eC=~7A-h*T5LO2w@!z4_iZX6J-%?hal&vO8MRQR1H zP!`Zq5@NcbGB0*rgi`p!nm0~nD90?wOG4)pCrGp|7gonXs}3dO(N5}^rS*Gvx^T@| zXMC3s|L%giWdbMVg-I9(98pRs5j=3(j=zpu{?$87npm6}zoMscow=3^V>c zv5rvJV1K7sia5$5i%K|EPIW2F1uQub>4_nmz|bGs-W5;aPO&b$0Xo8EhjtQqBixeO z>7eM+hhiQSxDh0Yy%D5lAQ2giiy?tBMFqefl>n(T4Cr3$Ttv{WF)ey8cq zuR+>T>>rJeQpDM-Xc9_XS}J0g(tbw2`ly9&3e%oyq&_Nmj+;FE-hc@S<0px~J;n%A zS+k+CrG9Do;z%#rIQ9_0^FPI0P}|y6+mMc1G2#}E_muP{OLp}1m!KY(p!Gu8aiFBP ztfZ`@R3~CJ_)KHtx3scMKP~WMH#WcB(QrJ&Q)Fa(*mGs@>;#W#Z1T`1w&O@q2D`Ws z{QqB!Eex$bnHk0q!WhrkWXKM{D&ZmcAIpsJi|%5p)idhYQTVqSn;$ma3?DCn|IJKW zZTtEb)MT?Bvo8Nn{z2bk4O-)fA9O-SrDLB_(y{kAs{05*?-1U}fp>D?e|Qc+?*%c0 z*^?PjL$Gfs9feN5I+#sIphM*%rhco>+u4^={6A+-+2YbUK}=p^yo~6aIqTckmQ>6M z;>2EmB;1Q((K&N=MU!*RJ2z`Jj#fqcI(l~n;lDq5&Kz7RyDHh)9mP#CC4D`eiC8k$ z#qVt2s&KMz@%FMgIO2m79~kXyP^S!3VCQB9gR5~>Y;u6-h~A>GrE};F9&vhNkk^?g z6a+cDx#%bXNAkkOFFtbmZEH;6(uOCplXHktu z4^PP}TW-3W^Ovuf0&KRD_p{X|zs*_4KXT4k?kc?Ro@=_B=h5D<3(~maH=w-S7%*%>vi_!H1VSK*uQqo6=X{VD$6-fHrj@29LBmD|kE>pyDp zoA0aCjmy9EHj^K^urfc;Ku7(l{P_A%ir>bi;=B1S(;fP>Qr?s?%G2ik9rV9A2d+j> z?uJG#gIT$*X??JISDOVB;T7GlhJG`m-s}5`;3;Q5}%~-fYGu{;spvXG+LHRe6qrWM#~C`Pf>WW z!7W`}0;Uo@)tk-CC^Z^)R^zgvLWM5Fp261Yq?qQ-`YWPTL9`|*rYm$6(b}Y#q0rSt z*Cs`gLeC|-E-7XzbPdtAq?o19Dx+2fJX?iSW7H%{MNq}94oI0eO(88n%EcUoYyz@W z%vH!1AS=W?g>(ZsOUzeD+-ME&6blrx(`fD7DNa|&9-}p~Qxq#?uhH7EQ=FlY{YGmt zE*2`}BXEg}GZiufmmaZ5A@@K)k0?>dVWYJ|ELQL%M(awkM8QXl*0NGjs*s~Va7Um* zjsYnby>dS45?NK7aSM<8hG|Pt^|Lmzjk<4~&JH81MqxM2 zoCPPp%Y{2fu;J&Pi@Lem8wzdhjdjRv;czc6?!&II$ZpS*U54S&eUi7Cn-jrq5e zA_XeapA03z((N>_Z?A8v6^?H?&UgtCpU3$96@ZIfiHp64>#rsxJT0U6e9jS^;z8f= zBzVsWHI|iERN`2uidXSBV*bec8JO2T=3Zo9Yo8pK&Z~&N3EK$r)y1g^Nc^cWb z!c1VQy$au9;uCQE1~lq8gLrvJ_yaEa zCD5q*NwA!kh0Sf;rNVn8&8{%D_3XW6`p+rrSNJRSdy#(IUmmmLAw*HQzsJ8x;BmV^ z^gCRkwX6eWE6_=9YHSR(Rc@%olUB8rOEDI5{LM4*8hkWmXNKCoF_wskzk6hFB@Aj? z3??P*AByHM+QVBV;h&x?rrl-WD)eY#do)reh84+eNWGKhxVn{0^;aHE?CRn+v7tIG zd=;o`({b2> z6&jM7B|b$f%9WX9b_Pk|_hxTIW(RXO_4TExS>9|`hM~!3qL+zmZx-vrkRg`Xb2rE9 zo`-T+Gh_rDtGrVlLGO}V2aOkWHfMW%L`7~xbZZ!@Fsr@3RB)x@9Iub{Zis=GiE|Zp zm{_?uPhm%hEfs4Nc8u6EQK_)w#FmRHg`La+wn9`Z4E-L^vqX(T0}`zewF(VNbfs9U z&{Bz_Ctj!UH3}~ibqa4$c)6%o_!fmP73V8FuJC2z0)_8U_;S&paOgbC2F4y)HZVg} z3P-?kmbZXiaoO75fi|cii3%_4C{Wa6NmwZfRUZd6phRS2NFYT_Lx*6F1sof^dF&{r zT!N-uVshjOkEO>@LmWp(wwI%yjLt+mMY3miz^|JEtfQlr=6Vb{TH8cmS9ZZcILZOf z?(Avn0IL>-;Xx~2{zIF(JUhTB`mAB61URn9_HKo%n}73b^IwBCt%(DI_Bjt+ngw+uBd*oO@0A=EqE4k#DWC?eZozl^Xv1QC{A6npAhHg7qMTR zrqrYo;sS+>`4{K!B;VQ|jLg{b#3lJY_Pf*c=7jjSe4iZr<%OEsL+$ldqGDtI+&~V} zo%*OrMU74Qiy0N!mvnBc3gbrD&G~ZR=VSNMxvin64;n)kDO$j28|-M?g$;_n_MQ&$ zE=4U|z(@y;$^@=XN`w=;)}zO1QE%{xEsCcY!=v6V5ze2=NR$dUsm9t_n3*onKqs9%`y>4kcDVE5{{e$vF;T#OIK zW3O$htZJwg#<)z4m779Ul}$Ap>ucKUgkxOZnzrheP#cIp_=BlP+e^$uJ;ma{xGAUBM;>e#f@HDdpgA*XXJ25Numb5Sh7~piSZ`ODkrG8R35B4r9FsO7v zhHC0DyKHZ6-7I{cEGqaFld82Z%?aX=iV3<7#6)~bC&vuHCdBdSBJUj#VusNyXRwtG zW_}*OtEk|s`7%FQ`|r`Y>9`I};9yY>hcXVw&w(6Lh|_U7kb8BYj(dUJrx2ebfZpJK zh2%Jjfjpp)fMYh;KBJHVgPmP-m+U`&~XLid`=&r?&jpG5ZJ)w}bjwiu(M6uO5LO`BWNP`25bK)t5 zv^bsz@)d=&JAMlRPb*}TgC}CXs*sBv7lQ3Sii%h?Tf`JrgYN>AO>9D{;n)fj16Rk_ zih_RuquYm#mNCj4vy+oQC@Q!cDMl+|slTYwAY`fk&|2y*Sxfy#DsnDa>OWS9D)pBY zqDuX^LR6{$L?H#TgkLF=Q;R}b!ar3ms)T>05LLoISJ6=={Hj7!3I9SNs)SD{M3wL_ z6{1S`R|-)j{A(pzmGEl{Q6>DkLR1O=Mj@(%f2#zj5hhNl+#Hdxf;f68?ii zHpvqHqe8aG68@7C-7QP_&kE_4CHxmv!f~_l+6ojU<#?mW`*#$m*;kIr5&RX((oME% z{e{E#Tz%l$Aj4-kCd@2oDnNO+@jhj~t}6mF^(qzh%ylo8KXV%UR+nMx-6qbQ&Dv6! zibaNa$E2Avwn4c2x8O13ndT6VIWtdV;HFc1LtCi2vZ0}>vibtyXbVoiAC7Zxpo9nU zSNb*lsmUxyQW6sGZ-6+DADkc3^{Z@?SuO3&Eun_m4YduHwK;UK7<>v}{#44zY8aPk z;(Us$83=E!#-O#ny{fXUR(M?;*7$GDyLd82HED-XB|5P|Xym@YQ0 zZQs2x&>pI7Y-!)Dz^3&L4H))-SdZ2z?PbDAyLB1HF0?Czn|AeP;h~KV z9C092g#oPaNm_kdOJ#d?o$wRGUAoP!B1^I~H#dlELWoO!WmCJzA+o;df~Mw;O(K^_ zO>H&4vkfATNPU?INDct`3Mdy76|hW9k}MUXKoKg$WJ!S7DT)GUDj~V5QAh~c(T02x z(}-{-WIBPi%C)tXt*w=t#SEg=3N9kN9yb!#)UL%sMva(BLId7kZxyo?xRLN|!g`T) z9$`!hKnyW-5A;_t%Y!p=rZf?c6PgJKJYHRe+R@9gr zX;Ljo6lL2G-j|&c12CfUEm8{MBWJ zS~jfRfIG_yAICBQuzF&Xr^@xF*TGSb^Aq~Sizv>!J!{)Eq*|VG$h$)&dAd~G&$~09 zPQK|loKYt7?#j6x@&d%lMc&;KE1a(G_!W8gNIWRqgGiAlgl1aVDkl6NXMo!dNR_;> z7f&-JqoI&6&YZ@vu{WenJQ(FU%xSMW?+}R!W2q!e`5R*U6r!+{5_a~4!opZJ?_m%W zx?31$OLPj8_3IR4CmC1IJFXc!Lts3|L?gTULj%1@S^gm&k>SJ4!l;~c4?01}#dKvW z&ZC$IKa6S_m8nQ|r>K>%-&w5hS0$A*@BZoNDxE=1bti$k;|P5!Dp*|9Y4<|yem;C5 z+k|nx63r{4iC>_l2TbYE`NJ*85yV9_Xtx~G4fi02I=MtG8nu(pbdohk*43uTtkHg_ zOFN~K7we6n4#WpiYluek{9&YjnVJ50Cu^?Q$Pz%xhKx1%8d#mM@^CV`Y0Cx@%!vB%^w|83-lx4kRPEK{o7RF}7!`kR~3Y{OtdO=oruX9Z1LhVxQ^tuR$ zLVeaLP(G1s)*I+Rz%`4XQPB<;hUUJ z^4_}mDWq!ROb8+%3Pae*O!oundeA!I4LF}oM*aym*RBe2FlNl-a=uB+Satg8g#aQM zkM=CBSP|0aATZxXFNO1L31M8AJ5#ni%nkd5v0~;y`tl>wW_369fX?=qS(B* zT;xqNq^C3KiGRYKhsew{D-g2RdNeNYe&2d>@=v%g!oS>o=pjw|K7-{TJB6H>EW|V9 z@jdA5$#0OcB#$vuMAi3sKVL`^LWIwBx0Ca}!Y3$ICcY700G^!l9yBJ95GYXU1~%wv!-e0LR2T8(dxY2XceLvXTPLsEZ%mCqZ*^nOJY&d z$TfCC(xh-Fkp&EEQg}PzWuynf+tG?@jcoRJfgaRC!z1H^3b{^ETLR!{FtTKA7j80M z2)$;U+0&gFlPHYYhHR+DZz(m7l_)*-Hcm4pAHbI(5O1k9Npp1hvVdIY1r&a39QyzfgJ`tHOqfDxqR6D2Cr~fBrNupADBsLHGj9j3q!`2Jl0e zGs#x44wT;m_zjVEAgq@LOhE|93INc86z!J+xezR$JPj_}fHZ;H0F%8>hswS(|5lB# zSG*pqsCte8RLA=@{Zho-XKW%(%<8r5V zO$dDh%!=EY1NmmIvG?$xAX)3PPB_JexjLA+ifEMjj0=r&#KI^Q*~QwC{aF5TjjRDu z3+^H`n*0ki@h3=9M2Wzs#5_8b-J+eJhjaE(jj$8X{*6Z1(dSp{6tU;~w2nx#$Pa1q zjUYd&LM$>a6xr|5bbdqfzi454*}`;8({BNjILlV`A7#})sW~8B{)_`F=b|ce*zvfR z3{m7?7$)1J`wKQraTb){8#7zd$H{F5m=?F!6nC2xw;Q6iQ{1aMU@5KwUo0#j^R+W{ zXE&7U>Rm6R#D45|kTPpPliAaw?9#(66jyqbg<|tN%^{V~u_Krs=AZ|V0jXeOjBr2~ z6F0v3GY&jE4~^{Kk;nq=WU#xuEYJ!1nFKf9M#s8vOP59^?) zFuzQCJ2<5nV{Y1Xm=#jS3K267Y(}dHMt5?wzy~TsM>+S0jn*JP7*cDdbBd%~80_M4 z`-s9e1$())9G$|20Aq77ZfhTchUo%y&FqcDP>w-=ubYHc=a$-|;M!xH@$YbPZXA`%n1K z5LV4YB8jM7=20b+-R>kF560*~rqOxSvq}oC-HGLCL_&blNZFGp2`}IDV-w)0=Mov* zq7X(c;mFqHWjnY*x7KOwLnPQ~P15_!PS9AJ0&GJ>$RIA#!^RNagv4zEJ^dj~K)=OZ zTQ{`Ou6CpJPlXoRxen}J!r0Z5|I^8@jM74LjHz+vuxp&TplufE>FR=df_u~4_ailq zQI*RaO1TV{)Kj1ih{L8*27IK7o5QYB<}fu-5Lv5wiNmU1;z%h*IBbd$?a2Kched_K zGu|ec+NIofJbj*wcEleE;L95KBp zCt2j89HG>r9Ff$b9Ff$b91$+cNe(W`DFBOd3c#YAWWl1GB4ANY61XU*C|r~yq!#4} zr55Fg$VE8b5V}4xePa-NP1C@Sb9;8m|B!0WG>1n zSTD+@9nvdsH6}-zR7+CEq8tfal#{kvlp{EDQBE%BSr+Bg(j9l%(1{T-7v&_QUX&wj zS(GE1UX-(7sYN-`tc!9keq=)ES%i@tXhw_8V^z#Y7sv&>5Q7gjKuH0sLOC8#L94OQ za!K=XxL_`tmFFBqo%TCR^&CE+Cr2Jkj_4AHhkOPkCYqDwAETv(mI6Xi;F1*1pH1YCCa$sONa~RTXpRICK7$v8wdrMRwhvl@FS#5Kl_%HA{C(~WeM8!G#zMc|m@yA=Pq zX&$U1b8^k8K@tB(aV5fGZ@+^Rw^PyEKaK1;0J9q*Ijs9;M$mmZ0>k%J$Ihun z`=SRQHAdl1M8R#+RiQ8v4@qKs~EPq3hXI zLyU{3QQqbjr{Q()l!a|R7-$yuXAmw6I~O{%6Hi59{~H9ZfU%!MtwDU=MqxYChoc-9 zEaGzETP}Vdw}9SW9hl^E%A*OwSvd0~q&PR$H&t<(@Z`lO%KX!_U$PEE)>8LK+_ ze#Q~1wNg%g^8u09bsSM}V@UK>bg};NJeZT`ahYtB=W%({ljm{SGAGY2ty!6&Y6DH1 zR}uXjros1X{7n%U^twOH-mRK{gv3;>K}4@9T|{g#6uZ|43%&vm9=Wlgl@Xh}TEjb} zD&K}+{zLTdsqK%9aNMXIeV&v{eLuEg#U@1$r0Lbzmaf9KbW&_qZiODDaCuQQ5re8y zued0f%h(1zc2&!FDTjH&rPNC8DY!W3Wr9a@6|vx4rY+|u_;V^P0#8BV%LvEkz_-Go z_stpSx!yvM{Z8|xWaTDzp2Zo{xaxqV@xyAyqTKMLvsgG&xtQ-PJFu(Yi_Q8)XUZz& zEFCg^kiJ`#XnI|W&YgSg$VJ4G8UH{m@e$Qe$L2y*1ftGkO#RLl?L(1wi#3Y8Ns|jh z*c%Epw&PLV7ortCA`WT#npBLnLcz$r?)%+p zBHOJ$@(`hP4@}n7uJ;3)(|pF(&Y9l-{*30_qGe7qWuh9SbseS!7NGFnz<1Wom26e- zF9IZ{r}KgHQeo^hR)B8y+DpK~pK+jv-;%SCHHDNwy;DC-RwMovvSM-+HiMKZ{GCnN zWdKTG@}hdueH7t~8Q7}pO+>e<(E1E!3HGGqOc&)Vf5rhSo)oF=&AtMbB$mRlV`?oj z?m9B6#-G5Oor+m@Dn{9gGb7vaB+A;Mc85WKyyfJ^m{hOh7+C=0jGiR62{zXeH<;b@Y|EtbP>gl+xhB+ zAr;;nclf``k}{;io8!)WI{6H2MU@H1U3>x(Ytq25Kz_Hx3Jq-c;2@@O+#~TIRCB@P zr9TfZ_#NyLrOwlWXrP8%^>oh9enEy1>cl>YbAb%cXGl#r;XGYB28>V_4#x{;v2-m2 z%6&NJ84@irLfAD+P_lEOqy*u8unRW}2gN0y6K7+yHZ}4usV(`F*mX=0 zjQ!@C?dUKaY0WIZ$IgJs-L*P0pFdTRS%B^8e?r**k%5oUVD!27AVj}&kFCdE0Yz31-W?c5OJ|zzvDwM?t!va|6pfmdpOj~JDMGZGno&?zVuG1>2v^euU-H+ zgNVm;am=31CW#5Syi~(EchOPuj=4zSwJ#EQ(p#L)O>G;cZkR?z7LPom@49iin~0i3x^9yG zyyhB&r$zbLpMMlg{(a>uAE?dm3_q5etR2ym+?we2N_-;aKe#!tQ$RqqX=069BH}wJW zX7v`dmxUW}Kow*F+hno+`iOXAa?Xc9EO792daPfbk^Af9ylTiUbYSWVjq<-Ke?f;S z=9FR;uI*EUndx1F>Ba1p z?p;Z~Qesxgt7fu#&DO^+Wlg$Tl2RquhLat<5J(>;E`ImSHjWsZaAS|Sa%N6HxB%N%3Cg zT9|fifF={30)RSaQtVZ(MGkef5Q4LK-8WN~U@+xq^?AK=oa3-By4;{d&O=*JIc&?4 z8)weE3|Zo52A9}3>e!=sZ_Rsv)0}ZsI%b(0b>#P9qpku&b#7C=qtfyJ>_%N4ir;$9 zig;?Hj)=KYCmFR$2Vsj!2hp@jhXqTibdY9M=~!&ebNr`e9YrN{%ZZMEe)eM2OkkYo z_!sy&vhlgqM8|)+bPTxFM8{t&T?>J7qT@e9qDAnkCp!Lxk`jb>HPP{(DGBr3>4}bi zk(601JaVGrUowp?0*3-x*EjJjT&Sh3c707V(%R5mZR(hm<#HG|E>mq&4U|#JO~#Ca zOG~G*H=X8N9mbg19gak}s%e}fhgZT)&3`BZ8s|zJPnenqAmYjBAaqOQIfxLR_~{F6 zFB8Uj&XtfdEoa@M6qekD0}*vLN%cySo6|!m=$|i9ToW>mU?|65;Ji)>ZY;!L+%0c( zKyXc3w#32JtYzaV52+Svw2Ui#JG@-zd>Mk5Y{18+*fB?<4>pBk3cj?d~e-W|%l)hI4cy%gkM;F!SVzd;ZG;GY-ADtrg&!Oun;q>KL!pg{** z5UtEfzyFe{gVS;M(|^`sQWGq1^F`$?1D<{ zvK=_a#`SJt{KA-`%4@$aujPHnAJm>-8eTfw50Cf4oJN1|(b62<5cMa+ITy4U`}y|? z{vE>K3OZ#y4Ct%y^?8^q9u8TI68a~R7l2fwF_*w(y$<9{03IgtcOWkV_%0Es!;8uI zY`bCRECa#~)2nbkJZm|S4p1+G$vPj%%>ZtI$xa?uX>Fc@;VD(W?x|2q7A`DV3}VE( zBPh>36!pW`^p_R0!vxU6vxTuFPX8+ zfxj#mDRnA<$wVl10RUcdb(Yn?i~bEWN~LgKOnye`Yyc~X(DV5K>R__(8!bvQ?+)pV zc9;M%T>f4#y7D20dDjjRt(3_CLI5ry!T|aK^uoxzGbOl8z!YUhbSF5s(<|j%1K=tm zl=DFV`(d&l)X~YvI~map_1P;Lu{Zak_;0Jq5CqNDjZNJj5=}GIIX_aXA=QM0gF?S;kZo zk9CIhXrw|jZ7&b;Vy2Zw5yQ$!h*idE5kj~&D=E%40_^3_W)GJW6WfdhJ%HxrKvRUP z-Ekv}-#}9EiN!g0wMHcV!D<7t(yo@j()04{aN&x64N zpWh>XEx!}P-)$zpjDo!4$avV;uWt$OkSXIQi8W+_jM2lh`Snkr zV7p)@b>O}nF4j0daQMoZ-QrO>G5MPealP0svVU)Jmd)gdc7hm& zCC=lKnK-T@4n^e~sW^#hE(G_;Two5*!kY5}9Pt(HGdb*VVPzQa2#Ph6Fm#TKo3lAU zaeQD?Zi7xx4wxQPk-=%I+%8R~m>-&P97;#TC_`$D3q_i0y-vP7kRG%>wCtqF(`H)FYS{ussqr)2Bxb_l&3W{d8N8gz#J88NXamFY!s zx%KuxQ8g}eWj8Bx*DdSasPYcE^`m#)9CE|z&U`xf9CFi5@3|2v7kbOhp|{*JcHFYN z*5jT(oQ&?qEulE$I+b_ryKci@&R3Cn_W^M8Pq?V-;7JZx*|V+z&F>u2BTejh*$#R; z9tcp0-%X*|?$RS)JJbEXAzfZ*pYmrMSc|IR>=H$b=yf)#_6(Q__i4Uwf#@|4VFygP ziEt0D#o#N3XgR`hug|Oo=cdFuk#8dBG$w5+1eU-!W$xvaGxsh4zK*nTnaDY>4_uc3 z+bk*NBIkTkE(6vFlb=ZTV!WL@fkYhQ^FW0tLfv7*_RfVwiDC zcFyicn|Tk+9jNZuDO2a-J?`xY$L~C>OT<(vcm|9N{ci|;+Ns#0!U;?ffjO+xDGL}u z{}{1x>E`7cb3e&t-%oOlx_jhOyGO86yGJhD#u4z5N~bRS#*tJIm_7kzllKKgQe;!N zV4~%or}Q1{UxG{ec1`mN_HW>uWg)LMuV5$LH7SI;iYwSDfAlNZPs0po^efmYVC*Z{ zPvD~#6f=C;PeXJ;=I!eb!l&i-b)EzQp1OUVxb^mR;?~>OiCb@9CmyuizD|7P?dy!L z<@R-=mfP2#0BX5?ov7vZb)uHr*NIwgUnjZ-*Nf`g*NIwhUuQ_E+t(Sl)a~m;Qn#-Y zN!`9qBz5~bk<{($MB?V{>qJtwuM^p0-o8#`uX+1Ak^ScF>qJtwuM-(EZ(k>Jk9qq# zk;D4-b;9QD>x7Ts@^pFoI+3G5bQNK zZjUH894l6jf~Rg@r{fWuqv;p7uhSW~uY2Xrtn-Fxzd?Mxaxd3;Uv75`1(>iuIvDO=8o%^5Q0P`0r#rEpM((#!ZR~2 zKfehnFfTuE1f0J7d^Iqin4G%&JOq3K+3$tP9R#aa;g6X(E3ifQrYaIkCgU7WcFPxwaML5?fPrDCD= zJp*+GIc^|76T`Y}dbf@ZQWuEh26B%5-xM#m%vA_A+xkx8}V8H^(@ey@lpxFZsRL?7bQjK?nBX^ky$Xb$*`^ z&+khc=l5yz{JyktexEka@6%T2_X(-<`;wMAzfVk`-1?%(sX@~S-{Th=aO{yg+ z*J`~e&-QAlbe@ThMb){pCcVCC;CQO zBPTX_#KeNJ?xcIf;CRM9Wit+Z4YR}3m5M3%73CVJ@kj~DpF}gh2`0epN%H}NN3$6D zKY;vmI^l+LcoUELD4nmT&V#{qF1(1XD?W&ekvQr4B8d0GWS#zsTGaa%;(9lxi_}kD z28~psROFwd-5xdRqPWXsS0s7wTGj!R2pPZDycJr;gWBz%CS7DbZDF5|R53`+p7jHZ z+X|~&naFz0;?}C&&ep*=eyWlYHR&R2iY75-+}cW|45AiV+-@_yP!!zGwYYszyUFO4 zi8HFT+fyuA`TY@(As0EB=LTNkshG_F2zxxAhiTDabznZr-!@F}O*M5Fcbidj9dj35 z3#U`1us-Rl6lR&=zr7o9rukf^E-20rQl`tCGJJ+eYRd4s3{F4T=c zGG-9W0k1hn_%@OB5kg9upwuL4o7!>ne&904#P5MTC zT(-;s#e`66djrmw)wkEdLal8ALe#i9YXYbE82Dv!>c_(Mnx z7`1qxY?s=ge{61UIcP!kCS5-}J>~GYa+rq_rh3Vj6pGc8(PASX!uqm`(ITUbS8vIx z`h+4aM&%hT-Jxp_CsR8l}&v@aaT6NpjqJw+}=>~Q&GY!G@#-=CX5z_be= zbKToAS`^hSwc^O!xpy&BS7e`a@o?FIm^+J1 z0pYuj7R8cBDfFK{mu}cG(h-=Mp>C5^I)g$B+Iy3rtGnI&xWuy_#5qtxaLXWPr3VWI z^RcGW8y$$+>;B>k$Qtx!lV& zvIGc*1L?Ylxf0{+*6xN0%+TQ(AN39+$jMiL$y1=YCL4gy%gPWev%_Un4AkTa@NmsxwsMWQAwV#P)EfVSEH(Op#d-mGyW26l`e^Mnzv9 zbB>c{Y)!9NmToTz>`>zdcC&tq%CCZ}RF~UT^n#yppap|SKbS;iF^lFNWa1EW78fmU zr)N=yxVfXU*HHCY!;rmv5I^g)=s z-)f<33_n#7Hp)08tP^>;mc;OtHXYa8;!)!7V^6ezwZa_0#Z%Fo%KGy~g!VAZ>3f0f z)uGPTJl7*iQ}@B)E8utn#&e_Qa3Wrw4`}2!2&4FR(?w;i$h%Y%nCG8{AV%{FA?s|*54+i? zoX*L%GVn0OMD4|G7~G1irJ@P z4p4~FI0>Ogbnjq3Y2JubxyRhdbL-d#--|?38UeS>K@}ZhME0B>Ovbq}ku0BQ5<7 z9kKK~bi}Oh&=F6+Lq{zA4jr+~cj!p5zC%ac@(vwSobe7F-EHsCkz{>`E)GAL@6bI0 zj@4o!8R;nV*s1V6ChiyB(M|xdOuQqXq4O3^`y71c(Aj)Ni)&)$K_9$A$Fn`wN9Y*( z=#S9R#W7(gMB(YV^MH)~^c-DBeR_@#V?RB|5CRkSBLqA*M`WUzT5F{7+T0^Zl$jpe zLveU*?kOZ`!o84!7v>ls_L!)zju+-+tWB9Vk9c5iFFa19@8816?4OVdX5@oaczmn~ zAFuS=V=C(!!^I zBl3zGJXxkPSUIn^K3O9f@Qj(t=t`x(-`pkVlJX3ez_Vs_4CwdkWPo_xjI;tHt?Z6B z&b|r~W@1WDud){le|@+hTHwJmG6xM@V-ro2@$?zV^N=6NfM#CDjLVa^s@FcvoWPT4 z%%x(L6Js#psWdVzRFY(rO#gT|jZTY{{|qNQqeiF2$`{@lP0DvhO`mvJjm}UZU>S^X z##3u_E;n#p`qFakNlkL_@EQ{aZ3B6YC}bIv{Y&diR(HH=$s2n4l;nVmQvGhl#X;;8yf37Z zg1u9l7BA!{X-`<()ZB9Vq7|6iyg0=a-&>z}a?Pn&9_qN`Ps4-_ZUxS?N-j+0V{|=q zDN3_MFV>n8e7H8=-dTkYj$yK35tfFu)=4<}FTVb|US8!xhkRliB&660u?Bk6xHNT5NR; zC*3!2@f!AIJDT8$oHHTjyvuOfaAQ3J&3ay-vNrf zfI|-PWA91sEq->i)RxFR7sw8gKZmksV|SQoIZl>h=TK6fe4!e;4eM0(un^w+IIN$8`b>RFJ>3_kV zM@erLl6DHwj@X4rHK9ZuknbN1OerN^W)f+mV$50&1T9jY2O=#**?HK7NK-f&jGdbh z>5ZxYTc4aL6RiiONJjwqFzkUydHbshyAWwLPA2k#BAtelsn{t}%sYnP$7`p6Qi|4C zMZ&&i2(X2?ZWrPbTB5PsV|pNIx2trJ5o`beMa%w603K^Da);OgJ`)cQA87V!TW~5&@L5* zb~#e`(5-0X%S0nzkIU-_dIar$c@b~2d=-~p#x5$YDJBmE?^miy^E^|fzopp2>m@;@ zc^*`H3kv2pm_?;|xA42z#pb)3^fwC|=|SpM(c=`healOzxu|ASP|aph&8Jc1lh{QC zbViTgFIlN7!1GKMXw(%L9I61%g9`i{1^)!QsK9S<-_EyX`?abp z_AL%(eR?-qa}Qn&D!WnC2iQfm=KF?fH3$|d%RmAnE&ma`pUrtLN@`!>j2Ar^F9A{uI zxIf-$84py`IanhpGO~04JJ*r@>ClG5y<7Ikk@W1z%K#oF(I9#j@t$%idzZI$sigy1>fq2P+6MIfGQtZ{_CQhg;6{8XS;fbL2FyhyYaL3i z^o-mHQE4{j(h@|K?2kWyAl{{9*d>30lfPk4>zaS0CiJYAk-yXy`T9WH^RdSX3j{p^ zpyAksppU}IIPBOCqxS4l<63 zX(V*oqh9|`dM$i?N^Cy{fh-Go^~$o4mwpaIET5IWkk`NbG)B%_;48!Th!Tys?}Ytc)Od`;MK5vRqxA2kbt5klS)~nGf21$b1r?Pf_f*Sl_iv4nQX7XC(GF zA*Y0XaWln_HWjLMJd$pC?&pA6R9CYE&mJt|LtRaldr%&MaKA~pz=k`jjLWKu2f*lA z?5lXViHEz1=hWj=1ozIJxXk0AtC)k6#yWpl0=uyAQGj!tdac4saan@*uUh6WUM?3I zT^69be<-AYKLL)-7eQ@7mjw%XNV+nZF-WSkGO$)`N6th{YT=dc|_I_o`6gq(G;W4aA4^HC_d!}dC;%A13kIPni zT!rusyB7H_P$oHi06M(AVUlOS^hRP&DLy8H2)7AkSxvH_3zJNCV{N^E*+P?l0+Zdd z(D78%V{pjHYN7Wc)zc~-SSZ(?3*e@OGUCHBG|DW}EOaa~X0%Ygxa9l@hr&!2nv=;w z2T(IY7Fv$nSbarVJuH;Wr(5Uc?rJXh4 z49j=W&YBzXCD)b(mR(YK9iTZ*qc*b>aEbferkQDU_xFV)^a^n7Z7AFpB!$7TaGN!g zwpQ$C`PdeD($&$vCBKee-LnoQ$Ca?0!?5RTQ#+AWI1!L3*mFzffWKaSH-Kd9`bB;D zAw9bwK~_G8H4c0B?K>t6g+g0P^;(hU>TB-|;E zFqU+!WOv8Fp<&Ka>u~bE5|-469pGiw1QvQ7uJE~DLKetQ@N8CX3qZGH&&zI^-$U}F z*!$h7Y~d@&mu8v5CWUF%hD{T_m-RJenqL{TmqOLs(ZR04zE!a^6-2n53|JP^%oeKZ zMaDDsi~sWL_DP1S89qm&!$aM3s8BUl0XLYvBiyf{YAkE0nz1A7ai|(&s2cm5kkeiZ zRlflJbk^aJYsDCs788Joll^62t6v8&$7xfx8e>$Nm)>3KCA4Kw`Yuo$+L9yA1R2)c z5y5bb_KOnCMYYcDPuv37fWxtY)mJg#ek23ebS1WL>8E>6JFkM3cnPNWGwiwj!+mFM zsp>l!E&mS5?_w`|U75u1k#8OC4*lm5)_^}M@HYTfkt`R|_9IxaG?jIuGSoQ6etV@4 zeF~lNEqqGweL1EajZv4d!3KJq!*lpg`I8%13EfI0)yws-ILJOxIZEboZxhSDp+^x#0$JfjJ3SZ-ZPOero4bG{6OeY zXtz#R1lO;nbc&SrT1uz5!D}gib}x$eM*`i4h_AE%FEzY)X&S5XnpGibxZ`dl%z zVcAM+e#s0NuMgMY#l1fZFrK}|L@x3ucS%z9^Lt^LA_Wk45a^AIQg}XPZ+PP~5pGpruU4HxKUgQX@4-7GoHRb6fv*s5 zK+-{3rupI5>sw6Gx|qN$B#xP=PeQ|#3B7@ac2gShn<5% zjMZRzH=Z6Bvw{AD;0|*-TrRh>2fp*_mg99Ue5kes?_HH`BUeAcp+7Tw{xU6TPjWlE zfO4?2o1BFn>h8vZ5R^MV+3_NV6rFZh{}~;n7%U!=-dnN~Sf#%=JHJkPONYkcuin5+ zT&lkvubKQ`mq`iy|F+A_N9Dt-H}KkDy@3~c^#*~cR&U^WsLSMK&}D|M{4SHQaF;pU zU#fq4?r^>dD3B>L8%Q;0o^U2^CX~L91bk0YKDLO0R^Tq~ z;^sPhwA(sbtma?D!Q%IjHO3P^ZjjEWsO)!V#Ts~mc3FlCjuCeVy!9}fNW*#owHUD#`~D1E3ZJq_Uq>mr4a%8bx#eW9RPRIDh1uy|?18r0sp zSbT;m$H`B}m_O$NJh{K9#af$BLF70|g`r|D$)weqWJBU@xwKSW{v}B{7yhw|n^bPU z^mPf|)6H>qsdORrH93$v;jv>We{moaF(z0JHO7zp7B;l-!|Yf!wApGeyb}m`6IvDK zoP|qK;&Xn9V_2d%1SR@~tqPa+Uxgov(st_7?#87?or9HZr4HO)bdspS4u#fVbb2aa zMR|40SF|*)z`7!Gw*8LMsd#oL$Jwq+EyJZMRcgnbMO3&PXPd$h6<7)0kd-O z)m5z%vDKxb+3*Qh-O#Z$Wum1466$NkE*wDBI6zOT?6xUzemyU?frL)N8R~H-iXKEL z)><{EO!Lm|&-yhp2W1M3d3X}pw7}e_*y zH>R_3RknEL#XeG?7jThTetMm&ST|VqcmX{rR0z59nR<92HC{0#dHPNoXrASLS2RJG zO&CGb@>Pn_DnVmwh=y`6WK>}qtd15LFwGX$qr5kqLdv)O137g&1`_6G-*O=y-cE?l z;ihsn(^O1oO~#&Bu(ZXxX)LvLAui`&FYbjI>zmaA&x;Nd6V{u=nr3{!sula-?W+9y zQ4&^yu&a{tW^YnHW0B-D7D;|Qfp>Wimv$0M*+n~5zOj-m@bxzM8o|R`D#_L-BQ;K& z<9?_T`$IF_Pt=9Wi`?JKn$j5X+=cYzR_y*FyP_^?&GyoMR82i*gT9N+zGYNh;34eA z1&xZta3A4%JWidUC>9?;0p9>AT#3E!B?@x}m{|rKN@KKDxk(oQFl2+i>L}S)NeRuw z1gU8l-ZyN~ay2R=UY1p??IdOK9prNlqo?7Mc;Ci;M1w-5#bLfxb&lR;vA*myD^;p~ zBFw&}5|6FQg3cU9jGv+qJ~u!37==o!1pi`<@F6g}uy>utT6erJg?*mS+(5K%qHa>t z!gW)>P*V?&9I2X4EN4x*?EXCLs-_c)0|rfR#KE-!r`!_qTI~ zT6uXB^BhEMxhj`HLp(Uu`hvX{rR5vEY_!XZ#$%ePR}>0X3W{wfnU|;dw2`~89L$YE zQjy|9)CiL@Q*9Pcls=*&C==6HVZKYMtRsqJ{l7aI4|eu7$dQ45wtb?=-d_}4Zp-?` zP^r=i``9vFkuLMq5fTmiHqBFDXeyI7HL*jw;XB?K#|M z6XFeOe5gr_g23}l2iQjx&$J(!oOee5+H!kV-dTAhaCn}51_V7ql~nFfeOOeg++q62 zF@nho(ZU{U6KdsALU**jGSRXsSsms)B9MD|e<=vOdg?+`CYC4i%H0!-rLGe9$Z}X! zm9ApmQRRbKMYhD43S>B1h_zhEskhxHQC+%5kQmFB!(-H%c`8G>NAAN|ioFM~;5X?_491VMdQhbJj-)QGi=O!Es?v9Z<4p6}M#J(1Z;hPdXLC;!j=Rrmx zj7exw6Eay9jAzTFOoQT%6T->MgS|?-rD%>vnJf_Y$;%UfQ!p_N=d);s0*OOzrZVt> zMhTnrb50ZDReF!5_|>H_OeyP=Om({4hSMO;lTElO-BZHWtIYOPA#ve}4k=3szH9Q( zugnO;p<*IsW>_)vW_f2p`lm%;(6)9QRCZIlRS(Tm_wc?9iA zs{btCCbWKo%xnTDlr2k2uK}sq+PlUA4=Ft^^uRS;Wytep)@td2rSA6DHk%Bz9PLaM z&oR^&N-j0@A|dF9?7e+K3jZrxkngf5tr^Jky)V0pxQLmoJ@7i z1u$YDd8UEn)5clZUSfz~o5jYIWr!Y8T80y7gJlQju^^*%AC9kQLVSU(P`LthvcCs( z0woZAIVI(o$|!Xcf)w_Qut2tETsmO|W^b1W^>#@=cF56sp9^zFz+r!;e51|4K`WdO ze$FBo@qz5UdIhYN50&~{phJklAWdXJEI^y=9qQow1R~KAES3(qMCx;2qm5BH8h1b4 z$MpA|oJuJ*+m4oBW-7D}3kE1(l-5iveqeeIX^_$g1}T3hw1W+i7At7CHn;-LN?S5w zhAa+iuP82AN7ik0n|nE`^JamdU^)slzoq=NyU}MFbkCyQA&g_4P)p zncoiRfO9Fs#5mziLKdsrH%BT?dfe&DT={3|l=2~9tCydq8cU`X_+XVK+)RZ=GszH5 z$D*?7BrF_|>i90)CYtM*Y1f+6o?EpxG)DFaY~n$z?}RMV)uQ&&+e1hBq7smE&^$?L z@;QFvpzrV_={#Mzd~K8vns9+Kfo)cxBl1F_Hkvo|7($qE3Mx-;U-CwS^f7fDL8j=; zi#0_lceH4U_7HuQ-Uw3VCBn9~PWIP2DQ#MGqu^MMWXeQTB)ireW*cC(kBoUmWRDrU z41AU6GuHtoYf>c!XYPE41Pvy~TPdmH<$mchutuF(^npRJa*z%{5xb*%PhnsHgrSUx zh8YYX-q(^2>*yhYQEPP^PD^&guPDGh*cldq>4EWBBnsJUn-FPwlF-*mtBnZRjQ>$ zA49$Bqum{eOLtd{dYcnGB?2jZsEt=|LtM+Db}$zb2rn3Fmu7ZjQ0DX@?*JW64U|3v z3vK#i-vcDe#-Mg^WSBc7GR#f+!`$*f0T0aNhz?TbFFc+Mw}<+!MkpJjxM99S5g;AK z9h?ph>+d0kYD&j4TuyNRk88}+(`L=L)1{bm()@8)q%1WYONAcJ}Z`{g)qwAQbW{i87rvAd9n|UOsy2l zfmn$zU&Fokm63eEz+;J60&{YHz)>32vofh(0}L%dxnvpd=*wxNL8>(D+l*klpLkW{vAXq1PsC5Kv0s6jAaOpq5i(YUN*L~lV| z3;~5j!a;@wBxeqz)5b;~<@Y$umZ6gFd9o;*KYz>`NWWMp{bHy}2ts}3lATVPo9&|` z$71cFOQeT}wnn?(evw+0i$Jo!?s7{5p~^~>`8k9FX-N#=q^-+246VxAbmNQwf@#@7 z8ZM?Og~h2*@BsLSu*3%&3`4b}wv>`lU%51?17)8POeG#9#OL1&7)ozUtC#Vnngo=g z^ud8AIYfJx;bG4SRSs)At@W@l070i{8U{vtIK?5`Cp_2Ys|>y|%tjOQ(UNyhw@msF zNOp}16Mk2F+j616N*VRAQ%H)l*u;gTLsNJpapo#>iN~RQY zZ`mk)f{srPfqbzu>J2=rp(K4xFBYCZ>Ze=BvOANTmXZpQLIUhcZc?RkGDs+wZL7tU zQM|pP!Yc@bSEz+o6vzbAKxkk?Cb~}&z`$^dv&#fGi-JNZR%z?1RMqtRTyPmB(wV|h zocU7g{y!qPpx21`CW>JVXAu4cOYKVIw8s>4#(_fYOG}llV(66&N;|X6u)9=BC+|;c zMMQ%eQMAfis`8jAxr(5a*i*Vr$+8`u+J zvzO9QcDU!!!@$tEJo5-DE_-L=K8Cv0Bkp6!p*!yL7u0td1~c_Oc;9 zrKMrPLlscDde9LL=ZvU9DlKOFqoGgm7=Rf?%g{PkcDy;k^hNrNf|gWh?w=zV=y)(C zYqT7LIrQZ&BP7|Ehx-BP1p3HcT;brU0Q$(FlT^bGMqc{vZ{NUp`uTkp^UGenKj*mV zpRx^vb+|Y{hl>N#1jtdvAZZqQlE0iGRe53Hih_p%w67A;T`yvUndRdFL5Qc!AK$GG z15x7x11({0YRW-DH#$^zqr>!Q>0mjLe@G_v8J=#9hnlyN4>S5sIXphxv@uzOi^QGC z5oY)+Zn@(508@oh2!AR}P#_1a^5z#W^dl^wO17rDp?CzfTb*NqQIE7PLVNtL-u{e7 z@;tnbb0cbL+xFiJdhth0rU}3hZxK@3u>TPIZ?MOa7_*1O3QH#8%$~->X@s4PgR_`t z%{;8-;R+sZ;NcD)w({^W50B&EKF2dI@e}(k55MQ(BOdT)#qw~#%Q{w04Bu6%2H0}m zw(Pha@BfkKO!sW(KHK)3lH%gxzTTj??d7lW203dgJSV=;8;ENs{v-AK<6^Hj0Pz;U zR(X?g+G`q4kMZJhd!3hXp19cd3YtYmKs*lxIJe`+_WINUdapPw;pw+#dqZ_e=Xzd= z=M>|0qGBL8OV@dh^L_inVy_=CoM~Pn{>x%77w3uikG+Dpodl`4^CW0F-wS00?3?x@ z3bCDtDA9T0;w0!z_xj>8{{pXX@_10c+{5{!z{EMQ3vG`41f9C?` zNjUH20i&4o)*(lK=SwZNmvVAyy&Pvn3#*$~;ibS#vI3mn=ncbZuL{&}qmZ;0Z`Y|_ z{H9_riDWN+saMV%w*hUI=RGz{pbXyTd8@s_jYzMaJ=^Q$9KFDcp;5ih#O(>*zzIO~ z1~#EO6N|B2spsqvh2*wD98x;YdN27IT+M>4PV@?n@|;s}cDg{0e-0TZfF9+sg3T>> ze|W8Zj#n7BcgzRXMLhG8k9xftaJA6ql|0+GqtZ3W30|+|NIO^8DHgxM^PJq<&F}oedPHc- zRM2;>Tnn|DUQ*(fpmb_3GaESHg;Xob^=V1&F!d~lNRrXo}o~M_1xu|+_ zqL6GNK1%%N-t8q%h9u5MEzXT^^_+#mE_>5NXO*y}yuNt-9f{&NjmKIZTD$~)9JIh7 z{*Dl64(Qy3l2&+5gV)Ddz0Rv7ZhW10xcIf@^#XZWE3YOXgHw1LO_=2DJJ3G!ykeXt z;+v6H;w6fNsPOQx5Y@D7qH?#O>f5m=@aE2e*oC;_=i#LGq=_zAq&WjHw3<6!e~ zP&PnCwo+qp++V1`E=r3v;LL91LGzP6=UYI_$NNMw=M-SEbv4_6+uaVwb8^iswM>avl!DAy&mhH4oEx;9EaZ zm8vzf8?m$rEucm=mQzL#kQ^}!4FxOs+S+?W>O%AdG-tSa7aoD`(t(AueG{-cdSl#j ztc^PhUxv5FW0E4tf#SfoB$6e?ULH_#C%_hGA*byf8b8b{m==fGl)?0z=HxVLO)r#? zle`V-4onw-es(uy_*2yEBi4=v6&r~+X6*4ibS?dRf%X!1nKK`c-`o9p*sAnsLN+~e zHUe!c_II$0+-?jplbypu5e_jvhAhQh^b4gMc~aWRStZVp*r9ejxh@{7D50>E3(!5x zp@f`#bash&Z!fkYewBab7q>hn=5Z6S)gt#F_mj z4<8ctcOE>vJP_;6!$2Mm;-QjqXiWRLhyTKxo$_ zR`b{iv!S~`Sc|a0Irgpi?BpxSA0X8kxJ}@$C@wDXdQ%k3z21|&+_%s&yG1AhZ9a9D zH?GCYo8Xnh9me9<;MscoA_n>ru+Ysq@%73OZlVFSO!G?Uh^MRgNybx0)Ov8@74yBa zXY=(z# zD0OI$K~Tx*C4GS-e1PqUsLffHT+l8on_&WC!-{DLG=6w-vX57Y#b#gj2HxuBqaTg0 z=nH{%FhYYT=q2R3u(-HX$;Rooz$*ej@sXlxw+Zmj+Zd#vs(sgq90)gXk>7?;fK7Ok zmv5sLzUUp{OlWx-Ih-?W?*MX#@G}R3OUAE9G}Rx~>Q{`?o%uF+8rVWXAmX9J%8SoL zIE1)x+ih@Y4mwlYc|h>!*+rf+!0EpZM90LPH(?(6h&#XN9USlP^>%V9yu+NP30~18 zuguB8ud{lBSK_Q;Ks2d%K)el1B#+C$4LSzJ&0=!XFEcmW$W1SD^X(8fWaMuagy3AZ zb{Z;H8{!Raqz~dl=eNL5#9#AzH+qTD@oPn&+wV5IT{`LVr@Y?N;&8MH=Xa>lAqa+! zL38EaL&!KG!@g~36tW1VSs0eol~Piu*etp%=W|-vl}gytA#AjWs@`%|uV`B)Vb=;_ z7qNQZ3{{W9ewh`25Q7if`9@mOI<{~dk`!~Hl98|)p|4~*4W3M8NZ`O=EmHc$ogr=L z&YbxzsNEqjli`rZVP5Z(dEz3VvYi{(QfC8wsDLi=1xYW_J5D{tcmaJ~!a4B~JSt+_ z|E>J*xUAmpU3jG;yzcW^?84hQb8%)j@^CR>GSK_Avb#lu3vmh*5S50~=rB_8hJ;T|4@6t-$9Jfvcj zSsapb6nF??Ob$uMO|I~SlYAU)&_6Z}!7Wk~@kfP$=f}S$9HAROTX+qZajY`}Qi(fv zuC<+CS+#Wf_pMFI_|^HD#bL~&B9lGQD?AfLIp0{jjitdSIcH0_FU)W+TVi3(L8-*tvG)g+UGh8a2_v?<)RtS z!{~vHQJ1wb24l6b6R>{)yJ(EOO*pf;?xuYYVGr`~1P{;g@FEYt=HUY#{>(!Trr%_< z=uf9QzX2!Cox6p?4Mt>`NG^gI!7X#ZI*a{6ypsMEodPa704U(-eKy0#Y2IMiE%G~g zhymlrpdrp;yF9SA1$fZY5^n%b?0FsDSBt*NV z*VE=&0Ck#cMbD3V9+s5#oaH6nfha`3oQQ7_3~`v`IHlB6RLhxzaWcpcgq$2`xPw6} z*^V!0dxY>Iz;n(G!zpAZW$R+|;zMS>C|~Uf$<094l)A=l2Tq zy!ht$J;>e@w#z zoY}AQa4d#hoezX+@tSEX_U~dBxf9Rh%>D%rZxQwf9{$Dy9b%HC7H`$GX zE2{T_&RACU7$7n{XH84IA)xDXiwFX8JR++cA*y`mNLa<__)rYQ*_^g>dpff_1hZQ@ zV|E?#y(XF6vKE6cjCO?xF^s_63s|zJSH!=jM55?in@;BgLFYzA2l+E9lk- zz9G1N>0;48T#&Jq$n{f_>+fIua-h0**=QwpZVawCA>v?oWjnvnBvcd5GQ5DHz0<;8 zKxprc6ty!*40)Ee^hLEyP@}lwIrk>9>&?YHkidKp&Lm=hLy-th)I>n z6S_HqzZ5RP_l>fFb;=UH4oEx5ES({ z1AL0K3wYj~b1>_F0)8;iJ`3JZP68vAM$ac$S=S{iPlCw%*oR_KVadv|II~aXp^mUc zJT&njSkX(TM_F004vz1-Ok8v=koQo2Z!Fk1O)RNOfi&REZsy?*ZkT4rx>3SlP7-`%>&uARBRJ-^|0;3Hv4w z5Az_kLA}_oS()y)4QBEi*+kA~d|pCLbC%-dRQzU~Xm>{*z_&{+>l*A^unTSyZ{p1U zA71{22N&x~#CqZ2l;U6y<>e3+Q7_6`^k$&_5c?Ye?5=ivpW!Ck2|M+D6F4T=NRB6i{rEYg!m0zf31he z69KP(MSpRO=(`bAV`4(xibFqva85>{sZ=Wd#eGs9XN-G$xyN{;;C}C|jZYF(`oSs5 zDWkK&&WSWEFSmCsVt7n2>D5W3)1L((D#+}~a@Zq&iKLf+!N5(FXz0gRGU^9L2_NDH z32x#QIS291oa3Bke^K038qDBg1&0t`$~d*x#GRJ6kgF@a6~Zw)hHvoX zN#**uEVRbG47j;qj#-{87%qOFDoBanrwj0~2H?*W6p6B*1M`?C2lLBu+>>0aV4kku z_F~C5Ojm4LKIjNU{WRXLZsHY{$ntc%=<+b}Aae=@zN`H*g(d%f=_+ zjc8;4=2RE>RY-3KzP>*+O5y8zVJblAp=?S{u~VxoYXf%XYgBw)LLfH5e#UwZLu#ga z;&vaDgnVR54bheQ6%rA$2>Fl?OW$xI5L-6+oP)GBkkmJ5J{H*7`EIja%xYOT=Wa@V zIqtGI%zbsoD;b)LJV0}^(Iq?yUGZ~lDgKFC&RDt#}oi=z1Fyx9kg{Fz972Co6SxI3!cWLEhO1jN~8JmWue{+=WP5kul+jc|V7b9zDc29qw=Thgg zI|rXH{q5jZpmWpw>Q5z)lVBgNzX9Ex2G<|N9-9WQe^<8m6=`t&S@vf_@J#U-?Y@n5 zQJ<(mJTEqBmenpscD~(b%fB7@^$2sak-x@0rW^T-pc8snNI%0((ytNyp!PeN=pP5% z8syglx~U?!uZI!6uXm3HMzp`mrgxMNpK-9%C~dSZpN3FSaz!n=VfesfJ5% z)E_Z$4wc9DWqEp(#kiH5)<3#0wy(z9spx7u)ZNz+X?W?2^QGgF#{cH+v=wukFKBLQ zSZYmK)G+V!r>$6OorV=qPhB8Bdu{Q%*QYL+!c|#MYna!vc=@tPSoL_BSiJS*#mkmA z`T5UmXlh2Xb=;hmImaz-0`l^v3shOBwal6K`6N6YWEpM7{9k*o36s#~lXI@J~ z)8giq#q&UbtssP|ixrS8Bu`pC2W*|NWDZt?K5Ox^BS))D_}KZ12Fa{ZRyHv$0w+`F zESrzD&zCepFl?at*8Ej78|E}a37VlSCvs)-^a?a8EwWC>y2xn12B^l;Myv6Z)6rb~ zwsLy)8UuYfb8%D4iaASEOIV9_QFX^HKWp)l`BUaVKy@gusYQ_f-)yyeuWnP0KIi0f zmO?dGja)UhY9tnr9=ULF%Q?+W^Uj&O0#Y4$#*~?-kFBz%96jpfQ4zdRzzd+k8Os@^ z_J-9B74tgFzZd9O#~nRt&ZwpEWMivFtpH*CEM7Km$qM+b>`9{r;2ionPm) z+Uep!OxDmp!B=yZwNxy!;3DwN;gML^ehIE%zYRda8A=4o{DuWMp9}xm(mWq$Sb2QO z;<-3!XlhzS%R-yXXaot!`1n5{!SF_kA7H z$)#WK$ zY3js?x#8d2k(hj#SK5{`TUx|!G7mtTG4m=0`ukX*2>I}}*ZnXq>cocyJOpRmjX!P!1mpm2{fatS7?_kDMm ziDV|&zOFf@!sqRW>ULr|m>!fY_$S@98^5>SheBGqxLM5@*X@_ine;g0x)9$M^n-!) z>wQ>X5hjT#>AIEbOON~37zDviCcQ0AkB50lzs?XJiZb`@XecD7X8DcI{{%4wtOzLu zm;ZhtE&C6WQoxH8Q*ixnm(zcalzdKvjQp#AyM+FOyi&l5kWp~??-7#dtMH*>JaK?8 z!R}jsB>JgNdi5SeqxvpPxCVM0l6im;x(yS~6vPkvu%kq;B)Un4?fA6t(#ARe-Z1K4 z5IB|BtVR^V??R(T&8*n+MsT;=O0`dD#$9*VT|X!A6rSkhE6aLw+mf5`;Zt{0^3J4t zhdpz%#YaB5xmP-OJF&{m?%mE09J|Kd=Ir3l&GGx~kdO9E*>A6Ao~z zN2Xf6EuPnG9XV{XyT!xOf6c3T%EHNm+ypWz-|C^LGi6bffqRYj0NzR?r@u$tB+~%z zPF#i${(ZXHy)1c6QdA1S7ZYzM1n}*|?-NRd0MDF_f*-U0XyfOq*nKgLPLR`Bx>*2u zLMqQIpvC9f!tKa{&O!;-*k5NsU$_6;7VCxqepWr&w|*hYElzKIYbcV2j*<<}s=9#8 zkdPU&@`Th%NUatJ@G6^;v-xH;8+69K*}fCx+&k@WNdSuy8}Vi+ycr5_hQ?DAh)BFz zg;%TaYBe6{vc=tcLGvm_0@A3z%8rc=5>bFi)cDPp*-(Yc?5k|2dG%(|@{mKWQ`4?h zXyH}Bu=Hz;f@5)Tty)y4cC)J9X8U6)O{_Vk{@i14W#L=xhwWUaW2`RlVf#5;xBJ)6 z*{|ceXq--e-TnaA@A~N+6`{}0xRMKzan-WO6JNfNoY=z~1JNZHqm#-z?;?G;j zKPFL1^+`jApp-u*cN4ff`Ilr7N^$e~=vwK7G=44WwACwQBPNM8H+}7MHatoSW&HKgHft%eca<2yL zA_I1H?(MmX75GZIf$r_}Znt~i_nhXI&F+1fVIw+jq+wsHaPs%$l{s9$JcLJt5$6X2**jiWAs z!_D24c$D3x`)K0N37hZK1e@FVEc=FM?RV%f-?49TWS?=1bC(17UCt8<@PzZcBb8aW zB$nX5V86-k>`nXW7;NV!v0EJcFbjU3aDL8!x{qPp4Mr23yt_WcChZ$Cgu zK43qn;1Alb5dMn2LjiW!o0JGc#k#AmrVKx@FF|bK-Wc1$pT}Z9=g%v#-}2}E*kAec zY3v$?U@_a4zK(rFc*h6fuMy(C#=gcD_Poj7EC3Ip-=o}j*z02aT^HLB69^k(&kMlw zu~#JEmDt+?@OJEd33xyDHv#xt>{AK&G`2}JniDX=mQkdm6n7}fAKCB;?gkV?4n!&N z5wD_@phpdfC3NcUirqk6yaDPWmGds=Ndlg9o>72joYx3=&DrWojIHi>TmZh~b|^rH zi}(I!;_yQS_@Vm>0k62fk$@0E^Hh?bp~)jo669xS@&E|(Gc#U?72JbD`P;oGWJ3Y=r6=xib=V@6#F#*C`rdG zZdwf_)K?8>@jZ}uIN_W>e6#y7M~ySA1oM80oec?!&29HOJk+|wd)$-l^tksT0WW%Y z#{~dr;zA6G-1hk0ag@Z({VucCx{rH5#}66inP&J!uRV?|ac2IA>B#UVVS)|9G#l<; z+)t^`>%A|5Fw5bY(}ao(GCQ3gGWmz@3;1FG-sWzBb+W+Q+~*nNqeE?TzvcP`e(bc; zd@lhMcqou(&iN=1xwm6{ty<0ft{k2};cO=eh&&VHMM0V*+G8D5^N!f#%7`A1y-L8V zv3BX+h{OvaADn-e86XvQ5>hHS(^7dgwwZ{c8DEXPNyIl}zmFB1?K%i)ZQ~|-S0g>FeIRdLxYEGHLW|~`6iu`3GWP_HC2%58U z91_O0O0OV_amSqs(5bCLC zG6=9iM}iZP5aO-`u#zKDyhs3ZsASbqDE`n4#fyOM1h~x;rt0F|NmGHGsYV0A%fJz! zJ7Tm(Mv+2>iQw5V5NJCyp1;@V<&66em?*FsRRyvzOvjp!ftHS8s? ziCt?Zw<0`4@@D&O_G53`zYA$Ba*N~{Nd7H*sNc%upb12BEt212hxC?A77ZbI63MfW zjKKa(1ooovS=z?kqEVncY9;8dTw{nC2{YVLD?o7t69RfjsC7rRfL03=0!m1j<&Ihf zDyx{_)6gRPzu#_4fPI*@aJOW(+kpuvL{Rs^$zJJP@3>#VENr&ZP0m*wF*%EF9Wz62 z2j)mEx7EAT6Emk4!xX>l@4L^r?r+`pg!^&g(OgXHpraKdeK{@gNODI~jOtN9VtqnP zSU{a~{+i>qVx$Ua?xne6^lBA{i`|Ym-0g6;yW;yaKDC@uH+8s$SnC$sy$yW;`@Fki z?%n9e+->N)ELfR;`t#V!G4x2cqN44L_&LFi>1}+_!QC31?sVR9-1pE6yBpE-TJ9f% z)1B@+uKON(e0QU_(F5DTX}foq=ibe_ZbKk}0z;?q@5bFn5Foib5fq`H_D@m4{k2sr zz)PqgHV6ABpIX*J8#gcH3vC7qm#8b-N?8uPU#9K904%~Ta0J3VIPQXf=3*<3&FPyU zD}zyPFY$0#=Q#faN>LX$!%+0rE@({w&dx4y<^d-k^cWw=MPil#($NL=4Zvyd0_PUs z)OSIhYbNdNqMV(;sl*=0nO{!Y)k!YgzHCHwtWv*Td^L!WR2VXkkl{XrS00*)Qz?No z3IW;L2`%P23^=U@hZ6v)?jqM5;M8=1b2)IRM*%vcxxVBm}Q_uf`kyRuL44x{6$Y z03bHvIQCGaO;Ql~Q!$^f^~;UiW%4!^bDNtLiqr&KuQQ{e_;Swbpdj2uK{-os%ncB5 zR?!&XP|I=m634y<4lnq9A8H-QIH#N8t3!h;tNhiVjB^0w+Ves~)Wh z>8eM&U?HFQ<4fst8x~4RmUSG;sl+Zc6D^Txn}zghjpJ*t%*9%;E@sv}(O$}1cnPxz z!HCvg>a5gW>Xo@^?WN9wN${inyNO4MRd+*Tmm-^#*owv_SSX^73p?;B3~ckbItYGi zv@|mCOz%hBzF^q2cbSVE4nVW%wfcw)8w^ZPXkTac-l@czf`X)Od?*Qoj#{epK~k!e zn7L`GQu19%wXqvgJsy&hQpF1?i{~t9TrQpt_lY)=2yg_?0(vtbMF!+sfTRq_PXS>J z5aikoNVNgUMHOod2tKlI)fN(V+x5#{#m;z?lxnT?WqQ04c&U%Yl5(1LQh5w4j_-fDAWq z)&uezIOhPT4Uq8$&Mkm^6P-nXvjvbf=u`v9gMdsmayP1r-q^6rIu?+ioWBBRV;E=NlI6_}!w(MQcyO+5VVng^Rx~e~ zg-92Nd8O0GzEp4mms&kTn$&NAg?^NQZ%Q5+D!3DF)?y4v?J& z&Ut_g#9~$f&RRgMLE#p>3Xry=!?bP(BxT^-2goxM!sYw`kZJ?xSwPO89LD)IAoT{$ z?*aMZ)G&^n1HWP5^a5n;$zhzqfV3MphXL}dQ^GhC0O>GrrUJ6DCX6!+kevoj10Yvp z{+#lWa&83VV*}?RKvI~L2xNF2AVpYdEU<#F0&*6X><)1F-Mva52RgQD4uaao+Az+; zz?tgfu-%^qh;CX*Y1r0ptU8je&fY0J7DGr zz6!{Hogc>eHXu6&Jk6Y~Z{MND3p_0OvhGim*Il(58O|QbbXB;VQvj(kaApIt^6D_o5~X|!ZoC`?XEn%D%K9U$$%7L>j9}T zaIOX94+hR%fL!#AaLG>ra=8KdH6S+_kWT=))qo5_-1pxGWE>z57?9Hd=`bMY0rIR5 z(eo`b>PG$TMR#K43x61F(eW3$cKFlqrsrEK0YpfOa>A+dyh4w^kS1)vm5k;L&=n*rhYtKEQb{I%79aQxL_Ksf%|Za_Hx+G#*I{@P_gIR3H@4D-YB zSCIkX_$y^VIR2{iA$+@_Zec^qPOS;HS!aE<0oqbDaAN95w5BHE_tOW22Mu zzl;%}Q^U7+L&JBVb)|;mm67?&S8=J8@J0=<_H~0P)bJVuLJhAsAk^?i140dNH6YaR zHUmNpZ#N*+@T~@f8s1?*sNvfU2sM1C0ilNPG9Ym@=vJi(nc9>!?G2p7x1|0^S91^` zgTEby90kbn_lF^;0`ly4!jO4@Jos=Jay}q`dL#_F3XoGC4MV;P$lc$QkQmvq?g7N| z+tl>55(9l8`ht#O&RBw}p*6 z#A%zh0%{DJ4g4S^PTRDf9|Q!T0cSOi2u#y9T7fk}O2WxB&#&$&6#auP`@Wa zy{1Rht0L4lMyRJE)HepyRaE)5-{&rv^Z5qTWi47ZXDLBJISX1AtyuPXj86kvN`LBg zEiy!C5kHm*r#o?r^lYPF2TwxIHl}A)&!Rb3{;(?GSwY5xcvf}a-AUbbPqZKFRkcXB zmw3WN*GT^AT5Q*n&yF*$R_lh1=1$x6XrdIIw2ZZaWrM@0ub`)vb;mq*hW2W#s1)c7 z1K8iouJb)ywhK)_E|LCsKpGF#y z^)WZzCFi|ywv=O^3RZSi2V z5I`vBdi+W`r*IZ!oN^ut3R2Ez0w+p~Pa5#~0%}AiJp|ZdTTBE!*%qIR5&{m}qP`n# zG1+g6(CW@4f^ARQLTi?j$-b1IuR)ozEkyB=1KZ;9(Yh_xBOSs@+t?Pow#C8b`)$e=iEfnhx2m+9TY(U*JLUW zYddmFIj3+IRanY77tJW;oZY_80!~-E-SSe60Kn}iwZ73Y7lyeHY8o!mk(Xq`_K%nMiift;e2=ma|la8xKx~Qp$MNL5}oGIfw z!_hPC2UA+4H5JFSx(iyz&Gu!ODejdxlYGf%#W`s1lQGHtu*R__0E}P1@;{*|eLib}D?rlu69lInIf*hj)!LiKD=5<&Xy3ef}}J-OoqM5!>9@?gt{w zm+d~sOjK92!Rl_bJ7+VxYWFG7v98*^wHxjJH^1H0#|1*1>(xl5eRUqM1~&LHN-+J# zp4eb3a%a^I)u+@Sto;V131Njc-4EUg)1-BF)(^f51lbP?OAM7FPwB(kuu~W1%s+&c zwox};ny7VS1g_}K&5gRT-q#HeJV!VB@Dl9OhhGJRsBfYE)cg8V37jZDjK}z#qSPPU z9?GDr^v~2)sXzaWG6M+x^VV+YPk-ky7DADyP*k(gD0s8a_M6INe!~Edytgh zrqN3EtWBfs#gZxKYkfIy1SDE_%J~6b&J|IH0HK^ad^x88iK;N={8L}f*+)R1_;UV3 zMq0GEBCr9H(D@M&932tW0zt|-ymokSJG}v+nUr%1D2m2J> zH6tgET@PB6ow-qa`%Tea;^_XE5it>PMeTjl*WMktif-&vHe;843TM6H^wTzK_)c)q znJ3}fRp%g|xFchql~#hhq!lC)lSps#2V4=`+&FeP6G}iea`-5AhK(NS127{!(shxx zU=~_RbvGiU#r&d)CR+v~^*>kooRJdV0|HJvG6Wia3?Vv~@7ZKItk+4v2I0`Q zC%W2>e1cY{ajxpEcA+Kl4_a(BbJKb_)Yn5sw^1FV9&SP*QV-cXK&WXO^{{5P*2DMF za?v)W9zKdjFF;<$?vqi9)WbqFx75R?G%E6vdRPPso#`QUjL%<69lH-1&Df76QGYH3 zGiW66!!c}hqy98@Lw~LYPf~wEABs`MX&<#!XaZ?P>Fi0nZ$)<5?$LH&$!v?yoU7a7 zVnCjzV$PaCKdpC59Z;ne_ z#sr@Fa!{D!=Ru_A1=$y5vSs34MMl7d&<&CK%Yf{}Spc~UkPcOjl+06rylddR0!ZbH zs^1ai{DrxEi1sa#ANrQLDC$6gsSkUi&pVMx>hn~c-T&3GjSB>Nl+I$Cslb7_6;8D8 zp{}k54qMZ)J0Pi~Pe-3nS1((t{n!s+6q9t4|4UuH0G)-@)j3j(eyTj7uKp3ZWuNlP zj5yTQHl%dcr!cm;A4Rffb8LiK88+(k=TRx?50{}to|zkU^#Ld|8WQC+WYtx^SPZs+ zGr}wYS31Jy^X9&;st+}3WUU(=FGvKkqWxsR$YTaIIQAp-~ z=QX@LDccLim|>7RYdS=ZrVowJRU9?t_(P}ph_z;H|pV)7ifEb9B%Ph69HG$!|}czUYSv$ z>7Rd!ZXbdJt&edP-KeW{hF$sR9|KML=O`~Mm44%75R&>l1!6K|KjJXnSPo8Qym2}~ zk&Qll7YIq;GA!z#kb^qk)|t+$XC^ydl^)KqM@Q)FHQi9Otk*QH2r2*m*PiKNDq0XA ztb0dibyv@Q@rh_@@8(C$Sg5w0J>wY#rfs_aVw6fxnaTGu3-x*WwOXHV1SE6+^+c)m ztJ(XnN?%t~C?~2O)WbHEBlR$Q|J4_^BXw*S%8722^R8~ld4Vry@hKwz+ifgSUr0G; z_N&ph;JCr8m)6yKq|neatt`}?w$Og8-uGkC*ies&-tzsJ@C=}8ZuDbqaJSNrRU`3F2CK!n-y2s^kdJ!X-Gd-8!3YT`mq}9o%u29#*cm7XhJTt zzhF7^KORC*sTInWL*lUACnKjRBCQ*Z zNZA{@v8Wrmv8x-p!Bq^p(v7AYv`^qlW0`eh_yFw_jxsBb`f{Ug3`S!~-8ex4(~i`Q z)^6y=1iT9+{l--&A+v6bg#Jj~$lf>AbVE08Pty(kDLk^?tS%b6p&Js1x^Wb8nj+G= z(TbG4p&O0e(2aj|LpO>rX6#Bg{^usG8(&4s5!>A8H|8L`qSm19X2lgMbz{D-8+B#@ z>WaFt6?<2H%Qq;6#Q8?D{YjSf>c{7(RqWqARfyP+Erhw|Z^gXy2O zZnUYCf3;6x+$&>aO48hPpOVB>F{%cBgtSd0T(M8#N+MD>>H#r%W(E-(e_89s-N+H0 z*P?EGWsuelemEn#Q8%9Sbz@`{0TAlOPV8Oj#>wzeUHOeQz>&IfU`BozZ*1*`ZoFaY zM)2uF@T)E?>lgF{sZO75mN;yS(a34Cq;;bmDSN|jZ18m>d%RK74c*x4>qfQW3_qcb zx^d*KS~oV~Ds!I_M~Ef;#$2=Fsx0cpE?+lJ2vG=5sT)OTi>`EIhp!t~B6DWHaSQyI z)Q#+Y%Fb@+2H&EUF@N~0i~-NTMH_>vKvqKrXdny%bu3yf^oP0;dp+B(+v{4mkEnjomKWg>N7-ImqJ;p$wy5^oA_Yj4amIdgA!li) zX9FiXK4t9pIQ)ie3qBhk-DsypM^IXn&xi}tupf27eH+vARy{#x&*ad#mH$9TN+V^ZV=_vl1u_@oPEddTx zFtq8rRF%FAse93lJ>xFl`&EMVC?2h8*4MQ)9gp!+bfiRUDoSZ<;X>s+w#Z{sZO4HnEaoRcH`uqs>#vW16k5K0tK?bcVK5=J2#x_N$ukI1`q6qcX5$f!PP3jj1 z)YV9QhVPBDzl9yNpneOxKA@#quvOP0gBC_KDicn+j%C78Z((nP#)*1$@)mZ$a|X>+ zb#LpW?%HSW$9h$j>h{X?bd9pFRxSDLIO9sRZe(}^B2uqCviGMDt{56MCZ+k&9-!)> zh`kpDTBo#Sqt=!^qP{IceRza=M}+!-2=%reQRfOWX5A|z)VD>b4~ zb>0(Ka+Y>F_N0Ki@;0}1;%)SL7lG|)Pn!y8sTSa|C{Zi6ma`_(Z! z5K$XCR@JC$p>f7uj6t`;QQERiYs(%{-x#63GeUiJgnC| z^&LH;-WH+GS$$LT8za>3i%{R$BkDIssDB)x-WH+0Ekga>9#P*Eq0Wk%b>9@B{#Jzg zt{zdpB|@F^q9*nB2=z}Q)IaVK_4Ww$q6qaZ5$ef^pZ~BEU#Ia-YcDODf=T0K(fM@OJLp&=#&-);9ZYMgL(Ee~g)~jl(Zm;YHnuxu>i($B71!HGpicUe4wj{N->=E^$5$d%O>boM; z7e%NS^@#fL2=)31^^YUeS4OCp_K5n32zB1!HRN1nY5mcyGj>CSda6g%Dce|Py(&U|b%c6Rg!+~U^~xSmA0MIK8lheqq23XpKE6lPCq$@kj8IQSsJ|Sc zUfm<=)e-7#5$eMu)ZdCwpV}kp$3>`bicqhNP>)A?*qRWw|3UK^p_ z5usiiq0TQBn0?&p9#KChLVa6=dVPd?OF&)4HWwpTw%A6;bwN+9q0!My8l-vb=UFFeyms3BHdouW41Bdbt`Ab8CS1$!#>aq z>TngQ*B(VyyKr;I=*`DeYJPMqQMD}++wl7+rp|BF+OkK~cSop?k5Jzpp?*SydRvdE ze;lD+9ihG>LcJ!SuC(r($kmm_1v1nY7m~BGxOQEO{a|scyJ2ww&)VWbJgd4t)k)p8 zX70y&RqfR6mED@gOx3NN9cSD>v~F}_aelq_Navr^C2RW{lhXWXNEN?gYgpyj0THcx zz7xr7KOdB%wJt+YzTI)hQE3I=NoNN}SwQfJwtExk{S9XmWGhDZF zcARnBwQh8BN6fF+9%|1zZ!SwSFX>Hjf>bFFwe;lFC zcMJ`F#_o<#@8}Wr_6T)Lw}q~0)ussbPa@Q}^@#eN5$eeZ_4Ww$cwq0!PPg}n`j!aw zq6qaZ5$Z(&b!BnAJFz(JZ36w#-X^4DsunwSE%rknSJMq|6Y#9PO^9bz_o`0nuD#8E ztXI`m-Co%}$(T~z%Gq(o-J^A*6K~_!Yme-GzAjnY*O=`Qdtan$p>f7O60x{lDLDSdm>JjxN5$Zc5)K^ESzZOteS~s~9th{WRO=GwYp3tA{IO7_%ZrBGyQsx$^ z*BGksCC03NGW+d zPRgn9(57@OTKBMgRNWWh!P>5(%Kcccs(RgC*)?j+Hr>kEamH0^-LMY~Nk*P(t@G=( zM_M;rm#j5v%vQ~hhEz?}wa}2UUk|iSX-lcrmOY|AG(vq#gnD&^dRv5gsz=mQ5$f#` z>fQj3}JwHNyb%c6RgnC7UdQFe0CnMAw zBh-@->O~RiwLPNlMyM}}P`4t~xnz{t?)5#Q&d1;l`x;Xpq5d%fEdyulAMnDENqtd| zsQ&}6&ln|-sf|$I6`}q{gnDC-sDB)xUK64IZiG7DAU5m1x<}M^N2pJYP~RD$-VveR z+9T?_BGjuR)OSRveLzGnCzVCMTWnRDcxc9xD?h&!WUuKnr zj)Iwhnl@1xm0d;zoe&AFBs!}oL$c_I3p7T_1Oo0x!4Wj;cj{Ett#j+WUg!{Bb~b&# zd+MB1r%s(Zb#A@;0_oQS>2D3BU*41Se+#4^45V)d((^$2)}EyA1k(Eg>DL13i-Ghj zdy@WmApJlfoxVvUV#0~ZK>F1^NxvCL-ycZ75=cK1NWZox>5m1{_XX0o0_iUdq;Ky@ z`i($(6iB}uNPl)9{raAye>#wU+kV@^=Fi7A1L^;Zor{dLH})j`dLaFYK>DRX`d0$! zH}@o+em!0I^YL4O^o>CJV}bOYJxSjVr0)dM*8=I=f%IE@lKvNg^qYb7Rv`UKApMCw zNxv3IzY$1Z4y6BPApQ29q<=J!em#&rA4q>|AU)bKm9Fn;7kM?1z8y$E7f5df()aC2 z`iBDP*8=I&f%N%6`u;shzY<8l8c07ANS_I$AJ~(0dONP1?^gopgMswHKziSvq;Cb% zw*u)W1L^&xbW=5=UkB(_HL?}6l8>#Jd9uuIbinokGOM5O_cs%%PNprt%XynpXIrQB zbT)ne;4Xc)m8BnGzm84Y-Cyr&*zs$2HSbMx@2l-zuiNj#R>$jmiZ<^Kylyk_x`Tn& zy`c0uBmLygUSi#)K>DRXdS4*@&OrL$o}|AckiHQ}KM+X&793Uksypd)W>3;L0_kgk z^!LQEYFVQ;8t-HSUB`@-XnBjwhA*A59DHHl_N*uk^ zZ?(B2D%yF{T8|?BZgL-$8u1y1^ew}gkp&?0`nz40W(5d;&(0$60%CVb-0FQm>}h94 zeiw*ci5U3=kQ-+GV&n!8`p^|4UjlMzhi$;fH-OmPC?nqia$B^z3vbhmUd8rdnwJ7O z`KZrl5QsfD$TUqL(?jpI>tAJdCN8vwXvC}{fidJ(#$cd;0w~7hD2itsuw17;% z((l)MfXwSN1AT_(5g^x1i#y1p>h$}k13<`2ne)d%Gbk)}9f+-6+!4j?W*x+M5htl+ zIe!i`mqp)i134i0{M3P}XVSY5`$SJifShxPO7!c9q64lMODUqvDn`&Dq{{2jY997^ z>M7fc42a!(a=+Gr(Bvs;ejSK?=L6Gh139qc``Blw6+Y;ivCqG2q|f8?6cCCTCFh^U zd;6qS4*{{eNMm`#%0aX$Ek6dDmg_riMQ4FrbyijQkpqPoOD)QAzeug_vE#1rf}}>g zlD5Qr-vrHo;QZS_&Nk%N-wNjsLAUA=KZP-4aB|d`Y%Rua#pqS<rDh-K3_+z6#Wd|#9TB88q$UJxsFzY!m5t}IVtAymx0iS zIn!VN0mPnLW_hr| z5Xh!z^=Tl>xKrx<72+dko&>TckY~RTQA@PVV?Ku1+*! zblwSMUg+~X)Jj7K-R=qd>zO%Xi5)%3W&}5S;Oc4Ocb4Y)Ys=_Ky0m> zX$FA|I;+m4aqV0@nAlm z0z#j%r(XcFCZvBAi0tXNfn0U-ODX)0y;7P_8MU7Mvl{T?*o%Se6B@o6h<(<^`n(p% z4m`8ervb!P9hv6s)C$bYUTgvB6QlDm5c|z>ZgmX^pDwoE^4CB%oDE6a&jGO&DsFWP z$h5HGZ6FA?o`!e72$#^g?EB9Hxf>vBh|DTamh))yi~brn0~&h{|BfgzQG!n(TMge1 znnBU8O(1Y*0=;3``nYIe}Gy!ADgYGX$xG> zI6k&o_Y#3YzD>1isY?cY=F-l z<{y5Y49E?k^T&Z~iMjlFAm_|`x~L_7I}XV7jz7wGycDxQ`22H#EDL>J0_3A;&EuY@ zJeh9@YfOWNMzHjaUjY&cJ8uz!PZ>%66v%*(^;sZ;JHCcr0&+#r{11?MM5I#IEAIv( zdhr?{_6<(l_c0*$^gbgG0J$MF>;Qpq&(6OJWFCS_SswsG1Z6KC0kU8C;WZ%VgwB6Q zG!B6$)H;~(8^RO5Ml_=D{|)4pu=6ut2Kxx)ZXo+b-;V$p5HzDet_lqmkZS@dfNVQH z$UOBcM=uEt-wK*7bicI59|M^OLKbDKejLaT#M{wI)f*RSJYT#a?lcm)tK zUOxfkvgqkOK+cJAKM7<_XgC7oisJ)W3GHg>Q;yCXK+|`puVD)ayv!TZhk(#pP`3I2 zkRJk4j{6@{t7rLq{sxGx++wG&Nb4EK9b^z^?DH?6*$_H^9mq|AJmVlNFM9gpK&}f} zhkz^#C}h12i1fqv0@(*X^pE-cK9C(@!)rh;3FL2q z*i+@)>M0xEnnW$R($t_U8n73-0X0Kjw1}X!hgkM;vkjh&@ZpG)q8k z;2(_{BX7agrjYesLYyoRMjr&SC3^AaKx(*Cjv#RzFkG4Q@W#p@+hQ9}zX<_F_fDG)|b!YKH zp0!itKSKH^L32g);xXbQ^!ZmH+xS=N^CYfr3X44pwL1EgGv!4AG63X~;Cv2<{Y@pd zSPEnie9C_P5|Hac=Sx7!43;ZI@H)}=_k-rP=-0zQNJgpQqd@3WB3}k_LwL)70XZqW z<$14$#YErl0n!2=;?BLe7s!U7nFg{cXx<29;88m|xD^#Z=7pW#24vrkPxBrieXgg7 z#`UxTeT04f05qF|&&PnAbgf9%UlJc7{U3qM3$ObQklVr;dXNx@yq)*uS6F?3M4gZ;Fc6@8x0PP#bkLddgfZPzW zjslqmQpT2HLWHao2)_rf&-CJ#fkZ<3LqMJooG$~}7GC#9K=wO}E#@g^AZQ#ySARx) zM61sL*}xs11v|LvucZr}B^Bp!V<|1{W!6}1+P~w4g*;ugSM{us+P@cb6a?)BT*m%M zG|InjCiSd9#morH8%unx6#wK`)>w_}S#26xte_5?pNSi_dYa=WL{gQgtdX@Ne*gI0 z{dv0BYUllB%dA~*7qz_ER*TI%fjT+8v!f^BdgHsID>}_yblFP0l&XceNRbHjkQTRE zs=eMyqm{S;>Kd*CQeM!j49vzgpq?0;y#GNpHaR;tG(N6IMo*o+Urh|nof(~(320a1 z_HvpV^FfoY1~joA4}0Rg&Es9MT&;N_tJjh^uc4yfUWu~?s+F@uj&!`Lw`#=gY?X#x z-&ZJfo_|^*5M$+7jti9}?I!%EqJgSmxTrWyJy28_S%|x^U21exx|XD^cGhgzUxW^s zv9C4jHPE))FGq)T*-A^fpQQ+I>!)RbraCtaQQEC{L*wYdtT9nBX`QWi0bV0*4ZGic zZg^-Y>eqjb(O*1o#T49S)>dXm%VAYI1I7YJ7ZjhN(!02PekV?A(YN8JZgk(aEW~ zvD0J2Lvv$OlkzT0Q`1ll)A96_ygNBHGTH^6n;9C$1TJX-OwOJjol(IZVho!MO`_ky zO|A6VndzCa*-T_=W)=ADHiZXUs)d@cT3E*%MZ8vOvC~MD z>c986xL>(>Ox&!cMUrQFf_V&%3Ys?7kb*>c6h{O_r&v%6okGR6TAmh#M|U`&Tg_^! zl~L%i>J9`nh_0Q*IB9osEEbON#C-u_D{t01iKp0!lL1YU<{2tiC7XK%$wIx8wwulN za;W`@6M}MCuU;M_ZRe!fTGs>N-Ox6swYz%bXhaL7!m>d}A25pgl5Fc4?SwY2Yp!WL z=7%HLn4+<|5Mu!?`!!Jhef&P}?~~r&_j-Syh+^WPbe>O@)mA;FNb8a49xhPK$B7Ll z^zQ0zHkyr|1V@FcDqF-(B(0_1;2+n0bqr8f^KWYJ5jVkL&Fk}V?K{2-lEX3WGFb!9 z^|ZCni&Fn%+E<#LcK5s5O|Y7(bTw_X6;*a4h>IzPZ$O~U=@ikIqagXVJYuAhw6IQ*``+bEVVt#`Jv=p=RuaGXzR?fhLm!xxwz=5 zs*U3D?Ly)l$uJK|szzF@H!py=o#PaYvx>7-*SpSS{LsaVAZ#uj{IPk9&zBsvsi=rs z!L_aGF%}){9GW>I1gecr4{a;&?h00K>}yH_Z7v-@xOqU}9EtN*UL(E1(gv%gi*cvk zR+7dfF)Q(#pjQhU0NQ`8rg=eYkiD5TcDtG6&0Z}l3~Ap=(ckb*I(be}y`C*pMPgH& zkqX`Jk%nEGc#xIT&Q`E#Ld01qBK`Lg#tWG=UtniMAa=*@+R$M+;@yJ2L09!`1|_)o!Xzd-0@ROLF8mYPqw($s&0q>V>}6Yoi4!n_0OB%2- z$9b?_u4C_GTI4CO@-(lowad?Ayc4}urHm?Gs8g9>ZI&@8+e)*eCr_xn)6fo)r^u^t zI4+Maz#T}p{((TSnmIc;H#RY1Fg`WR{TZDc=~k%d-9Vw2yjRZS3{?(W zPAJ-Ekt0u_xG;+1f~A4)b^u!<)qOK=sN2gq^-G;k*Li6Au}o5by!%NJ+1v2xg0d-f z;lwdki5O7cWGQ4ru5?uC;q6USCaO);-1w|3DYS~TQ)?d5wmw8s`;$mLKt(C|^B7fp zPNCovsnc1bHa%*_s&aX1eUkTAY`pu^wxK)S%!k~Lr+Ra^iE*xQ8eK~v9t@^OJ=tT$ zWV2yiW~?#Hp-B^1GvM)DXGNiaK^s0qn>@~W*H=X3L^zsrfgFfVI+|;HsrQK{$3-Cx z!wH_4l@uuAe2M1J1^+T`t2cMDLCUokl$_hFb6sdTnSYmn%ccB(9n4bs^ zCZn#v@DDPYxu|OKdOcfOZrjPJ-ora!?Fn8{hrp3~&&RkF zjUikg|38lqoYs#XQ8ApH-Hhv0s8wM&vs~}TNKsxEFy*1!h!@r1PQ#Ert7~p7h2o30 zp)IQhVRaU>yET%HU?-V3*GI7ACFvN7!{d5lE@K;3su;I28di9i!kK-A!Cj@rpng~# zRs(o)3SMU$yztjXZMhC7+-S8ka;C7~g^-za>2>Kkg51*;dyTQ^8NhwtuEIpOwXh zu3qvkoQlP^Kb2xB2(UWqG{BU?X#>Kwa97V{y?9m(Pf&DF(=jC{5&j%U=7y-OS19cl zX5L^8!+_LM>mw^fUv|R|D24!alypR|zT|^6eua*Pg-J80n=r}*^0N#DfT@KyVZkbh zmoJ-+|0T=NJpoJjNR|}vL?fm-?DE@!6l*RLZ^RIq6DTl{%Q}azc#~cVtt*)+FkDaL zT$|qXoMUSx>L@7-MUgbea-df^ol+K^g<>7m%N3j9@!TOF#yNI7cx?WW6t$0Z80&Th zhqCK{aiNL0piEoazrgVH9?Q}b{Ji6V45jtB{`yXu)7I0?Z}QVs0D4;C0GL!sgjGwz z$23YY-7HhyWl3%+po+VeVU##s?-a{)6!lbRaS?ep;BuI1s~D*uE*XndCe;!jvUh@Q z(%^un38vhOpn^YFFE9nLT6gU9Mzo^SBue48)vD%F!>VYdNw%0J-rU+nGAB@WJlxc_ zZiOJ&@;#W1Sqb)LrDG=0PM-qhD=~YWCB(xQ&C;9ESdsH43QipN^_;fp7*WXwVl0LB zW@b1k??$-@MNBDi*AS}PFB@w~#tJ|0B(gsh@? z`QXjWhG{(7L!^n+u8WOl3a6LtE{9AzeOeWNfTpzSK*`ayp~wVQ4p?{?Vb|mFG+qs+ zJzI9hoYRK5E}m8Gci_AwLGMIDdZ3>=RjuM?qg~ccne9IZh8BE=&Tp~i!}Vs7^0QVT z7#D1zn}vvi^d!vl4;kpnARxWNYz-^XdbEKhp&B{WZqGGYOK_v}e|(|8c%c_cs<`SS zQKbP98e`ivy^GdMvgdntd$y}93Eu|0!fe*C8CYu2T+{Y5D>&9W%8>B@EG~2g*2^Z< zY{*R-nsyYf@P#{_EMPN5rEM8M3K2idc|$XZoC*XUi?A|{k)+7R-rPwWiCyZ9Z&`;WyY!AC z_UW~0H0vd`)17=NrK|vI>wMUEd2?6^Q`O6i*^tt!suN3kI68@EGB&X_?d5h!+M!I} zBXnvMyEMIAQFx&x%BpC*YBfpfNHI#U;@O)Rx?nvnrvL|6vj~*2)XRiR+Da0N4WZ3m zx=&Sp5Ra$lP&%gUC~Ge0hjX~D@Iv-L39ZRkl1j*}X3Sj%qi6_^uO^UXC;W0uc|yQj zxk?W-Qx5jmfsb|=JaXpDI$yw}yo6ScVkIZ7#JQ(gqOj^>K4M#L-KOk>7&Yn<<_M0m zRMK#y%tqnrRMIsB?4sma#{GE^+5a#y^0}r?-A}FSf$0^dY|+UoDZ-TYB0L}CY}5oU zIw!`G%-7pow|Z5As9~j=zzk@jb0RmD+S|_oSe@tWYn)jgg+hrSDU}q=wYY46!W681t5O zH#g5|_s&m?sB!6{bmdLj-n$MNk*yQATEdMnXQd!B7tLt*3TWLn1}>^6z~oPpG? z?mf7UV^`^3vZ@i@$Z>{Z_vh_MuMo~=?p6sPYhbEUTGMO22sVwbLSnP3UaHG*;|$bm zb*1!B7Y@x-2!jfpA9Y(kab(h4n=9+7$f~RkuG?MaG7XjMqF?^P%B;UV=2YM+p!MNu z_QJuGwKNYF^&G4>V;o{ri}iSk%2?dI+#*iG>nTS?oeO1lY*brV-?7)Fyl44*(LPU) z*Mi*0{c;<;%t%6vr99Rqw-|M7(8{>rYs&YkJunO=pr_{2vDMA0_f>Q8t^rSO zLb@!4Y#*~knIPgXG{PtJfyrTio95LeOo2mZ8g2~vyN~{~H!`T3Wj)r>@3ytj$y_D~a#xH|0 zeOHh%@ CZ&!x^ literal 0 HcmV?d00001 From b7abac85e2943257eef207a7d7c6d4e136c5e533 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 14 Feb 2023 08:27:22 +0100 Subject: [PATCH 09/41] feat: create check_port binary for windows Signed-off-by: Frederic Pillon --- src/check_port/Makefile | 22 ++++++++++++ src/check_port/check_port.c | 69 ++++++++++++++++++++++++++++++++++++ win/check_port.exe | Bin 0 -> 226511 bytes 3 files changed, 91 insertions(+) create mode 100644 src/check_port/Makefile create mode 100644 src/check_port/check_port.c create mode 100644 win/check_port.exe diff --git a/src/check_port/Makefile b/src/check_port/Makefile new file mode 100644 index 000000000..16a48cdfc --- /dev/null +++ b/src/check_port/Makefile @@ -0,0 +1,22 @@ +CC = gcc +SRC = $(wildcard *.c) +LIBSRC = $(wildcard ../libserialport/*.c) +OBJ = $(SRC:.c=.o) $(LIBSRC:.c=.o) +CFLAGS = -DLIBSERIALPORT_MSBUILD -Wall -I../libserialport +LDFLAGS = -lsetupapi +DEST = ../../win +BIN = $(SRC:.c=) + +.PHONY: all clean + +all: $(BIN) install + +$(BIN): $(OBJ) + $(CC) -o $@ $^ $(LDFLAGS) + +install: $(BIN) + @echo "$@ $^..." + @mv $(BIN) $(DEST)/ + +clean: + rm -f $(OBJ) $(DEST)/$(BIN) diff --git a/src/check_port/check_port.c b/src/check_port/check_port.c new file mode 100644 index 000000000..4dd9bb7fb --- /dev/null +++ b/src/check_port/check_port.c @@ -0,0 +1,69 @@ +#include +#include +#include +#include +/* Example of how to get a list of serial ports on the system. + * + * This example file is released to the public domain. */ + +int main(int argc, char **argv) +{ + /* A pointer to a null-terminated array of pointers to + * struct sp_port, which will contain the ports found.*/ + struct sp_port **port_list; + char *search_name = NULL; + bool found = false; + bool search = false; + if (argc>2) + { + printf("Usage %s \n", argv[0]); + return -1; + } + if (argc == 2) { + search_name = argv[1]; + search = true; + } + if (!search) { + printf("Getting port list.\n"); + } + /* Call sp_list_ports() to get the ports. The port_list + * pointer will be updated to refer to the array created. */ + enum sp_return result = sp_list_ports(&port_list); + + if (result != SP_OK) { + printf("sp_list_ports() failed!\n"); + return -1; + } + + /* Iterate through the ports. When port_list[i] is NULL + * this indicates the end of the list. */ + int i; + for (i = 0; port_list[i] != NULL; i++) { + struct sp_port *port = port_list[i]; + + /* Get the name of the port. */ + char *port_name = sp_get_port_name(port); + if (!search) { + printf("Found port: %s\n", port_name); + } else { + if (strcmp( search_name, port_name ) == 0) { + found = true; + break; + } + } + } + if (!search){ + printf("Found %d ports.\n", i); + printf("Freeing port list.\n"); + } + + /* Free the array created by sp_list_ports(). */ + sp_free_port_list(port_list); + + /* Note that this will also free all the sp_port structures + * it points to. If you want to keep one of them (e.g. to + * use that port in the rest of your program), take a copy + * of it first using sp_copy_port(). */ + + return (search) ? !found : 0; +} diff --git a/win/check_port.exe b/win/check_port.exe new file mode 100644 index 0000000000000000000000000000000000000000..be48c8537ffc7aafcbb111f86b67fbf36c7d51fa GIT binary patch literal 226511 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 z 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 literal 0 HcmV?d00001 From 86543971a40627232e153866c2d09d6005ba4ce4 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 14 Feb 2023 08:27:15 +0100 Subject: [PATCH 10/41] feat: unified maple_upload and dfu_util scripts shellcheck and shfmt applied Signed-off-by: Frederic Pillon --- dfu-util.sh | 40 ++++++++++++++++ linux/dfu-util.sh | 23 ---------- linux/maple_upload.sh | 64 -------------------------- macosx/dfu-util.sh | 18 -------- macosx/maple_upload.sh | 64 -------------------------- maple_upload.sh | 102 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 142 insertions(+), 169 deletions(-) create mode 100755 dfu-util.sh delete mode 100755 linux/dfu-util.sh delete mode 100755 linux/maple_upload.sh delete mode 100644 macosx/dfu-util.sh delete mode 100755 macosx/maple_upload.sh create mode 100755 maple_upload.sh diff --git a/dfu-util.sh b/dfu-util.sh new file mode 100755 index 000000000..7b520fbd8 --- /dev/null +++ b/dfu-util.sh @@ -0,0 +1,40 @@ +#!/bin/sh - +# +# Use the correct dfu-util program based on the architecture +# + +# Get the directory where the script is running. +DIR=$(cd "$(dirname "$0")" && pwd) +UNAME_OS="$(uname -s)" +case "${UNAME_OS}" in + Linux*) + # Choose dfu program by arch + if [ "$(uname -m)" = "x86_64" ]; then + DFU_UTIL=${DIR}/linux/dfu-util_x86_64/dfu-util + else + DFU_UTIL=${DIR}/linux/dfu-util/dfu-util + fi + ;; + Darwin*) + DFU_UTIL=${DIR}/macosx/dfu-util/dfu-util + if [ ! -x "${DFU_UTIL}" ]; then + DFU_UTIL=/opt/local/bin/dfu-util + fi + ;; + Windows*) + DFU_UTIL=${DIR}/win/dfu-util.exe + ;; + *) + echo "Unknown host OS: ${UNAME_OS}." + exit 1 + ;; +esac + +# Not found! +if [ ! -x "${DFU_UTIL}" ]; then + echo "$0: error: cannot find ${DFU_UTIL}" >&2 + exit 2 +fi + +# Pass all parameters through +"${DFU_UTIL}" "$@" diff --git a/linux/dfu-util.sh b/linux/dfu-util.sh deleted file mode 100755 index 2f355b4ce..000000000 --- a/linux/dfu-util.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -# -# Use the correct dfu-util program based on the architecture -# - -# Get the directory where the script is running. -DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) - -# Choose dfu program by arch -if [ "$(uname -m)" == "x86_64" ]; then - DFU_UTIL=${DIR}/dfu-util_x86_64/dfu-util -else - DFU_UTIL=${DIR}/dfu-util/dfu-util -fi - -# Not found! -if [ ! -x "${DFU_UTIL}" ]; then - echo "$0: error: cannot find ${DFU_UTIL}" >&2 - exit 2 -fi - -# Pass all parameters through -"${DFU_UTIL}" "$@" diff --git a/linux/maple_upload.sh b/linux/maple_upload.sh deleted file mode 100755 index 37d21ce20..000000000 --- a/linux/maple_upload.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash - -set -e - -if [ $# -lt 4 ]; then - echo "Usage: $0 $# " >&2 - exit 1 -fi -altID="$2" -usbID="$3" -binfile="$4" -dummy_port_fullpath="/dev/$1" -if [ $# -eq 5 ]; then - dfuse_addr="--dfuse-address $5" -else - dfuse_addr="" -fi - -# Get the directory where the script is running. -DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) - -# ----------------- IMPORTANT ----------------- -# The 2nd parameter to upload-reset is the delay after resetting before it exits -# This value is in milliseonds -# You may need to tune this to your system -# 750ms to 1500ms seems to work on my Mac -# This is less critical now that we automatically retry dfu-util - -if ! "${DIR}/upload-reset" "${dummy_port_fullpath}" 750; then - echo "****************************************" >&2 - echo "* Could not automatically reset device *" >&2 - echo "* Please manually reset device! *" >&2 - echo "****************************************" >&2 - sleep 2 # Wait for user to see message. -fi - -COUNTER=5 -while - "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" "${dfuse_addr}" -R - ((ret = $?)) -do - if [ $ret -eq 74 ] && [ $((--COUNTER)) -gt 0 ]; then - # I/O error, probably because no DFU device was found - echo "Trying ${COUNTER} more time(s)" >&2 - sleep 1 - else - exit $ret - fi -done - -echo -n "Waiting for ${dummy_port_fullpath} serial..." >&2 - -COUNTER=40 -while [ ! -r "${dummy_port_fullpath}" ] && ((COUNTER--)); do - echo -n "." >&2 - sleep 0.1 -done - -if [ $COUNTER -eq -1 ]; then - echo " Timed out." >&2 - exit 1 -else - echo " Done." >&2 -fi diff --git a/macosx/dfu-util.sh b/macosx/dfu-util.sh deleted file mode 100644 index 77bd42617..000000000 --- a/macosx/dfu-util.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -# Get the directory where the script is running. -DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) - -DFU_UTIL=${DIR}/dfu-util/dfu-util -if [ ! -x "${DFU_UTIL}" ]; then - DFU_UTIL=/opt/local/bin/dfu-util -fi - -# Not found! -if [ ! -x "${DFU_UTIL}" ]; then - echo "$0: error: cannot find ${DFU_UTIL}" >&2 - exit 2 -fi - -# Pass all parameters through -"${DFU_UTIL}" "$@" diff --git a/macosx/maple_upload.sh b/macosx/maple_upload.sh deleted file mode 100755 index 37d21ce20..000000000 --- a/macosx/maple_upload.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash - -set -e - -if [ $# -lt 4 ]; then - echo "Usage: $0 $# " >&2 - exit 1 -fi -altID="$2" -usbID="$3" -binfile="$4" -dummy_port_fullpath="/dev/$1" -if [ $# -eq 5 ]; then - dfuse_addr="--dfuse-address $5" -else - dfuse_addr="" -fi - -# Get the directory where the script is running. -DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) - -# ----------------- IMPORTANT ----------------- -# The 2nd parameter to upload-reset is the delay after resetting before it exits -# This value is in milliseonds -# You may need to tune this to your system -# 750ms to 1500ms seems to work on my Mac -# This is less critical now that we automatically retry dfu-util - -if ! "${DIR}/upload-reset" "${dummy_port_fullpath}" 750; then - echo "****************************************" >&2 - echo "* Could not automatically reset device *" >&2 - echo "* Please manually reset device! *" >&2 - echo "****************************************" >&2 - sleep 2 # Wait for user to see message. -fi - -COUNTER=5 -while - "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" "${dfuse_addr}" -R - ((ret = $?)) -do - if [ $ret -eq 74 ] && [ $((--COUNTER)) -gt 0 ]; then - # I/O error, probably because no DFU device was found - echo "Trying ${COUNTER} more time(s)" >&2 - sleep 1 - else - exit $ret - fi -done - -echo -n "Waiting for ${dummy_port_fullpath} serial..." >&2 - -COUNTER=40 -while [ ! -r "${dummy_port_fullpath}" ] && ((COUNTER--)); do - echo -n "." >&2 - sleep 0.1 -done - -if [ $COUNTER -eq -1 ]; then - echo " Timed out." >&2 - exit 1 -else - echo " Done." >&2 -fi diff --git a/maple_upload.sh b/maple_upload.sh new file mode 100755 index 000000000..2b10603a9 --- /dev/null +++ b/maple_upload.sh @@ -0,0 +1,102 @@ +#!/bin/sh - + +set -e + +if [ $# -lt 4 ]; then + echo "Usage: $0 " >&2 + exit 1 +fi +altID="$2" +usbID="$3" +binfile="$4" +EXT="" + +UNAME_OS="$(uname -s)" +case "${UNAME_OS}" in + Linux*) + dummy_port_fullpath="/dev/$1" + OS_DIR="linux" + ;; + Darwin*) + dummy_port_fullpath="/dev/$1" + OS_DIR="macosx" + ;; + Windows*) + dummy_port_fullpath="$1" + OS_DIR="win" + EXT=".exe" + ;; + *) + echo "Unknown host OS: ${UNAME_OS}." + exit 1 + ;; +esac + +# Get the directory where the script is running. +DIR=$(cd "$(dirname "$0")" && pwd) + +# ----------------- IMPORTANT ----------------- +# The 2nd parameter to upload_reset is the delay after resetting +# before it exits. This value is in milliseonds. +# You may need to tune this to your system +# 750ms to 1500ms seems to work on my Mac +# This is less critical now that we automatically retry dfu-util + +if ! "${DIR}/${OS_DIR}/upload_reset${EXT}" "${dummy_port_fullpath}" 750; then + echo "****************************************" >&2 + echo "* Could not automatically reset device *" >&2 + echo "* Please manually reset device! *" >&2 + echo "****************************************" >&2 + sleep 2 # Wait for user to see message. +fi + +COUNTER=5 +while + if [ $# -eq 5 ]; then + "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" "--dfuse-address $5" -R + else + "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" -R + fi + ret=$? +do + if [ $ret -eq 0 ]; then + break + else + COUNTER=$((COUNTER - 1)) + if [ $ret -eq 74 ] && [ $COUNTER -gt 0 ]; then + # I/O error, probably because no DFU device was found + echo "Trying ${COUNTER} more time(s)" >&2 + sleep 1 + else + exit $ret + fi + fi +done + +printf "Waiting for %s serial..." "${dummy_port_fullpath}" >&2 +COUNTER=40 +if [ ${OS_DIR} = "win" ]; then + while [ $COUNTER -gt 0 ]; do + if ! "${DIR}/${OS_DIR}/check_port${EXT}" "${dummy_port_fullpath}"; then + COUNTER=$((COUNTER - 1)) + printf "." >&2 + sleep 0.1 + else + break + fi + done + +else + while [ ! -r "${dummy_port_fullpath}" ] && [ $COUNTER -gt 0 ]; do + COUNTER=$((COUNTER - 1)) + printf "." >&2 + sleep 0.1 + done +fi + +if [ $COUNTER -eq -0 ]; then + echo " Timed out." >&2 + exit 1 +else + echo " Done." >&2 +fi From 90248bcd1a3b4b7f018bfe4f9ec4737486429bc2 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 14 Feb 2023 10:21:54 +0100 Subject: [PATCH 11/41] chore: clean up old windows maple_upload based on java Signed-off-by: Frederic Pillon --- win/lib/jssc.jar | Bin 153562 -> 0 bytes win/maple_loader.jar | Bin 52672 -> 0 bytes win/maple_upload.bat | 18 ------------------ 3 files changed, 18 deletions(-) delete mode 100644 win/lib/jssc.jar delete mode 100644 win/maple_loader.jar delete mode 100644 win/maple_upload.bat diff --git a/win/lib/jssc.jar b/win/lib/jssc.jar deleted file mode 100644 index d2b5c070aa930c06e653db0bcae7eab9c5ca4f7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153562 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 diff --git a/win/maple_upload.bat b/win/maple_upload.bat deleted file mode 100644 index 7d59bf53b..000000000 --- a/win/maple_upload.bat +++ /dev/null @@ -1,18 +0,0 @@ -@echo off -rem: Note %~dp0 get path of this batch file -rem: Need to change drive if My Documents is on a drive other than C: -set driverLetter=%~dp0 -set driverLetter=%driverLetter:~0,2% -%driverLetter% -cd %~dp0 -java -jar maple_loader.jar %1 %2 %3 %4 %5 %6 %7 %8 %9 - -for /l %%x in (1, 1, 40) do ( - ping -w 50 -n 1 192.0.2.1 > nul - mode %1 > nul - if ERRORLEVEL 0 goto comPortFound -) - -echo timeout waiting for %1 serial - -:comPortFound From 6c359dfa74832f45500008577ad0d81cd8b1afe5 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 14 Feb 2023 10:25:16 +0100 Subject: [PATCH 12/41] chore: clean up dfu-utils sources Signed-off-by: Frederic Pillon --- linux/src/dfu-util/AUTHORS | 30 - linux/src/dfu-util/COPYING | 340 --------- linux/src/dfu-util/ChangeLog | 93 --- linux/src/dfu-util/DEVICES.txt | 20 - linux/src/dfu-util/Makefile.am | 3 - linux/src/dfu-util/README | 20 - linux/src/dfu-util/TODO | 14 - linux/src/dfu-util/autogen.sh | 2 - linux/src/dfu-util/configure.ac | 41 - linux/src/dfu-util/device-logs/README | 77 -- linux/src/dfu-util/device-logs/dsonano.lsusb | 60 -- linux/src/dfu-util/device-logs/lpclink.log | 59 -- linux/src/dfu-util/device-logs/lpclink.lsusb | 58 -- linux/src/dfu-util/device-logs/lpclink2.log | 59 -- linux/src/dfu-util/device-logs/lpclink2.lsusb | 203 ----- linux/src/dfu-util/device-logs/opc-20.lsusb | 60 -- .../openmoko-freerunner-dfumode.lsusb | 109 --- .../device-logs/openmoko-freerunner.lsusb | 179 ----- .../device-logs/openmoko-neo1973.lsusb | 182 ----- linux/src/dfu-util/device-logs/openpcd.lsusb | 60 -- .../device-logs/qi-hardware-atusb.lsusb | 59 -- linux/src/dfu-util/device-logs/simtrace.lsusb | 70 -- .../src/dfu-util/device-logs/sparkcore.lsusb | 60 -- .../device-logs/stm32f107.bin-download | 48 -- .../src/dfu-util/device-logs/stm32f107.lsusb | 60 -- .../device-logs/stm32f4discovery.bin-download | 36 - .../device-logs/stm32f4discovery.lsusb | 80 -- .../dfu-util/device-logs/tdk-bluetooth.lsusb | 269 ------- linux/src/dfu-util/dfuse-pack.py | 121 --- linux/src/dfu-util/doc/40-dfuse.rules | 4 - linux/src/dfu-util/doc/Makefile.am | 2 - linux/src/dfu-util/doc/SPEC-differences.txt | 21 - linux/src/dfu-util/doc/dfu-util.1 | 248 ------- linux/src/dfu-util/msvc/README_msvc.txt | 10 - .../src/dfu-util/msvc/dfu-suffix_2010.vcxproj | 100 --- linux/src/dfu-util/msvc/dfu-util_2010.sln | 54 -- linux/src/dfu-util/msvc/dfu-util_2010.vcxproj | 120 --- linux/src/dfu-util/src/Makefile.am | 28 - linux/src/dfu-util/src/dfu.c | 357 --------- linux/src/dfu-util/src/dfu.h | 133 ---- linux/src/dfu-util/src/dfu_file.c | 444 ----------- linux/src/dfu-util/src/dfu_file.h | 60 -- linux/src/dfu-util/src/dfu_load.c | 196 ----- linux/src/dfu-util/src/dfu_load.h | 7 - linux/src/dfu-util/src/dfu_util.c | 346 --------- linux/src/dfu-util/src/dfu_util.h | 36 - linux/src/dfu-util/src/dfuse.c | 652 ---------------- linux/src/dfu-util/src/dfuse.h | 35 - linux/src/dfu-util/src/dfuse_mem.c | 198 ----- linux/src/dfu-util/src/dfuse_mem.h | 44 -- linux/src/dfu-util/src/main.c | 699 ------------------ linux/src/dfu-util/src/portable.h | 72 -- linux/src/dfu-util/src/prefix.c | 176 ----- linux/src/dfu-util/src/quirks.c | 56 -- linux/src/dfu-util/src/quirks.h | 27 - linux/src/dfu-util/src/suffix.c | 176 ----- linux/src/dfu-util/src/usb_dfu.h | 99 --- linux/src/dfu-util/www/build.html | 147 ---- linux/src/dfu-util/www/dfu-util.1.html | 411 ---------- linux/src/dfu-util/www/dfuse.html | 135 ---- linux/src/dfu-util/www/index.html | 119 --- linux/src/dfu-util/www/simple.css | 56 -- macosx/src/build_dfu-util.sh | 15 - macosx/src/dfu-util/AUTHORS | 30 - macosx/src/dfu-util/COPYING | 340 --------- macosx/src/dfu-util/ChangeLog | 93 --- macosx/src/dfu-util/DEVICES.txt | 20 - macosx/src/dfu-util/Makefile.am | 3 - macosx/src/dfu-util/README | 20 - macosx/src/dfu-util/TODO | 14 - macosx/src/dfu-util/autogen.sh | 2 - macosx/src/dfu-util/configure.ac | 41 - macosx/src/dfu-util/device-logs/README | 77 -- macosx/src/dfu-util/device-logs/dsonano.lsusb | 60 -- macosx/src/dfu-util/device-logs/lpclink.log | 59 -- macosx/src/dfu-util/device-logs/lpclink.lsusb | 58 -- macosx/src/dfu-util/device-logs/lpclink2.log | 59 -- .../src/dfu-util/device-logs/lpclink2.lsusb | 203 ----- macosx/src/dfu-util/device-logs/opc-20.lsusb | 60 -- .../openmoko-freerunner-dfumode.lsusb | 109 --- .../device-logs/openmoko-freerunner.lsusb | 179 ----- .../device-logs/openmoko-neo1973.lsusb | 182 ----- macosx/src/dfu-util/device-logs/openpcd.lsusb | 60 -- .../device-logs/qi-hardware-atusb.lsusb | 59 -- .../src/dfu-util/device-logs/simtrace.lsusb | 70 -- .../src/dfu-util/device-logs/sparkcore.lsusb | 60 -- .../device-logs/stm32f107.bin-download | 48 -- .../src/dfu-util/device-logs/stm32f107.lsusb | 60 -- .../device-logs/stm32f4discovery.bin-download | 36 - .../device-logs/stm32f4discovery.lsusb | 80 -- .../dfu-util/device-logs/tdk-bluetooth.lsusb | 269 ------- macosx/src/dfu-util/dfuse-pack.py | 121 --- macosx/src/dfu-util/doc/40-dfuse.rules | 4 - macosx/src/dfu-util/doc/Makefile.am | 2 - macosx/src/dfu-util/doc/SPEC-differences.txt | 21 - macosx/src/dfu-util/doc/dfu-util.1 | 248 ------- macosx/src/dfu-util/msvc/README_msvc.txt | 10 - .../src/dfu-util/msvc/dfu-suffix_2010.vcxproj | 100 --- macosx/src/dfu-util/msvc/dfu-util_2010.sln | 54 -- .../src/dfu-util/msvc/dfu-util_2010.vcxproj | 120 --- macosx/src/dfu-util/src/Makefile.am | 28 - macosx/src/dfu-util/src/dfu.c | 357 --------- macosx/src/dfu-util/src/dfu.h | 133 ---- macosx/src/dfu-util/src/dfu_file.c | 444 ----------- macosx/src/dfu-util/src/dfu_file.h | 60 -- macosx/src/dfu-util/src/dfu_load.c | 196 ----- macosx/src/dfu-util/src/dfu_load.h | 7 - macosx/src/dfu-util/src/dfu_util.c | 346 --------- macosx/src/dfu-util/src/dfu_util.h | 36 - macosx/src/dfu-util/src/dfuse.c | 652 ---------------- macosx/src/dfu-util/src/dfuse.h | 35 - macosx/src/dfu-util/src/dfuse_mem.c | 198 ----- macosx/src/dfu-util/src/dfuse_mem.h | 44 -- macosx/src/dfu-util/src/main.c | 699 ------------------ macosx/src/dfu-util/src/portable.h | 72 -- macosx/src/dfu-util/src/prefix.c | 176 ----- macosx/src/dfu-util/src/quirks.c | 56 -- macosx/src/dfu-util/src/quirks.h | 27 - macosx/src/dfu-util/src/suffix.c | 176 ----- macosx/src/dfu-util/src/usb_dfu.h | 99 --- macosx/src/dfu-util/www/build.html | 147 ---- macosx/src/dfu-util/www/dfu-util.1.html | 411 ---------- macosx/src/dfu-util/www/dfuse.html | 135 ---- macosx/src/dfu-util/www/index.html | 119 --- macosx/src/dfu-util/www/simple.css | 56 -- {linux/src => src/dfu-util}/build_dfu-util.sh | 1 - win/src/build_dfu-util.sh | 15 - 127 files changed, 15511 deletions(-) delete mode 100644 linux/src/dfu-util/AUTHORS delete mode 100644 linux/src/dfu-util/COPYING delete mode 100644 linux/src/dfu-util/ChangeLog delete mode 100644 linux/src/dfu-util/DEVICES.txt delete mode 100644 linux/src/dfu-util/Makefile.am delete mode 100644 linux/src/dfu-util/README delete mode 100644 linux/src/dfu-util/TODO delete mode 100644 linux/src/dfu-util/autogen.sh delete mode 100644 linux/src/dfu-util/configure.ac delete mode 100644 linux/src/dfu-util/device-logs/README delete mode 100644 linux/src/dfu-util/device-logs/dsonano.lsusb delete mode 100644 linux/src/dfu-util/device-logs/lpclink.log delete mode 100644 linux/src/dfu-util/device-logs/lpclink.lsusb delete mode 100644 linux/src/dfu-util/device-logs/lpclink2.log delete mode 100644 linux/src/dfu-util/device-logs/lpclink2.lsusb delete mode 100644 linux/src/dfu-util/device-logs/opc-20.lsusb delete mode 100644 linux/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb delete mode 100644 linux/src/dfu-util/device-logs/openmoko-freerunner.lsusb delete mode 100644 linux/src/dfu-util/device-logs/openmoko-neo1973.lsusb delete mode 100644 linux/src/dfu-util/device-logs/openpcd.lsusb delete mode 100644 linux/src/dfu-util/device-logs/qi-hardware-atusb.lsusb delete mode 100644 linux/src/dfu-util/device-logs/simtrace.lsusb delete mode 100644 linux/src/dfu-util/device-logs/sparkcore.lsusb delete mode 100644 linux/src/dfu-util/device-logs/stm32f107.bin-download delete mode 100644 linux/src/dfu-util/device-logs/stm32f107.lsusb delete mode 100644 linux/src/dfu-util/device-logs/stm32f4discovery.bin-download delete mode 100644 linux/src/dfu-util/device-logs/stm32f4discovery.lsusb delete mode 100644 linux/src/dfu-util/device-logs/tdk-bluetooth.lsusb delete mode 100644 linux/src/dfu-util/dfuse-pack.py delete mode 100644 linux/src/dfu-util/doc/40-dfuse.rules delete mode 100644 linux/src/dfu-util/doc/Makefile.am delete mode 100644 linux/src/dfu-util/doc/SPEC-differences.txt delete mode 100644 linux/src/dfu-util/doc/dfu-util.1 delete mode 100644 linux/src/dfu-util/msvc/README_msvc.txt delete mode 100644 linux/src/dfu-util/msvc/dfu-suffix_2010.vcxproj delete mode 100644 linux/src/dfu-util/msvc/dfu-util_2010.sln delete mode 100644 linux/src/dfu-util/msvc/dfu-util_2010.vcxproj delete mode 100644 linux/src/dfu-util/src/Makefile.am delete mode 100644 linux/src/dfu-util/src/dfu.c delete mode 100644 linux/src/dfu-util/src/dfu.h delete mode 100644 linux/src/dfu-util/src/dfu_file.c delete mode 100644 linux/src/dfu-util/src/dfu_file.h delete mode 100644 linux/src/dfu-util/src/dfu_load.c delete mode 100644 linux/src/dfu-util/src/dfu_load.h delete mode 100644 linux/src/dfu-util/src/dfu_util.c delete mode 100644 linux/src/dfu-util/src/dfu_util.h delete mode 100644 linux/src/dfu-util/src/dfuse.c delete mode 100644 linux/src/dfu-util/src/dfuse.h delete mode 100644 linux/src/dfu-util/src/dfuse_mem.c delete mode 100644 linux/src/dfu-util/src/dfuse_mem.h delete mode 100644 linux/src/dfu-util/src/main.c delete mode 100644 linux/src/dfu-util/src/portable.h delete mode 100644 linux/src/dfu-util/src/prefix.c delete mode 100644 linux/src/dfu-util/src/quirks.c delete mode 100644 linux/src/dfu-util/src/quirks.h delete mode 100644 linux/src/dfu-util/src/suffix.c delete mode 100644 linux/src/dfu-util/src/usb_dfu.h delete mode 100644 linux/src/dfu-util/www/build.html delete mode 100644 linux/src/dfu-util/www/dfu-util.1.html delete mode 100644 linux/src/dfu-util/www/dfuse.html delete mode 100644 linux/src/dfu-util/www/index.html delete mode 100644 linux/src/dfu-util/www/simple.css delete mode 100644 macosx/src/build_dfu-util.sh delete mode 100644 macosx/src/dfu-util/AUTHORS delete mode 100644 macosx/src/dfu-util/COPYING delete mode 100644 macosx/src/dfu-util/ChangeLog delete mode 100644 macosx/src/dfu-util/DEVICES.txt delete mode 100644 macosx/src/dfu-util/Makefile.am delete mode 100644 macosx/src/dfu-util/README delete mode 100644 macosx/src/dfu-util/TODO delete mode 100644 macosx/src/dfu-util/autogen.sh delete mode 100644 macosx/src/dfu-util/configure.ac delete mode 100644 macosx/src/dfu-util/device-logs/README delete mode 100644 macosx/src/dfu-util/device-logs/dsonano.lsusb delete mode 100644 macosx/src/dfu-util/device-logs/lpclink.log delete mode 100644 macosx/src/dfu-util/device-logs/lpclink.lsusb delete mode 100644 macosx/src/dfu-util/device-logs/lpclink2.log delete mode 100644 macosx/src/dfu-util/device-logs/lpclink2.lsusb delete mode 100644 macosx/src/dfu-util/device-logs/opc-20.lsusb delete mode 100644 macosx/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb delete mode 100644 macosx/src/dfu-util/device-logs/openmoko-freerunner.lsusb delete mode 100644 macosx/src/dfu-util/device-logs/openmoko-neo1973.lsusb delete mode 100644 macosx/src/dfu-util/device-logs/openpcd.lsusb delete mode 100644 macosx/src/dfu-util/device-logs/qi-hardware-atusb.lsusb delete mode 100644 macosx/src/dfu-util/device-logs/simtrace.lsusb delete mode 100644 macosx/src/dfu-util/device-logs/sparkcore.lsusb delete mode 100644 macosx/src/dfu-util/device-logs/stm32f107.bin-download delete mode 100644 macosx/src/dfu-util/device-logs/stm32f107.lsusb delete mode 100644 macosx/src/dfu-util/device-logs/stm32f4discovery.bin-download delete mode 100644 macosx/src/dfu-util/device-logs/stm32f4discovery.lsusb delete mode 100644 macosx/src/dfu-util/device-logs/tdk-bluetooth.lsusb delete mode 100644 macosx/src/dfu-util/dfuse-pack.py delete mode 100644 macosx/src/dfu-util/doc/40-dfuse.rules delete mode 100644 macosx/src/dfu-util/doc/Makefile.am delete mode 100644 macosx/src/dfu-util/doc/SPEC-differences.txt delete mode 100644 macosx/src/dfu-util/doc/dfu-util.1 delete mode 100644 macosx/src/dfu-util/msvc/README_msvc.txt delete mode 100644 macosx/src/dfu-util/msvc/dfu-suffix_2010.vcxproj delete mode 100644 macosx/src/dfu-util/msvc/dfu-util_2010.sln delete mode 100644 macosx/src/dfu-util/msvc/dfu-util_2010.vcxproj delete mode 100644 macosx/src/dfu-util/src/Makefile.am delete mode 100644 macosx/src/dfu-util/src/dfu.c delete mode 100644 macosx/src/dfu-util/src/dfu.h delete mode 100644 macosx/src/dfu-util/src/dfu_file.c delete mode 100644 macosx/src/dfu-util/src/dfu_file.h delete mode 100644 macosx/src/dfu-util/src/dfu_load.c delete mode 100644 macosx/src/dfu-util/src/dfu_load.h delete mode 100644 macosx/src/dfu-util/src/dfu_util.c delete mode 100644 macosx/src/dfu-util/src/dfu_util.h delete mode 100644 macosx/src/dfu-util/src/dfuse.c delete mode 100644 macosx/src/dfu-util/src/dfuse.h delete mode 100644 macosx/src/dfu-util/src/dfuse_mem.c delete mode 100644 macosx/src/dfu-util/src/dfuse_mem.h delete mode 100644 macosx/src/dfu-util/src/main.c delete mode 100644 macosx/src/dfu-util/src/portable.h delete mode 100644 macosx/src/dfu-util/src/prefix.c delete mode 100644 macosx/src/dfu-util/src/quirks.c delete mode 100644 macosx/src/dfu-util/src/quirks.h delete mode 100644 macosx/src/dfu-util/src/suffix.c delete mode 100644 macosx/src/dfu-util/src/usb_dfu.h delete mode 100644 macosx/src/dfu-util/www/build.html delete mode 100644 macosx/src/dfu-util/www/dfu-util.1.html delete mode 100644 macosx/src/dfu-util/www/dfuse.html delete mode 100644 macosx/src/dfu-util/www/index.html delete mode 100644 macosx/src/dfu-util/www/simple.css rename {linux/src => src/dfu-util}/build_dfu-util.sh (96%) delete mode 100644 win/src/build_dfu-util.sh diff --git a/linux/src/dfu-util/AUTHORS b/linux/src/dfu-util/AUTHORS deleted file mode 100644 index 1b36c739c..000000000 --- a/linux/src/dfu-util/AUTHORS +++ /dev/null @@ -1,30 +0,0 @@ -Authors ordered by first contribution. - -Harald Welte -Werner Almesberger -Michael Lauer -Jim Huang -Stefan Schmidt -Daniel Willmann -Mike Frysinger -Uwe Hermann -C. Scott Ananian -Bernard Blackham -Holger Freyther -Marc Singer -James Perkins -Tommi Keisala -Pascal Schweizer -Bradley Scott -Uwe Bonnes -Andrey Smirnov -Jussi Timperi -Hans Petter Selasky -Bo Shen -Henrique de Almeida Mendonca -Bernd Krumboeck -Dennis Meier -Veli-Pekka Peltola -Dave Hylands -Michael Grzeschik -Paul Fertser diff --git a/linux/src/dfu-util/COPYING b/linux/src/dfu-util/COPYING deleted file mode 100644 index d60c31a97..000000000 --- a/linux/src/dfu-util/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) 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 -this service 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 make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. 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. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -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 -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the 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 a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE 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. - - 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 -convey 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision 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, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This 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 Library General -Public License instead of this License. diff --git a/linux/src/dfu-util/ChangeLog b/linux/src/dfu-util/ChangeLog deleted file mode 100644 index 37f1addba..000000000 --- a/linux/src/dfu-util/ChangeLog +++ /dev/null @@ -1,93 +0,0 @@ -0.8: - o New, separate dfu-prefix tool (Uwe Bonnes) - o Allow filtering on serial number (Uwe Bonnes) - o Improved VID/PID/serial filtering (Bradley Scott) - o Support reading firmware from stdin (Tormod Volden) - o Warn if missing DFU suffix (Tormod Volden) - o Improved progress bar (Hans Petter Selasky) - o Fix dfuse leave option (Uwe Bonnes) - o Major code rework (Hans Petter Selasky) - o MS Visual Studio build support (Henrique Mendonca) - o dfuse-pack.py tool for .dfu files (Antonio Galeo) - o Many other fixes from many people - -2014-09-13: Tormod Volden - -0.7: - o Support for TI Stellaris devices (Tommi Keisala) - o Fix libusb detection on MacOSX (Marc Singer) - o Fix libusb detection on FreeBSD (Tormod Volden) - o Improved DfuSe support (Tormod Volden) - o Support all special commands (leave, unprotect, mass-erase) - o Arbitrary upload lengths - o "force" option for various possible (dangerous) overrides - -2012-10-07: Tormod Volden - -0.6: - o Add detach mode (Stefan Schmidt) - o Check return value on all libusb calls (Tormod Volden) - o Fix segmentation fault with -s option (Tormod Volden) - o Add DFU suffix manipulation tool (Stefan Schmidt) - o Port to Windows: (Tormod Volden, some parts based on work from Satz - Klauer) - o Port file handling to stdio streams - o Sleep() macros - o C99 types - o Pack structs - o Detect DfuSe device correctly on big-endian architectures (Tormod - Volden) - o Add dfuse progress indication on download (Tormod Volden) - o Cleanup: gcc pedantic, gcc extension, ... (Tormod Volden) - o Rely on page size from functional descriptor. Please report if you get - an error about it. (Tormod Volden) - o Add quirk for Maple since it reports wrong DFU version (Tormod Volden) - -2012-04-22: Stefan Schmidt - -0.5: - o DfuSe extension support for ST devices (Tormod Volden) - o Add initial support for bitWillDetach flag from DFU 1.1 (Tormod - Volden) - o Internal cleanup and some manual page fixes (Tormod Volden) - -2011-11-02: Stefan Schmidt - -0.4: - o Rework to use libusb-1.0 (Stefan Schmidt) - o DFU suffix support (Tormod Volden, Stefan Schmidt) - o Sspeed up DFU downloads directly into memory (Bernard Blackham) - o More flexible -d vid:pid parsing (Tormod Volden) - o Many bug fixes and cleanups - -2011-07-20: Stefan Schmidt - -0.3: - o quirks: Add OpenOCD to the poll timeout quirk table. - -2010-12-22: Stefan Schmidt - -0.2: - o Fix some typos on the website and the README (Antonio Ospite, Uwe - Hermann) - o Remove build rule for a static binary. We can use autotools for this. - (Mike Frysinger) - o Fix infinite loop in download error path (C. Scott Ananian) - o Break out to show the 'finished' in upload (C. Scott Ananian) - o Add GPLv2+ headers (Harald Welte) - o Remove dead code (commands.[ch]) remnescent of dfu-programmer (Harald - Welte) - o Simple quirk system with Openmoko quirk for missing bwPollTimeout (Tormod Volden) - o New default (1024) and clamping of transfer size (Tormod Volden) - o Verify sending of completion packet (Tormod Volden) - o Look for DFU functional descriptor among all descriptors (Tormod - Volden) - o Print out in which direction we are transferring data - o Abort in upload if the file already exists - -2010-11-17 Stefan Schmidt - -0.1: - Initial release - -2010-05-23 Stefan Schmidt diff --git a/linux/src/dfu-util/DEVICES.txt b/linux/src/dfu-util/DEVICES.txt deleted file mode 100644 index bdd9f1f2e..000000000 --- a/linux/src/dfu-util/DEVICES.txt +++ /dev/null @@ -1,20 +0,0 @@ -List of supported software and hardware products: - -Software user (bootloader, etc) -------------------------------- -- Sam7DFU: http://www.openpcd.org/Sam7dfu -- U-boot: DFU patches -- Barebox: http://www.barebox.org/ -- Leaflabs: http://code.google.com/p/leaflabs/ -- Blackmagic DFU - -Products using DFU ------------------- -- OpenPCD (sam7dfu) -- Openmoko Neo 1973 and Freerunner (u-boot with DFU patches) -- Leaflabs Maple -- ATUSB from Qi Hardware -- STM32F105/7, STM32F2/F3/F4 in System Bootloader -- Blackmagic debug probe -- NXP LPC31xx/LPC43XX, e.g. LPC-Link and LPC-Link2, need binaries - with LPC prefix and encoding (LPC-Link) diff --git a/linux/src/dfu-util/Makefile.am b/linux/src/dfu-util/Makefile.am deleted file mode 100644 index 641dda58a..000000000 --- a/linux/src/dfu-util/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -SUBDIRS = src doc - -EXTRA_DIST = autogen.sh TODO DEVICES.txt dfuse-pack.py diff --git a/linux/src/dfu-util/README b/linux/src/dfu-util/README deleted file mode 100644 index 0f8f2621a..000000000 --- a/linux/src/dfu-util/README +++ /dev/null @@ -1,20 +0,0 @@ -Dfu-util - Device Firmware Upgrade Utilities - -Dfu-util is the host side implementation of the DFU 1.0 [1] and DFU 1.1 [2] -specification of the USB forum. - -DFU is intended to download and upload firmware to devices connected over -USB. It ranges from small devices like micro-controller boards up to mobile -phones. With dfu-util you are able to download firmware to your device or -upload firmware from it. - -dfu-util has been tested with Openmoko Neo1973 and Freerunner and many -other devices. - -[1] DFU 1.0 spec: http://www.usb.org/developers/devclass_docs/usbdfu10.pdf -[2] DFU 1.1 spec: http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf - -The official website is: - - http://dfu-util.gnumonks.org/ - diff --git a/linux/src/dfu-util/TODO b/linux/src/dfu-util/TODO deleted file mode 100644 index 900c30c29..000000000 --- a/linux/src/dfu-util/TODO +++ /dev/null @@ -1,14 +0,0 @@ -DfuSe: -- Do erase and write in two separate passes when downloading -- Skip "Set Address" command when downloading contiguous blocks -- Implement "Get Commands" command - -Devices: -- Research iPhone/iPod/iPad support - Heavily modified dfu-util fork here: - https://github.com/planetbeing/xpwn/tree/master/dfu-util -- Test against Niftylights - -Non-Code: -- Logo -- Re-License as LGPL for usage as library? diff --git a/linux/src/dfu-util/autogen.sh b/linux/src/dfu-util/autogen.sh deleted file mode 100644 index e67aed39a..000000000 --- a/linux/src/dfu-util/autogen.sh +++ /dev/null @@ -1,2 +0,0 @@ -#! /bin/sh -autoreconf -v -i diff --git a/linux/src/dfu-util/configure.ac b/linux/src/dfu-util/configure.ac deleted file mode 100644 index 86221143f..000000000 --- a/linux/src/dfu-util/configure.ac +++ /dev/null @@ -1,41 +0,0 @@ -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -AC_PREREQ(2.59) -AC_INIT([dfu-util],[0.8],[dfu-util@lists.gnumonks.org],,[http://dfu-util.gnumonks.org]) -AC_CONFIG_AUX_DIR(m4) -AM_INIT_AUTOMAKE([foreign]) -AC_CONFIG_HEADERS([config.h]) - -# Test for new silent rules and enable only if they are available -m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) - -# Checks for programs. -AC_PROG_CC - -# Checks for libraries. -# On FreeBSD the libusb-1.0 is called libusb and resides in system location -AC_CHECK_LIB([usb], [libusb_init],, [native_libusb=no],) -AS_IF([test x$native_libusb = xno], [ - PKG_CHECK_MODULES([USB], [libusb-1.0 >= 1.0.0],, - AC_MSG_ERROR([*** Required libusb-1.0 >= 1.0.0 not installed ***])) -]) -AC_CHECK_LIB([usbpath],[usb_path2devnum],,,-lusb) - -LIBS="$LIBS $USB_LIBS" -CFLAGS="$CFLAGS $USB_CFLAGS" - -# Checks for header files. -AC_HEADER_STDC -AC_CHECK_HEADERS([usbpath.h windows.h sysexits.h]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_SIZE_T - -# Checks for library functions. -AC_FUNC_MEMCMP -AC_CHECK_FUNCS([ftruncate getpagesize nanosleep err]) - -AC_CONFIG_FILES(Makefile src/Makefile doc/Makefile) -AC_OUTPUT diff --git a/linux/src/dfu-util/device-logs/README b/linux/src/dfu-util/device-logs/README deleted file mode 100644 index 00d3d1a96..000000000 --- a/linux/src/dfu-util/device-logs/README +++ /dev/null @@ -1,77 +0,0 @@ -Device: -------- -qi-hardware-atusb: -- Qi Hardware ben-wpan -- DFU implementation: - http://projects.qi-hardware.com/index.php/p/ben-wpan/source/tree/master/atusb/fw/usb -- Tester: Stefan Schmidt - -openpcd: -- OpenPCD RFID reader -- DFU implementation: SAM7DFU - http://www.openpcd.org/Sam7dfu, git://git.gnumonks.org/openpcd.git -- Tester: Stefan Schmidt - -simtrace: -- Sysmocom SimTrace -- DFU implementation: SAM7DFU - http://www.openpcd.org/Sam7dfu, git://git.gnumonks.org/openpcd.git -- Tester: Stefan Schmidt - -openmoko-freerunner: -- Openmoko Freerunner -- DFU implementation: Old U-Boot - http://git.openmoko.org/?p=u-boot.git;a=shortlog;h=refs/heads/mokopatches -- Tester: Stefan Schmidt - -openmoko-neo1973: -- Openmoko Neo1073 -- DFU implementation: Old U-Boot - http://git.openmoko.org/?p=u-boot.git;a=shortlog;h=refs/heads/mokopatches -- Tester: Stefan Schmidt - -tdk-bluetooth: -- TDK Corp. Bluetooth Adapter -- DFU implementation: closed soure -- Only upload has been tested -- Tester: Stefan Schmidt - -stm32f107: -- STM32 microcontrollers with built-in (ROM) DFU loader -- DFU implementation: Closed source but probably similar to the one - in their USB device libraries. Some relevant application notes: - http://www.st.com -> AN3156 and AN2606 -- Tested by Uwe Bonnes - -stm32f4discovery: -- STM32 microcontroller board with built-in (ROM) DFU loader -- DFU implementation: Closed source, probably similar to stm32f107. -- Tested by Joe Rothweiler - -dso-nano: -- DSO Nano pocket oscilloscope -- DFU implementation: Based on ST Microelectronics USB FS Library 1.0 - http://dsonano.googlecode.com/files/DS0201_OpenSource.rar -- Tester: Tormod Volden - -opc-20: -- Custom devices based on STM32F1xx -- DFU implementation: ST Microelectronics USB FS Device Library 3.1.0 - http://www.st.com -> um0424.zip -- Tester: Tormod Volden - -lpc-link, lpclink2: -- NXP LPCXpresso debug adapters -- Proprietary DFU implementation, uses special download files with - LPC prefix and encoding of the target firmware code -- Tested by Uwe Bonnes - -Adding the lsusb output and a download log of your device here helps -us to avoid regressions for hardware we cannot test while working on -the code. To extract the lsusb output use this command: -sudo lsusb -v -d $USBID > $DEVICE.lsusb -Prepare a description snippet as above, and send it to us. A log -(copy-paste of the command window) of a firmware download is also -nice, please use the double verbose option -v -v and include the -command line in the log file. - diff --git a/linux/src/dfu-util/device-logs/dsonano.lsusb b/linux/src/dfu-util/device-logs/dsonano.lsusb deleted file mode 100644 index 140a7bc6c..000000000 --- a/linux/src/dfu-util/device-logs/dsonano.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 002 Device 004: ID 0483:df11 SGS Thomson Microelectronics -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0483 SGS Thomson Microelectronics - idProduct 0xdf11 - bcdDevice 1.1a - iManufacturer 1 STMicroelectronics - iProduct 2 STM32 DFU - iSerial 3 001 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 64mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 0 - iInterface 4 @Internal Flash /0x08000000/12*001Ka,116*001Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 0 - iInterface 5 @SPI Flash : M25P64/0x00000000/64*064Kg,64*064Kg - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 1024 bytes - bcdDFUVersion 1.1a -Device Status: 0x0000 - (Bus Powered) diff --git a/linux/src/dfu-util/device-logs/lpclink.log b/linux/src/dfu-util/device-logs/lpclink.log deleted file mode 100644 index 7de4dd3e6..000000000 --- a/linux/src/dfu-util/device-logs/lpclink.log +++ /dev/null @@ -1,59 +0,0 @@ -(The on-board LPC3154 has some encryption key set and LPCXpressoWIN.enc -is encrypted.) - -$ lsusb | grep NXP -Bus 003 Device 011: ID 0471:df55 Philips (or NXP) LPCXpresso LPC-Link - -$ dfu-util -v -v -v -R -D /opt/lpc/lpcxpresso/bin/LPCXpressoWIN.enc - -dfu-util 0.7 - -Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc. -Copyright 2010-2012 Tormod Volden and Stefan Schmidt -This program is Free Software and has ABSOLUTELY NO WARRANTY -Please report bugs to dfu-util@lists.gnumonks.org - -dfu-util: Invalid DFU suffix signature -dfu-util: A valid DFU suffix will be required in a future dfu-util release!!! -Deducing device DFU version from functional descriptor length -Opening DFU capable USB device... -ID 0471:df55 -Run-time device DFU version 0100 -Claiming USB DFU Runtime Interface... -Determining device status: -state = dfuIDLE, status = 0 -dfu-util: WARNING: Runtime device already in DFU state ?!? -Claiming USB DFU Interface... -Setting Alternate Setting #0 ... -Determining device status: -state = dfuIDLE, status = 0 -dfuIDLE, continuing -DFU mode device DFU version 0100 -Device returned transfer size 2048 -Copying data from PC to DFU device -Download [ ] 0% 0 bytes -Download [= ] 6% 2048 bytes -Download [=== ] 13% 4096 bytes -Download [==== ] 19% 6144 bytes -Download [====== ] 26% 8192 bytes -Download [======== ] 32% 10240 bytes -Download [========= ] 39% 12288 bytes -Download [=========== ] 45% 14336 bytes -Download [============= ] 52% 16384 bytes -Download [============== ] 59% 18432 bytes -Download [================ ] 65% 20480 bytes -Download [================== ] 72% 22528 bytes -Download [=================== ] 78% 24576 bytes -Download [===================== ] 85% 26624 bytes -Download [====================== ] 91% 28672 bytes -Download [======================== ] 98% 29192 bytes -Download [=========================] 100% 29192 bytes -Download done. -Sent a total of 29192 bytes -state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present -Done! -dfu-util: can't detach -Resetting USB to switch back to runtime mode - -$ lsusb | grep NXP -Bus 003 Device 012: ID 1fc9:0009 NXP Semiconductors diff --git a/linux/src/dfu-util/device-logs/lpclink.lsusb b/linux/src/dfu-util/device-logs/lpclink.lsusb deleted file mode 100644 index 867b2a2c5..000000000 --- a/linux/src/dfu-util/device-logs/lpclink.lsusb +++ /dev/null @@ -1,58 +0,0 @@ - -Bus 003 Device 008: ID 0471:df55 Philips (or NXP) LPCXpresso LPC-Link -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 2.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0471 Philips (or NXP) - idProduct 0xdf55 LPCXpresso LPC-Link - bcdDevice 0.01 - iManufacturer 0 - iProduct 0 - iSerial 0 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 25 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 0 - iInterface 0 - Device Firmware Upgrade Interface Descriptor: - bLength 7 - bDescriptorType 33 - bmAttributes 1 - Will Not Detach - Manifestation Intolerant - Upload Unsupported - Download Supported - wDetachTimeout 65535 milliseconds - wTransferSize 2048 bytes -Device Qualifier (for other device speed): - bLength 10 - bDescriptorType 6 - bcdUSB 2.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - bNumConfigurations 1 -Device Status: 0x0000 - (Bus Powered) diff --git a/linux/src/dfu-util/device-logs/lpclink2.log b/linux/src/dfu-util/device-logs/lpclink2.log deleted file mode 100644 index 4681eff7d..000000000 --- a/linux/src/dfu-util/device-logs/lpclink2.log +++ /dev/null @@ -1,59 +0,0 @@ -$ lsusb | grep NXP -Bus 003 Device 013: ID 1fc9:000c NXP Semiconductors - -$ dfu-util -D ~/devel/dfu-util/firmware.bin.qthdr - -dfu-util 0.7 - -Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc. -Copyright 2010-2012 Tormod Volden and Stefan Schmidt -This program is Free Software and has ABSOLUTELY NO WARRANTY -Please report bugs to dfu-util@lists.gnumonks.org - -dfu-util: Invalid DFU suffix signature -dfu-util: A valid DFU suffix will be required in a future dfu-util release!!! -Possible unencryptes NXP LPC DFU prefix with the following properties -Payload length: 39 kiByte -Opening DFU capable USB device... -ID 1fc9:000c -Run-time device DFU version 0100 -Claiming USB DFU Runtime Interface... -Determining device status: -state = dfuIDLE, status = 0 -dfu-util: WARNING: Runtime device already in DFU state ?!? -Claiming USB DFU Interface... -Setting Alternate Setting #0 ... -Determining device status: -state = dfuIDLE, status = 0 -dfuIDLE, continuing -DFU mode device DFU version 0100 -Device returned transfer size 2048 -Copying data from PC to DFU device -Download [ ] 0% 0 bytes -Download [= ] 4% 2048 bytes -Download [== ] 9% 4096 bytes -Download [=== ] 14% 6144 bytes -Download [==== ] 19% 8192 bytes -Download [====== ] 24% 10240 bytes -Download [======= ] 28% 12288 bytes -Download [======== ] 33% 14336 bytes -Download [========= ] 38% 16384 bytes -Download [========== ] 43% 18432 bytes -Download [============ ] 48% 20480 bytes -Download [============= ] 53% 22528 bytes -Download [============== ] 57% 24576 bytes -Download [=============== ] 62% 26624 bytes -Download [================ ] 67% 28672 bytes -Download [================== ] 72% 30720 bytes -Download [=================== ] 77% 32768 bytes -Download [==================== ] 82% 34816 bytes -Download [===================== ] 86% 36864 bytes -Download [====================== ] 91% 38912 bytes -Download [======================== ] 96% 40356 bytes -Download [=========================] 100% 40356 bytes -Download done. -Sent a total of 40356 bytes -dfu-util: unable to read DFU status - -$ lsusb | grep NXP -Bus 003 Device 014: ID 1fc9:0018 NXP Semiconductors diff --git a/linux/src/dfu-util/device-logs/lpclink2.lsusb b/linux/src/dfu-util/device-logs/lpclink2.lsusb deleted file mode 100644 index b833fca77..000000000 --- a/linux/src/dfu-util/device-logs/lpclink2.lsusb +++ /dev/null @@ -1,203 +0,0 @@ - -Bus 003 Device 007: ID 0c72:000c PEAK System PCAN-USB -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 16 - idVendor 0x0c72 PEAK System - idProduct 0x000c PCAN-USB - bcdDevice 1c.ff - iManufacturer 0 - iProduct 3 VER1:PEAK -VER2:02.8.01 -DAT :06.05.2004 -TIME:09:35:37 - ... - iSerial 0 - bNumConfigurations 3 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 46 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 200mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 4 - bInterfaceClass 0 (Defined at Interface level) - bInterfaceSubClass 0 - bInterfaceProtocol 0 - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 20 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x01 EP 1 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 20 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x82 EP 2 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 46 - bNumInterfaces 1 - bConfigurationValue 2 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 394mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 4 - bInterfaceClass 0 (Defined at Interface level) - bInterfaceSubClass 0 - bInterfaceProtocol 0 - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 20 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x01 EP 1 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 20 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x82 EP 2 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 46 - bNumInterfaces 1 - bConfigurationValue 3 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 200mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 4 - bInterfaceClass 0 (Defined at Interface level) - bInterfaceSubClass 0 - bInterfaceProtocol 0 - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x01 EP 1 OUT - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x82 EP 2 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 -Device Status: 0x0001 - Self Powered diff --git a/linux/src/dfu-util/device-logs/opc-20.lsusb b/linux/src/dfu-util/device-logs/opc-20.lsusb deleted file mode 100644 index 580df90e5..000000000 --- a/linux/src/dfu-util/device-logs/opc-20.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 001 Device 004: ID 0483:df11 SGS Thomson Microelectronics -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0483 SGS Thomson Microelectronics - idProduct 0xdf11 - bcdDevice 2.00 - iManufacturer 1 STMicroelectronics - iProduct 2 STM32 DFU - iSerial 3 ÿÿÿÿÿÿÿÿÿÿÿÿ - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0xc0 - Self Powered - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 @Internal Flash /0x08000000/12*001Ka,116*001Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 @SPI Flash : M25P64/0x00000000/128*64Kg - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 1024 bytes - bcdDFUVersion 1a.01 -Device Status: 0x0001 - Self Powered diff --git a/linux/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb b/linux/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb deleted file mode 100644 index 4c0abfb06..000000000 --- a/linux/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb +++ /dev/null @@ -1,109 +0,0 @@ -Bus 003 Device 017: ID 1d50:5119 OpenMoko, Inc. GTA01/GTA02 U-Boot Bootloader -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 16 - idVendor 0x1d50 OpenMoko, Inc. - idProduct 0x5119 GTA01/GTA02 U-Boot Bootloader - bcdDevice 0.00 - iManufacturer 1 OpenMoko, Inc - iProduct 2 Neo1973 Bootloader U-Boot 1.3.2-moko12 - iSerial 3 0000000 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 81 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 7 USB Device Firmware Upgrade - bmAttributes 0x80 - (Bus Powered) - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 8 RAM 0x32000000 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 9 u-boot - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 2 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 10 u-boot_env - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 3 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 11 kernel - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 4 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 12 splash - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 5 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 13 factory - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 6 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 14 rootfs - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 7 - Will Not Detach - Manifestation Tolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 4096 bytes - bcdDFUVersion 1.00 -Device Status: 0x0a00 - (Bus Powered) diff --git a/linux/src/dfu-util/device-logs/openmoko-freerunner.lsusb b/linux/src/dfu-util/device-logs/openmoko-freerunner.lsusb deleted file mode 100644 index 835708dd8..000000000 --- a/linux/src/dfu-util/device-logs/openmoko-freerunner.lsusb +++ /dev/null @@ -1,179 +0,0 @@ -Bus 005 Device 033: ID 1d50:5119 OpenMoko, Inc. GTA01/GTA02 U-Boot Bootloader -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.10 - bDeviceClass 2 Communications - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 16 - idVendor 0x1d50 OpenMoko, Inc. - idProduct 0x5119 GTA01/GTA02 U-Boot Bootloader - bcdDevice 0.00 - iManufacturer 1 OpenMoko, Inc - iProduct 2 Neo1973 Bootloader U-Boot 1.3.2-moko12 - iSerial 3 0000000 - bNumConfigurations 2 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 85 - bNumInterfaces 3 - bConfigurationValue 1 - iConfiguration 4 TTY via USB - bmAttributes 0x80 - (Bus Powered) - MaxPower 500mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 2 Communications - bInterfaceSubClass 2 Abstract (modem) - bInterfaceProtocol 1 AT-commands (v.25ter) - iInterface 6 Control Interface - CDC Header: - bcdCDC 0.6e - CDC Call Management: - bmCapabilities 0x00 - bDataInterface 1 - CDC ACM: - bmCapabilities 0x00 - CDC Union: - bMasterInterface 0 - bSlaveInterface 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 10 CDC Data - bInterfaceSubClass 0 Unused - bInterfaceProtocol 0 - iInterface 5 Bulk Data Interface - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 2 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 1 - iInterface 7 USB Device Firmware Upgrade - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 7 - Will Not Detach - Manifestation Tolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 4096 bytes - bcdDFUVersion 1.00 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 67 - bNumInterfaces 2 - bConfigurationValue 2 - iConfiguration 4 TTY via USB - bmAttributes 0x80 - (Bus Powered) - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 2 Communications - bInterfaceSubClass 2 Abstract (modem) - bInterfaceProtocol 1 AT-commands (v.25ter) - iInterface 6 Control Interface - CDC Header: - bcdCDC 0.6e - CDC Call Management: - bmCapabilities 0x00 - bDataInterface 1 - CDC ACM: - bmCapabilities 0x00 - CDC Union: - bMasterInterface 0 - bSlaveInterface 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 10 CDC Data - bInterfaceSubClass 0 Unused - bInterfaceProtocol 0 - iInterface 5 Bulk Data Interface - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 -Device Status: 0x9a00 - (Bus Powered) diff --git a/linux/src/dfu-util/device-logs/openmoko-neo1973.lsusb b/linux/src/dfu-util/device-logs/openmoko-neo1973.lsusb deleted file mode 100644 index 07789506a..000000000 --- a/linux/src/dfu-util/device-logs/openmoko-neo1973.lsusb +++ /dev/null @@ -1,182 +0,0 @@ - -Bus 006 Device 020: ID 1457:5119 First International Computer, Inc. OpenMoko Neo1973 u-boot cdc_acm serial port -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.10 - bDeviceClass 2 Communications - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 16 - idVendor 0x1457 First International Computer, Inc. - idProduct 0x5119 OpenMoko Neo1973 u-boot cdc_acm serial port - bcdDevice 0.00 - iManufacturer 1 - iProduct 2 - iSerial 3 - bNumConfigurations 2 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 85 - bNumInterfaces 3 - bConfigurationValue 1 - iConfiguration 4 - bmAttributes 0x80 - (Bus Powered) - MaxPower 500mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 2 Communications - bInterfaceSubClass 2 Abstract (modem) - bInterfaceProtocol 1 AT-commands (v.25ter) - iInterface 6 - CDC Header: - bcdCDC 0.6e - CDC Call Management: - bmCapabilities 0x00 - bDataInterface 1 - CDC ACM: - bmCapabilities 0x00 - CDC Union: - bMasterInterface 0 - bSlaveInterface 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 10 CDC Data - bInterfaceSubClass 0 Unused - bInterfaceProtocol 0 - iInterface 5 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 2 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 1 - iInterface 7 - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 7 - Will Not Detach - Manifestation Tolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 4096 bytes - bcdDFUVersion 1.00 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 67 - bNumInterfaces 2 - bConfigurationValue 2 - iConfiguration 4 - bmAttributes 0x80 - (Bus Powered) - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 2 Communications - bInterfaceSubClass 2 Abstract (modem) - bInterfaceProtocol 1 AT-commands (v.25ter) - iInterface 6 - CDC Header: - bcdCDC 0.6e - CDC Call Management: - bmCapabilities 0x00 - bDataInterface 1 - CDC ACM: - bmCapabilities 0x00 - CDC Union: - bMasterInterface 0 - bSlaveInterface 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 10 CDC Data - bInterfaceSubClass 0 Unused - bInterfaceProtocol 0 - iInterface 5 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 -Device Status: 0x0006 - (Bus Powered) - Remote Wakeup Enabled - Test Mode diff --git a/linux/src/dfu-util/device-logs/openpcd.lsusb b/linux/src/dfu-util/device-logs/openpcd.lsusb deleted file mode 100644 index f6255a943..000000000 --- a/linux/src/dfu-util/device-logs/openpcd.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 006 Device 016: ID 16c0:076b VOTI OpenPCD 13.56MHz RFID Reader -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 8 - idVendor 0x16c0 VOTI - idProduct 0x076b OpenPCD 13.56MHz RFID Reader - bcdDevice 0.00 - iManufacturer 1 - iProduct 2 OpenPCD RFID Simulator - DFU Mode - iSerial 0 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 200mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 0 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 0 - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 3 - Will Not Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 256 bytes - bcdDFUVersion 1.00 -Device Status: 0x0000 - (Bus Powered) diff --git a/linux/src/dfu-util/device-logs/qi-hardware-atusb.lsusb b/linux/src/dfu-util/device-logs/qi-hardware-atusb.lsusb deleted file mode 100644 index bfc1701e1..000000000 --- a/linux/src/dfu-util/device-logs/qi-hardware-atusb.lsusb +++ /dev/null @@ -1,59 +0,0 @@ - -Bus 006 Device 013: ID 20b7:1540 Qi Hardware ben-wpan, AT86RF230-based -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 2.00 - bDeviceClass 255 Vendor Specific Class - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x20b7 Qi Hardware - idProduct 0x1540 ben-wpan, AT86RF230-based - bcdDevice 0.01 - iManufacturer 0 - iProduct 0 - iSerial 1 4630333438371508231a - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 34 - bNumInterfaces 2 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 40mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 255 Vendor Specific Class - bInterfaceSubClass 0 - bInterfaceProtocol 0 - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 0 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 1 - iInterface 0 -Device Status: 0x0000 - (Bus Powered) diff --git a/linux/src/dfu-util/device-logs/simtrace.lsusb b/linux/src/dfu-util/device-logs/simtrace.lsusb deleted file mode 100644 index 578ddf0e1..000000000 --- a/linux/src/dfu-util/device-logs/simtrace.lsusb +++ /dev/null @@ -1,70 +0,0 @@ - -Bus 006 Device 017: ID 16c0:0762 VOTI -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 8 - idVendor 0x16c0 VOTI - idProduct 0x0762 - bcdDevice 0.00 - iManufacturer 1 sysmocom - systems for mobile communications GmbH - iProduct 2 SimTrace SIM Sniffer - DFU Mode - iSerial 0 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 45 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 3 SimTrace DFU Configuration - bmAttributes 0x80 - (Bus Powered) - MaxPower 200mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 SimTrace DFU Interface - Application Partition - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 SimTrace DFU Interface - Bootloader Partition - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 2 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 6 SimTrace DFU Interface - RAM - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 3 - Will Not Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 256 bytes - bcdDFUVersion 1.00 -Device Status: 0x0000 - (Bus Powered) diff --git a/linux/src/dfu-util/device-logs/sparkcore.lsusb b/linux/src/dfu-util/device-logs/sparkcore.lsusb deleted file mode 100644 index b6029ffa5..000000000 --- a/linux/src/dfu-util/device-logs/sparkcore.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 001 Device 008: ID 1d50:607f OpenMoko, Inc. -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x1d50 OpenMoko, Inc. - idProduct 0x607f - bcdDevice 2.00 - iManufacturer 1 Spark Devices - iProduct 2 CORE DFU - iSerial 3 8D80527B5055 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0xc0 - Self Powered - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 @Internal Flash /0x08000000/20*001Ka,108*001Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 @SPI Flash : SST25x/0x00000000/512*04Kg - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 1024 bytes - bcdDFUVersion 1.1a -Device Status: 0x0001 - Self Powered diff --git a/linux/src/dfu-util/device-logs/stm32f107.bin-download b/linux/src/dfu-util/device-logs/stm32f107.bin-download deleted file mode 100644 index 45b714f83..000000000 --- a/linux/src/dfu-util/device-logs/stm32f107.bin-download +++ /dev/null @@ -1,48 +0,0 @@ -> src/dfu-util --intf 0 --alt 0 -v -v -v -s 0x8000000 -D test3 -dfu-util 0.4 - -(C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc. -(C) 2010-2011 Tormod Volden (DfuSe support) -This program is Free Software and has ABSOLUTELY NO WARRANTY - -dfu-util does currently only support DFU version 1.0 - -Opening DFU USB device... ID 0483:df11 -Run-time device DFU version 011a -Found DFU: [0483:df11] devnum=0, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/128*002Kg" -Claiming USB DFU Interface... -Setting Alternate Setting #0 ... -Determining device status: state = dfuIDLE, status = 0 -dfuIDLE, continuing -DFU mode device DFU version 011a -Device returned transfer size 2048 -No valid DFU suffix signature -Warning: File has no DFU suffix -DfuSe interface name: "Internal Flash " -Memory segment at 0x08000000 128 x 2048 = 262144 (rew) -Uploading to address = 0x08000000, size = 16384 -Erasing page size 2048 at address 0x08000000, page starting at 0x08000000 - Download from image offset 00000000 to memory 08000000-080007ff, size 2048 - Setting address pointer to 0x08000000 -Erasing page size 2048 at address 0x08000800, page starting at 0x08000800 - Download from image offset 00000800 to memory 08000800-08000fff, size 2048 - Setting address pointer to 0x08000800 -Erasing page size 2048 at address 0x08001000, page starting at 0x08001000 - Download from image offset 00001000 to memory 08001000-080017ff, size 2048 - Setting address pointer to 0x08001000 -Erasing page size 2048 at address 0x08001800, page starting at 0x08001800 - Download from image offset 00001800 to memory 08001800-08001fff, size 2048 - Setting address pointer to 0x08001800 -Erasing page size 2048 at address 0x08002000, page starting at 0x08002000 - Download from image offset 00002000 to memory 08002000-080027ff, size 2048 - Setting address pointer to 0x08002000 -Erasing page size 2048 at address 0x08002800, page starting at 0x08002800 - Download from image offset 00002800 to memory 08002800-08002fff, size 2048 - Setting address pointer to 0x08002800 -Erasing page size 2048 at address 0x08003000, page starting at 0x08003000 - Download from image offset 00003000 to memory 08003000-080037ff, size 2048 - Setting address pointer to 0x08003000 -Erasing page size 2048 at address 0x08003800, page starting at 0x08003800 - Download from image offset 00003800 to memory 08003800-08003fff, size 2048 - Setting address pointer to 0x08003800 - diff --git a/linux/src/dfu-util/device-logs/stm32f107.lsusb b/linux/src/dfu-util/device-logs/stm32f107.lsusb deleted file mode 100644 index 14b45cda0..000000000 --- a/linux/src/dfu-util/device-logs/stm32f107.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 001 Device 028: ID 0483:df11 SGS Thomson Microelectronics STM Device in DFU Mode -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0483 SGS Thomson Microelectronics - idProduct 0xdf11 STM Device in DFU Mode - bcdDevice 20.00 - iManufacturer 1 STMicroelectronics - iProduct 2 STM32 0x418 DFU Bootloader - iSerial 3 STM32 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0xc0 - Self Powered - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 @Internal Flash /0x08000000/128*002Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 @Option Bytes /0x1FFFF800/01*016 g - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 2048 bytes - bcdDFUVersion 1.1a -Device Status: 0x0000 - (Bus Powered) diff --git a/linux/src/dfu-util/device-logs/stm32f4discovery.bin-download b/linux/src/dfu-util/device-logs/stm32f4discovery.bin-download deleted file mode 100644 index 96e172216..000000000 --- a/linux/src/dfu-util/device-logs/stm32f4discovery.bin-download +++ /dev/null @@ -1,36 +0,0 @@ -dfu-util --device 0483:df11 --alt 0 \ - --dfuse-address 0x08000000 \ - -v -v -v \ - --download arm/iotoggle.bin -No valid DFU suffix signature -Warning: File has no DFU suffix -dfu-util 0.5 - -(C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc. -(C) 2010-2011 Tormod Volden (DfuSe support) -This program is Free Software and has ABSOLUTELY NO WARRANTY - -dfu-util does currently only support DFU version 1.0 - -Filter on vendor = 0x0483 product = 0xdf11 -Opening DFU capable USB device... ID 0483:df11 -Run-time device DFU version 011a -Found DFU: [0483:df11] devnum=0, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/04*016Kg,01*064Kg,07*128Kg" -Claiming USB DFU Interface... -Setting Alternate Setting #0 ... -Determining device status: state = dfuERROR, status = 10 -dfuERROR, clearing status -Determining device status: state = dfuIDLE, status = 0 -dfuIDLE, continuing -DFU mode device DFU version 011a -Device returned transfer size 2048 -DfuSe interface name: "Internal Flash " -Memory segment at 0x08000000 4 x 16384 = 65536 (rew) -Memory segment at 0x08010000 1 x 65536 = 65536 (rew) -Memory segment at 0x08020000 7 x 131072 = 917504 (rew) -Uploading to address = 0x08000000, size = 2308 -Erasing page size 16384 at address 0x08000000, page starting at 0x08000000 - Download from image offset 00000000 to memory 08000000-080007ff, size 2048 - Setting address pointer to 0x08000000 - Download from image offset 00000800 to memory 08000800-08000903, size 260 - Setting address pointer to 0x08000800 diff --git a/linux/src/dfu-util/device-logs/stm32f4discovery.lsusb b/linux/src/dfu-util/device-logs/stm32f4discovery.lsusb deleted file mode 100644 index 0b870de91..000000000 --- a/linux/src/dfu-util/device-logs/stm32f4discovery.lsusb +++ /dev/null @@ -1,80 +0,0 @@ - -Bus 001 Device 010: ID 0483:df11 SGS Thomson Microelectronics STM Device in DFU Mode -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0483 SGS Thomson Microelectronics - idProduct 0xdf11 STM Device in DFU Mode - bcdDevice 21.00 - iManufacturer 1 STMicroelectronics - iProduct 2 STM32 BOOTLOADER - iSerial 3 315A28A0B956 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 54 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0xc0 - Self Powered - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 @Internal Flash /0x08000000/04*016Kg,01*064Kg,07*128Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 @Option Bytes /0x1FFFC000/01*016 g - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 2 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 6 @OTP Memory /0x1FFF7800/01*512 g,01*016 g - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 3 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 7 @Device Feature/0xFFFF0000/01*004 g - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 2048 bytes - bcdDFUVersion 1.1a -Device Status: 0x0001 - Self Powered diff --git a/linux/src/dfu-util/device-logs/tdk-bluetooth.lsusb b/linux/src/dfu-util/device-logs/tdk-bluetooth.lsusb deleted file mode 100644 index c0cfaceb6..000000000 --- a/linux/src/dfu-util/device-logs/tdk-bluetooth.lsusb +++ /dev/null @@ -1,269 +0,0 @@ - -Bus 006 Device 014: ID 04bf:0320 TDK Corp. Bluetooth Adapter -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 2.00 - bDeviceClass 224 Wireless - bDeviceSubClass 1 Radio Frequency - bDeviceProtocol 1 Bluetooth - bMaxPacketSize0 64 - idVendor 0x04bf TDK Corp. - idProduct 0x0320 Bluetooth Adapter - bcdDevice 26.52 - iManufacturer 1 Ezurio - iProduct 2 Turbo Bluetooth Adapter - iSerial 3 008098D4FFBD - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 193 - bNumInterfaces 3 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 64mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 3 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x82 EP 2 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0000 1x 0 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0000 1x 0 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 1 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0009 1x 9 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0009 1x 9 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 2 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0011 1x 17 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0011 1x 17 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 3 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0019 1x 25 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0019 1x 25 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 4 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0021 1x 33 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0021 1x 33 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 5 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0031 1x 49 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0031 1x 49 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 2 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 0 - iInterface 0 - Device Firmware Upgrade Interface Descriptor: - bLength 7 - bDescriptorType 33 - bmAttributes 7 - Will Not Detach - Manifestation Tolerant - Upload Supported - Download Supported - wDetachTimeout 5000 milliseconds - wTransferSize 1023 bytes -Device Status: 0x0000 - (Bus Powered) diff --git a/linux/src/dfu-util/dfuse-pack.py b/linux/src/dfu-util/dfuse-pack.py deleted file mode 100644 index 875cc5c6e..000000000 --- a/linux/src/dfu-util/dfuse-pack.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/python - -# Written by Antonio Galea - 2010/11/18 -# Distributed under Gnu LGPL 3.0 -# see http://www.gnu.org/licenses/lgpl-3.0.txt - -import sys,struct,zlib,os -from optparse import OptionParser - -DEFAULT_DEVICE="0x0483:0xdf11" - -def named(tuple,names): - return dict(zip(names.split(),tuple)) -def consume(fmt,data,names): - n = struct.calcsize(fmt) - return named(struct.unpack(fmt,data[:n]),names),data[n:] -def cstring(string): - return string.split('\0',1)[0] -def compute_crc(data): - return 0xFFFFFFFF & -zlib.crc32(data) -1 - -def parse(file,dump_images=False): - print 'File: "%s"' % file - data = open(file,'rb').read() - crc = compute_crc(data[:-4]) - prefix, data = consume('<5sBIB',data,'signature version size targets') - print '%(signature)s v%(version)d, image size: %(size)d, targets: %(targets)d' % prefix - for t in range(prefix['targets']): - tprefix, data = consume('<6sBI255s2I',data,'signature altsetting named name size elements') - tprefix['num'] = t - if tprefix['named']: - tprefix['name'] = cstring(tprefix['name']) - else: - tprefix['name'] = '' - print '%(signature)s %(num)d, alt setting: %(altsetting)s, name: "%(name)s", size: %(size)d, elements: %(elements)d' % tprefix - tsize = tprefix['size'] - target, data = data[:tsize], data[tsize:] - for e in range(tprefix['elements']): - eprefix, target = consume('<2I',target,'address size') - eprefix['num'] = e - print ' %(num)d, address: 0x%(address)08x, size: %(size)d' % eprefix - esize = eprefix['size'] - image, target = target[:esize], target[esize:] - if dump_images: - out = '%s.target%d.image%d.bin' % (file,t,e) - open(out,'wb').write(image) - print ' DUMPED IMAGE TO "%s"' % out - if len(target): - print "target %d: PARSE ERROR" % t - suffix = named(struct.unpack('<4H3sBI',data[:16]),'device product vendor dfu ufd len crc') - print 'usb: %(vendor)04x:%(product)04x, device: 0x%(device)04x, dfu: 0x%(dfu)04x, %(ufd)s, %(len)d, 0x%(crc)08x' % suffix - if crc != suffix['crc']: - print "CRC ERROR: computed crc32 is 0x%08x" % crc - data = data[16:] - if data: - print "PARSE ERROR" - -def build(file,targets,device=DEFAULT_DEVICE): - data = '' - for t,target in enumerate(targets): - tdata = '' - for image in target: - tdata += struct.pack('<2I',image['address'],len(image['data']))+image['data'] - tdata = struct.pack('<6sBI255s2I','Target',0,1,'ST...',len(tdata),len(target)) + tdata - data += tdata - data = struct.pack('<5sBIB','DfuSe',1,len(data)+11,len(targets)) + data - v,d=map(lambda x: int(x,0) & 0xFFFF, device.split(':',1)) - data += struct.pack('<4H3sB',0,d,v,0x011a,'UFD',16) - crc = compute_crc(data) - data += struct.pack(' and -Harald Welte . Over time, nearly complete -support of DFU 1.0, DFU 1.1 and DfuSe ("1.1a") has been added. -.SH LICENCE -.B dfu-util -is covered by the GNU General Public License (GPL), version 2 or later. -.SH COPYRIGHT -This manual page was originally written by Uwe Hermann , -and is now part of the dfu-util project. diff --git a/linux/src/dfu-util/msvc/README_msvc.txt b/linux/src/dfu-util/msvc/README_msvc.txt deleted file mode 100644 index 6e68ec6ff..000000000 --- a/linux/src/dfu-util/msvc/README_msvc.txt +++ /dev/null @@ -1,10 +0,0 @@ -# (C) Roger Meier -# (C) Pascal Schweizer -# msvc folder is GPL-2.0+, LGPL-2.1+, BSD-3-Clause or MIT license(SPDX) - -Building dfu-util native on Windows with Visual Studio - -3rd party dependencies: -- libusbx ( git clone https://github.com/libusbx/libusbx.git ) - - getopt (part of libusbx: libusbx/examples/getopt) - diff --git a/linux/src/dfu-util/msvc/dfu-suffix_2010.vcxproj b/linux/src/dfu-util/msvc/dfu-suffix_2010.vcxproj deleted file mode 100644 index 0c316c2e5..000000000 --- a/linux/src/dfu-util/msvc/dfu-suffix_2010.vcxproj +++ /dev/null @@ -1,100 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA} - dfusuffix - dfu-suffix - - - - Application - true - MultiByte - - - Application - false - true - MultiByte - - - - - - - - - - - - - $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\dll;$(LibraryPath) - $(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib - $(ExecutablePath) - - - $(ExecutablePath) - $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\dll;$(LibraryPath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - - - - Level3 - Disabled - HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - - - true - - - - - Level3 - MaxSpeed - true - true - HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - true - - - - - - - - - - - - - {a2169bc8-cf99-40bf-83f3-b0e38f7067bd} - - - {349ee8f9-7d25-4909-aaf5-ff3fade72187} - - - - - - \ No newline at end of file diff --git a/linux/src/dfu-util/msvc/dfu-util_2010.sln b/linux/src/dfu-util/msvc/dfu-util_2010.sln deleted file mode 100644 index ef797239b..000000000 --- a/linux/src/dfu-util/msvc/dfu-util_2010.sln +++ /dev/null @@ -1,54 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dfu-util", "dfu-util_2010.vcxproj", "{0E071A60-7EF2-4427-BAA8-9143CACB5BCB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{C4F8746D-B27E-4806-95E5-2052174E923B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dfu-suffix", "dfu-suffix_2010.vcxproj", "{8F7600A2-3B37-4956-B39B-A1D43EF29EDA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "getopt_2010", "..\..\libusbx\msvc\getopt_2010.vcxproj", "{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (static)", "..\..\libusbx\msvc\libusb_static_2010.vcxproj", "{349EE8F9-7D25-4909-AAF5-FF3FADE72187}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Debug|Win32.ActiveCfg = Debug|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Debug|Win32.Build.0 = Debug|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Debug|x64.ActiveCfg = Debug|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Release|Win32.ActiveCfg = Release|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Release|Win32.Build.0 = Release|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Release|x64.ActiveCfg = Release|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Debug|Win32.ActiveCfg = Debug|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Debug|Win32.Build.0 = Debug|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Debug|x64.ActiveCfg = Debug|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Release|Win32.ActiveCfg = Release|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Release|Win32.Build.0 = Release|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Release|x64.ActiveCfg = Release|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.ActiveCfg = Debug|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.Build.0 = Debug|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.ActiveCfg = Debug|x64 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.Build.0 = Debug|x64 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.ActiveCfg = Release|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.Build.0 = Release|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.ActiveCfg = Release|x64 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.Build.0 = Release|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.Build.0 = Debug|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.Build.0 = Debug|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.Build.0 = Release|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/linux/src/dfu-util/msvc/dfu-util_2010.vcxproj b/linux/src/dfu-util/msvc/dfu-util_2010.vcxproj deleted file mode 100644 index 17a8bee1b..000000000 --- a/linux/src/dfu-util/msvc/dfu-util_2010.vcxproj +++ /dev/null @@ -1,120 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB} - dfuutil - dfu-util - - - - Application - true - MultiByte - - - Application - false - true - MultiByte - - - - - - - - - - - - - $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\getopt\$(Configuration);$(LibraryPath) - $(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib - $(ExecutablePath) - - - $(ExecutablePath) - $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) - $(SolutionDir)..\$(Platform)\getopt\$(Configuration);$(LibraryPath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - - - - Level3 - Disabled - HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - - - true - - - - - - - - - Level3 - MaxSpeed - true - true - HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - true - - - copy $(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0.dll $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - - - - - - - - - - - - - - - - - - - - - - - - - - {a2169bc8-cf99-40bf-83f3-b0e38f7067bd} - - - {349ee8f9-7d25-4909-aaf5-ff3fade72187} - - - - - - \ No newline at end of file diff --git a/linux/src/dfu-util/src/Makefile.am b/linux/src/dfu-util/src/Makefile.am deleted file mode 100644 index 70179c411..000000000 --- a/linux/src/dfu-util/src/Makefile.am +++ /dev/null @@ -1,28 +0,0 @@ -AM_CFLAGS = -Wall -Wextra - -bin_PROGRAMS = dfu-util dfu-suffix dfu-prefix -dfu_util_SOURCES = main.c \ - portable.h \ - dfu_load.c \ - dfu_load.h \ - dfu_util.c \ - dfu_util.h \ - dfuse.c \ - dfuse.h \ - dfuse_mem.c \ - dfuse_mem.h \ - dfu.c \ - dfu.h \ - usb_dfu.h \ - dfu_file.c \ - dfu_file.h \ - quirks.c \ - quirks.h - -dfu_suffix_SOURCES = suffix.c \ - dfu_file.h \ - dfu_file.c - -dfu_prefix_SOURCES = prefix.c \ - dfu_file.h \ - dfu_file.c diff --git a/linux/src/dfu-util/src/dfu.c b/linux/src/dfu-util/src/dfu.c deleted file mode 100644 index 14d7673d1..000000000 --- a/linux/src/dfu-util/src/dfu.c +++ /dev/null @@ -1,357 +0,0 @@ -/* - * Low-level DFU communication routines, originally taken from - * $Id: dfu.c,v 1.3 2006/06/20 06:28:04 schmidtw Exp $ - * (part of dfu-programmer). - * - * Copyright 2005-2006 Weston Schmidt - * Copyright 2011-2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include - -#include - -#include "portable.h" -#include "dfu.h" -#include "quirks.h" - -static int dfu_timeout = 5000; /* 5 seconds - default */ - -/* - * DFU_DETACH Request (DFU Spec 1.0, Section 5.1) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * timeout - the timeout in ms the USB device should wait for a pending - * USB reset before giving up and terminating the operation - * - * returns 0 or < 0 on error - */ -int dfu_detach( libusb_device_handle *device, - const unsigned short interface, - const unsigned short timeout ) -{ - return libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_DETACH, - /* wValue */ timeout, - /* wIndex */ interface, - /* Data */ NULL, - /* wLength */ 0, - dfu_timeout ); -} - - -/* - * DFU_DNLOAD Request (DFU Spec 1.0, Section 6.1.1) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * length - the total number of bytes to transfer to the USB - * device - must be less than wTransferSize - * data - the data to transfer - * - * returns the number of bytes written or < 0 on error - */ -int dfu_download( libusb_device_handle *device, - const unsigned short interface, - const unsigned short length, - const unsigned short transaction, - unsigned char* data ) -{ - int status; - - status = libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_DNLOAD, - /* wValue */ transaction, - /* wIndex */ interface, - /* Data */ data, - /* wLength */ length, - dfu_timeout ); - return status; -} - - -/* - * DFU_UPLOAD Request (DFU Spec 1.0, Section 6.2) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * length - the maximum number of bytes to receive from the USB - * device - must be less than wTransferSize - * data - the buffer to put the received data in - * - * returns the number of bytes received or < 0 on error - */ -int dfu_upload( libusb_device_handle *device, - const unsigned short interface, - const unsigned short length, - const unsigned short transaction, - unsigned char* data ) -{ - int status; - - status = libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_UPLOAD, - /* wValue */ transaction, - /* wIndex */ interface, - /* Data */ data, - /* wLength */ length, - dfu_timeout ); - return status; -} - - -/* - * DFU_GETSTATUS Request (DFU Spec 1.0, Section 6.1.2) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * status - the data structure to be populated with the results - * - * return the number of bytes read in or < 0 on an error - */ -int dfu_get_status( struct dfu_if *dif, struct dfu_status *status ) -{ - unsigned char buffer[6]; - int result; - - /* Initialize the status data structure */ - status->bStatus = DFU_STATUS_ERROR_UNKNOWN; - status->bwPollTimeout = 0; - status->bState = STATE_DFU_ERROR; - status->iString = 0; - - result = libusb_control_transfer( dif->dev_handle, - /* bmRequestType */ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_GETSTATUS, - /* wValue */ 0, - /* wIndex */ dif->interface, - /* Data */ buffer, - /* wLength */ 6, - dfu_timeout ); - - if( 6 == result ) { - status->bStatus = buffer[0]; - if (dif->quirks & QUIRK_POLLTIMEOUT) - status->bwPollTimeout = DEFAULT_POLLTIMEOUT; - else - status->bwPollTimeout = ((0xff & buffer[3]) << 16) | - ((0xff & buffer[2]) << 8) | - (0xff & buffer[1]); - status->bState = buffer[4]; - status->iString = buffer[5]; - } - - return result; -} - - -/* - * DFU_CLRSTATUS Request (DFU Spec 1.0, Section 6.1.3) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * - * return 0 or < 0 on an error - */ -int dfu_clear_status( libusb_device_handle *device, - const unsigned short interface ) -{ - return libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT| LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_CLRSTATUS, - /* wValue */ 0, - /* wIndex */ interface, - /* Data */ NULL, - /* wLength */ 0, - dfu_timeout ); -} - - -/* - * DFU_GETSTATE Request (DFU Spec 1.0, Section 6.1.5) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * length - the maximum number of bytes to receive from the USB - * device - must be less than wTransferSize - * data - the buffer to put the received data in - * - * returns the state or < 0 on error - */ -int dfu_get_state( libusb_device_handle *device, - const unsigned short interface ) -{ - int result; - unsigned char buffer[1]; - - result = libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_GETSTATE, - /* wValue */ 0, - /* wIndex */ interface, - /* Data */ buffer, - /* wLength */ 1, - dfu_timeout ); - - /* Return the error if there is one. */ - if (result < 1) - return -1; - - /* Return the state. */ - return buffer[0]; -} - - -/* - * DFU_ABORT Request (DFU Spec 1.0, Section 6.1.4) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * - * returns 0 or < 0 on an error - */ -int dfu_abort( libusb_device_handle *device, - const unsigned short interface ) -{ - return libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_ABORT, - /* wValue */ 0, - /* wIndex */ interface, - /* Data */ NULL, - /* wLength */ 0, - dfu_timeout ); -} - - -const char* dfu_state_to_string( int state ) -{ - const char *message; - - switch (state) { - case STATE_APP_IDLE: - message = "appIDLE"; - break; - case STATE_APP_DETACH: - message = "appDETACH"; - break; - case STATE_DFU_IDLE: - message = "dfuIDLE"; - break; - case STATE_DFU_DOWNLOAD_SYNC: - message = "dfuDNLOAD-SYNC"; - break; - case STATE_DFU_DOWNLOAD_BUSY: - message = "dfuDNBUSY"; - break; - case STATE_DFU_DOWNLOAD_IDLE: - message = "dfuDNLOAD-IDLE"; - break; - case STATE_DFU_MANIFEST_SYNC: - message = "dfuMANIFEST-SYNC"; - break; - case STATE_DFU_MANIFEST: - message = "dfuMANIFEST"; - break; - case STATE_DFU_MANIFEST_WAIT_RESET: - message = "dfuMANIFEST-WAIT-RESET"; - break; - case STATE_DFU_UPLOAD_IDLE: - message = "dfuUPLOAD-IDLE"; - break; - case STATE_DFU_ERROR: - message = "dfuERROR"; - break; - default: - message = NULL; - break; - } - - return message; -} - -/* Chapter 6.1.2 */ -static const char *dfu_status_names[] = { - /* DFU_STATUS_OK */ - "No error condition is present", - /* DFU_STATUS_errTARGET */ - "File is not targeted for use by this device", - /* DFU_STATUS_errFILE */ - "File is for this device but fails some vendor-specific test", - /* DFU_STATUS_errWRITE */ - "Device is unable to write memory", - /* DFU_STATUS_errERASE */ - "Memory erase function failed", - /* DFU_STATUS_errCHECK_ERASED */ - "Memory erase check failed", - /* DFU_STATUS_errPROG */ - "Program memory function failed", - /* DFU_STATUS_errVERIFY */ - "Programmed memory failed verification", - /* DFU_STATUS_errADDRESS */ - "Cannot program memory due to received address that is out of range", - /* DFU_STATUS_errNOTDONE */ - "Received DFU_DNLOAD with wLength = 0, but device does not think that it has all data yet", - /* DFU_STATUS_errFIRMWARE */ - "Device's firmware is corrupt. It cannot return to run-time (non-DFU) operations", - /* DFU_STATUS_errVENDOR */ - "iString indicates a vendor specific error", - /* DFU_STATUS_errUSBR */ - "Device detected unexpected USB reset signalling", - /* DFU_STATUS_errPOR */ - "Device detected unexpected power on reset", - /* DFU_STATUS_errUNKNOWN */ - "Something went wrong, but the device does not know what it was", - /* DFU_STATUS_errSTALLEDPKT */ - "Device stalled an unexpected request" -}; - - -const char *dfu_status_to_string(int status) -{ - if (status > DFU_STATUS_errSTALLEDPKT) - return "INVALID"; - return dfu_status_names[status]; -} - -int dfu_abort_to_idle(struct dfu_if *dif) -{ - int ret; - struct dfu_status dst; - - ret = dfu_abort(dif->dev_handle, dif->interface); - if (ret < 0) { - errx(EX_IOERR, "Error sending dfu abort request"); - exit(1); - } - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - errx(EX_IOERR, "Error during abort get_status"); - exit(1); - } - if (dst.bState != DFU_STATE_dfuIDLE) { - errx(EX_IOERR, "Failed to enter idle state on abort"); - exit(1); - } - milli_sleep(dst.bwPollTimeout); - return ret; -} diff --git a/linux/src/dfu-util/src/dfu.h b/linux/src/dfu-util/src/dfu.h deleted file mode 100644 index 8e3caeb7b..000000000 --- a/linux/src/dfu-util/src/dfu.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * dfu-programmer - * - * $Id: dfu.h,v 1.2 2005/09/25 01:27:42 schmidtw Exp $ - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef DFU_H -#define DFU_H - -#include -#include "usb_dfu.h" - -/* DFU states */ -#define STATE_APP_IDLE 0x00 -#define STATE_APP_DETACH 0x01 -#define STATE_DFU_IDLE 0x02 -#define STATE_DFU_DOWNLOAD_SYNC 0x03 -#define STATE_DFU_DOWNLOAD_BUSY 0x04 -#define STATE_DFU_DOWNLOAD_IDLE 0x05 -#define STATE_DFU_MANIFEST_SYNC 0x06 -#define STATE_DFU_MANIFEST 0x07 -#define STATE_DFU_MANIFEST_WAIT_RESET 0x08 -#define STATE_DFU_UPLOAD_IDLE 0x09 -#define STATE_DFU_ERROR 0x0a - - -/* DFU status */ -#define DFU_STATUS_OK 0x00 -#define DFU_STATUS_ERROR_TARGET 0x01 -#define DFU_STATUS_ERROR_FILE 0x02 -#define DFU_STATUS_ERROR_WRITE 0x03 -#define DFU_STATUS_ERROR_ERASE 0x04 -#define DFU_STATUS_ERROR_CHECK_ERASED 0x05 -#define DFU_STATUS_ERROR_PROG 0x06 -#define DFU_STATUS_ERROR_VERIFY 0x07 -#define DFU_STATUS_ERROR_ADDRESS 0x08 -#define DFU_STATUS_ERROR_NOTDONE 0x09 -#define DFU_STATUS_ERROR_FIRMWARE 0x0a -#define DFU_STATUS_ERROR_VENDOR 0x0b -#define DFU_STATUS_ERROR_USBR 0x0c -#define DFU_STATUS_ERROR_POR 0x0d -#define DFU_STATUS_ERROR_UNKNOWN 0x0e -#define DFU_STATUS_ERROR_STALLEDPKT 0x0f - -/* DFU commands */ -#define DFU_DETACH 0 -#define DFU_DNLOAD 1 -#define DFU_UPLOAD 2 -#define DFU_GETSTATUS 3 -#define DFU_CLRSTATUS 4 -#define DFU_GETSTATE 5 -#define DFU_ABORT 6 - -/* DFU interface */ -#define DFU_IFF_DFU 0x0001 /* DFU Mode, (not Runtime) */ - -/* This is based off of DFU_GETSTATUS - * - * 1 unsigned byte bStatus - * 3 unsigned byte bwPollTimeout - * 1 unsigned byte bState - * 1 unsigned byte iString -*/ - -struct dfu_status { - unsigned char bStatus; - unsigned int bwPollTimeout; - unsigned char bState; - unsigned char iString; -}; - -struct dfu_if { - struct usb_dfu_func_descriptor func_dfu; - uint16_t quirks; - uint16_t busnum; - uint16_t devnum; - uint16_t vendor; - uint16_t product; - uint16_t bcdDevice; - uint8_t configuration; - uint8_t interface; - uint8_t altsetting; - uint8_t flags; - uint8_t bMaxPacketSize0; - char *alt_name; - char *serial_name; - libusb_device *dev; - libusb_device_handle *dev_handle; - struct dfu_if *next; -}; - -int dfu_detach( libusb_device_handle *device, - const unsigned short interface, - const unsigned short timeout ); -int dfu_download( libusb_device_handle *device, - const unsigned short interface, - const unsigned short length, - const unsigned short transaction, - unsigned char* data ); -int dfu_upload( libusb_device_handle *device, - const unsigned short interface, - const unsigned short length, - const unsigned short transaction, - unsigned char* data ); -int dfu_get_status( struct dfu_if *dif, - struct dfu_status *status ); -int dfu_clear_status( libusb_device_handle *device, - const unsigned short interface ); -int dfu_get_state( libusb_device_handle *device, - const unsigned short interface ); -int dfu_abort( libusb_device_handle *device, - const unsigned short interface ); -int dfu_abort_to_idle( struct dfu_if *dif); - -const char *dfu_state_to_string( int state ); - -const char *dfu_status_to_string( int status ); - -#endif /* DFU_H */ diff --git a/linux/src/dfu-util/src/dfu_file.c b/linux/src/dfu-util/src/dfu_file.c deleted file mode 100644 index 7c897d4f6..000000000 --- a/linux/src/dfu-util/src/dfu_file.c +++ /dev/null @@ -1,444 +0,0 @@ -/* - * Load or store DFU files including suffix and prefix - * - * Copyright 2014 Tormod Volden - * Copyright 2012 Stefan Schmidt - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu_file.h" - -#define DFU_SUFFIX_LENGTH 16 -#define LMDFU_PREFIX_LENGTH 8 -#define LPCDFU_PREFIX_LENGTH 16 -#define PROGRESS_BAR_WIDTH 25 -#define STDIN_CHUNK_SIZE 65536 - -static const unsigned long crc32_table[] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, - 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, - 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, - 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, - 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, - 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, - 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, - 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, - 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, - 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, - 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, - 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, - 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, - 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, - 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, - 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, - 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, - 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}; - -static uint32_t crc32_byte(uint32_t accum, uint8_t delta) -{ - return crc32_table[(accum ^ delta) & 0xff] ^ (accum >> 8); -} - -static int probe_prefix(struct dfu_file *file) -{ - uint8_t *prefix = file->firmware; - - if (file->size.total < LMDFU_PREFIX_LENGTH) - return 1; - if ((prefix[0] == 0x01) && (prefix[1] == 0x00)) { - file->prefix_type = LMDFU_PREFIX; - file->size.prefix = LMDFU_PREFIX_LENGTH; - file->lmdfu_address = 1024 * ((prefix[3] << 8) | prefix[2]); - } - else if (((prefix[0] & 0x3f) == 0x1a) && ((prefix[1] & 0x3f)== 0x3f)) { - file->prefix_type = LPCDFU_UNENCRYPTED_PREFIX; - file->size.prefix = LPCDFU_PREFIX_LENGTH; - } - - if (file->size.prefix + file->size.suffix > file->size.total) - return 1; - return 0; -} - -void dfu_progress_bar(const char *desc, unsigned long long curr, - unsigned long long max) -{ - static char buf[PROGRESS_BAR_WIDTH + 1]; - static unsigned long long last_progress = -1; - static time_t last_time; - time_t curr_time = time(NULL); - unsigned long long progress; - unsigned long long x; - - /* check for not known maximum */ - if (max < curr) - max = curr + 1; - /* make none out of none give zero */ - if (max == 0 && curr == 0) - max = 1; - - /* compute completion */ - progress = (PROGRESS_BAR_WIDTH * curr) / max; - if (progress > PROGRESS_BAR_WIDTH) - progress = PROGRESS_BAR_WIDTH; - if (progress == last_progress && - curr_time == last_time) - return; - last_progress = progress; - last_time = curr_time; - - for (x = 0; x != PROGRESS_BAR_WIDTH; x++) { - if (x < progress) - buf[x] = '='; - else - buf[x] = ' '; - } - buf[x] = 0; - - printf("\r%s\t[%s] %3lld%% %12lld bytes", desc, buf, - (100ULL * curr) / max, curr); - - if (progress == PROGRESS_BAR_WIDTH) - printf("\n%s done.\n", desc); -} - -void *dfu_malloc(size_t size) -{ - void *ptr = malloc(size); - if (ptr == NULL) - errx(EX_SOFTWARE, "Cannot allocate memory of size %d bytes", (int)size); - return (ptr); -} - -uint32_t dfu_file_write_crc(int f, uint32_t crc, const void *buf, int size) -{ - int x; - - /* compute CRC */ - for (x = 0; x != size; x++) - crc = crc32_byte(crc, ((uint8_t *)buf)[x]); - - /* write data */ - if (write(f, buf, size) != size) - err(EX_IOERR, "Could not write %d bytes to file %d", size, f); - - return (crc); -} - -void dfu_load_file(struct dfu_file *file, enum suffix_req check_suffix, enum prefix_req check_prefix) -{ - off_t offset; - int f; - int i; - int res; - - file->size.prefix = 0; - file->size.suffix = 0; - - /* default values, if no valid suffix is found */ - file->bcdDFU = 0; - file->idVendor = 0xffff; /* wildcard value */ - file->idProduct = 0xffff; /* wildcard value */ - file->bcdDevice = 0xffff; /* wildcard value */ - - /* default values, if no valid prefix is found */ - file->lmdfu_address = 0; - - free(file->firmware); - - if (!strcmp(file->name, "-")) { - int read_bytes; - -#ifdef WIN32 - _setmode( _fileno( stdin ), _O_BINARY ); -#endif - file->firmware = (uint8_t*) dfu_malloc(STDIN_CHUNK_SIZE); - read_bytes = fread(file->firmware, 1, STDIN_CHUNK_SIZE, stdin); - file->size.total = read_bytes; - while (read_bytes == STDIN_CHUNK_SIZE) { - file->firmware = (uint8_t*) realloc(file->firmware, file->size.total + STDIN_CHUNK_SIZE); - if (!file->firmware) - err(EX_IOERR, "Could not allocate firmware buffer"); - read_bytes = fread(file->firmware + file->size.total, 1, STDIN_CHUNK_SIZE, stdin); - file->size.total += read_bytes; - } - if (verbose) - printf("Read %i bytes from stdin\n", file->size.total); - /* Never require suffix when reading from stdin */ - check_suffix = MAYBE_SUFFIX; - } else { - f = open(file->name, O_RDONLY | O_BINARY); - if (f < 0) - err(EX_IOERR, "Could not open file %s for reading", file->name); - - offset = lseek(f, 0, SEEK_END); - - if ((int)offset < 0 || (int)offset != offset) - err(EX_IOERR, "File size is too big"); - - if (lseek(f, 0, SEEK_SET) != 0) - err(EX_IOERR, "Could not seek to beginning"); - - file->size.total = offset; - file->firmware = dfu_malloc(file->size.total); - - if (read(f, file->firmware, file->size.total) != file->size.total) { - err(EX_IOERR, "Could not read %d bytes from %s", - file->size.total, file->name); - } - close(f); - } - - /* Check for possible DFU file suffix by trying to parse one */ - { - uint32_t crc = 0xffffffff; - const uint8_t *dfusuffix; - int missing_suffix = 0; - const char *reason; - - if (file->size.total < DFU_SUFFIX_LENGTH) { - reason = "File too short for DFU suffix"; - missing_suffix = 1; - goto checked; - } - - dfusuffix = file->firmware + file->size.total - - DFU_SUFFIX_LENGTH; - - for (i = 0; i < file->size.total - 4; i++) - crc = crc32_byte(crc, file->firmware[i]); - - if (dfusuffix[10] != 'D' || - dfusuffix[9] != 'F' || - dfusuffix[8] != 'U') { - reason = "Invalid DFU suffix signature"; - missing_suffix = 1; - goto checked; - } - - file->dwCRC = (dfusuffix[15] << 24) + - (dfusuffix[14] << 16) + - (dfusuffix[13] << 8) + - dfusuffix[12]; - - if (file->dwCRC != crc) { - reason = "DFU suffix CRC does not match"; - missing_suffix = 1; - goto checked; - } - - /* At this point we believe we have a DFU suffix - so we require further checks to succeed */ - - file->bcdDFU = (dfusuffix[7] << 8) + dfusuffix[6]; - - if (verbose) - printf("DFU suffix version %x\n", file->bcdDFU); - - file->size.suffix = dfusuffix[11]; - - if (file->size.suffix < DFU_SUFFIX_LENGTH) { - errx(EX_IOERR, "Unsupported DFU suffix length %d", - file->size.suffix); - } - - if (file->size.suffix > file->size.total) { - errx(EX_IOERR, "Invalid DFU suffix length %d", - file->size.suffix); - } - - file->idVendor = (dfusuffix[5] << 8) + dfusuffix[4]; - file->idProduct = (dfusuffix[3] << 8) + dfusuffix[2]; - file->bcdDevice = (dfusuffix[1] << 8) + dfusuffix[0]; - -checked: - if (missing_suffix) { - if (check_suffix == NEEDS_SUFFIX) { - warnx("%s", reason); - errx(EX_IOERR, "Valid DFU suffix needed"); - } else if (check_suffix == MAYBE_SUFFIX) { - warnx("%s", reason); - warnx("A valid DFU suffix will be required in " - "a future dfu-util release!!!"); - } - } else { - if (check_suffix == NO_SUFFIX) { - errx(EX_SOFTWARE, "Please remove existing DFU suffix before adding a new one.\n"); - } - } - } - res = probe_prefix(file); - if ((res || file->size.prefix == 0) && check_prefix == NEEDS_PREFIX) - errx(EX_IOERR, "Valid DFU prefix needed"); - if (file->size.prefix && check_prefix == NO_PREFIX) - errx(EX_IOERR, "A prefix already exists, please delete it first"); - if (file->size.prefix && verbose) { - uint8_t *data = file->firmware; - if (file->prefix_type == LMDFU_PREFIX) - printf("Possible TI Stellaris DFU prefix with " - "the following properties\n" - "Address: 0x%08x\n" - "Payload length: %d\n", - file->lmdfu_address, - data[4] | (data[5] << 8) | - (data[6] << 16) | (data[7] << 14)); - else if (file->prefix_type == LPCDFU_UNENCRYPTED_PREFIX) - printf("Possible unencrypted NXP LPC DFU prefix with " - "the following properties\n" - "Payload length: %d kiByte\n", - data[2] >>1 | (data[3] << 7) ); - else - errx(EX_IOERR, "Unknown DFU prefix type"); - } -} - -void dfu_store_file(struct dfu_file *file, int write_suffix, int write_prefix) -{ - uint32_t crc = 0xffffffff; - int f; - - f = open(file->name, O_WRONLY | O_BINARY | O_TRUNC | O_CREAT, 0666); - if (f < 0) - err(EX_IOERR, "Could not open file %s for writing", file->name); - - /* write prefix, if any */ - if (write_prefix) { - if (file->prefix_type == LMDFU_PREFIX) { - uint8_t lmdfu_prefix[LMDFU_PREFIX_LENGTH]; - uint32_t addr = file->lmdfu_address / 1024; - - /* lmdfu_dfu_prefix payload length excludes prefix and suffix */ - uint32_t len = file->size.total - - file->size.prefix - file->size.suffix; - - lmdfu_prefix[0] = 0x01; /* STELLARIS_DFU_PROG */ - lmdfu_prefix[1] = 0x00; /* Reserved */ - lmdfu_prefix[2] = (uint8_t)(addr & 0xff); - lmdfu_prefix[3] = (uint8_t)(addr >> 8); - lmdfu_prefix[4] = (uint8_t)(len & 0xff); - lmdfu_prefix[5] = (uint8_t)(len >> 8) & 0xff; - lmdfu_prefix[6] = (uint8_t)(len >> 16) & 0xff; - lmdfu_prefix[7] = (uint8_t)(len >> 24); - - crc = dfu_file_write_crc(f, crc, lmdfu_prefix, LMDFU_PREFIX_LENGTH); - } - if (file->prefix_type == LPCDFU_UNENCRYPTED_PREFIX) { - uint8_t lpcdfu_prefix[LPCDFU_PREFIX_LENGTH] = {0}; - int i; - - /* Payload is firmware and prefix rounded to 512 bytes */ - uint32_t len = (file->size.total - file->size.suffix + 511) /512; - - lpcdfu_prefix[0] = 0x1a; /* Unencypted*/ - lpcdfu_prefix[1] = 0x3f; /* Reserved */ - lpcdfu_prefix[2] = (uint8_t)(len & 0xff); - lpcdfu_prefix[3] = (uint8_t)((len >> 8) & 0xff); - for (i = 12; i < LPCDFU_PREFIX_LENGTH; i++) - lpcdfu_prefix[i] = 0xff; - - crc = dfu_file_write_crc(f, crc, lpcdfu_prefix, LPCDFU_PREFIX_LENGTH); - } - } - /* write firmware binary */ - crc = dfu_file_write_crc(f, crc, file->firmware + file->size.prefix, - file->size.total - file->size.prefix - file->size.suffix); - - /* write suffix, if any */ - if (write_suffix) { - uint8_t dfusuffix[DFU_SUFFIX_LENGTH]; - - dfusuffix[0] = file->bcdDevice & 0xff; - dfusuffix[1] = file->bcdDevice >> 8; - dfusuffix[2] = file->idProduct & 0xff; - dfusuffix[3] = file->idProduct >> 8; - dfusuffix[4] = file->idVendor & 0xff; - dfusuffix[5] = file->idVendor >> 8; - dfusuffix[6] = file->bcdDFU & 0xff; - dfusuffix[7] = file->bcdDFU >> 8; - dfusuffix[8] = 'U'; - dfusuffix[9] = 'F'; - dfusuffix[10] = 'D'; - dfusuffix[11] = DFU_SUFFIX_LENGTH; - - crc = dfu_file_write_crc(f, crc, dfusuffix, - DFU_SUFFIX_LENGTH - 4); - - dfusuffix[12] = crc; - dfusuffix[13] = crc >> 8; - dfusuffix[14] = crc >> 16; - dfusuffix[15] = crc >> 24; - - crc = dfu_file_write_crc(f, crc, dfusuffix + 12, 4); - } - close(f); -} - -void show_suffix_and_prefix(struct dfu_file *file) -{ - if (file->size.prefix == LMDFU_PREFIX_LENGTH) { - printf("The file %s contains a TI Stellaris DFU prefix with the following properties:\n", file->name); - printf("Address:\t0x%08x\n", file->lmdfu_address); - } else if (file->size.prefix == LPCDFU_PREFIX_LENGTH) { - uint8_t * prefix = file->firmware; - printf("The file %s contains a NXP unencrypted LPC DFU prefix with the following properties:\n", file->name); - printf("Size:\t%5d kiB\n", prefix[2]>>1|prefix[3]<<7); - } else if (file->size.prefix != 0) { - printf("The file %s contains an unknown prefix\n", file->name); - } - if (file->size.suffix > 0) { - printf("The file %s contains a DFU suffix with the following properties:\n", file->name); - printf("BCD device:\t0x%04X\n", file->bcdDevice); - printf("Product ID:\t0x%04X\n",file->idProduct); - printf("Vendor ID:\t0x%04X\n", file->idVendor); - printf("BCD DFU:\t0x%04X\n", file->bcdDFU); - printf("Length:\t\t%i\n", file->size.suffix); - printf("CRC:\t\t0x%08X\n", file->dwCRC); - } -} diff --git a/linux/src/dfu-util/src/dfu_file.h b/linux/src/dfu-util/src/dfu_file.h deleted file mode 100644 index abebd44f4..000000000 --- a/linux/src/dfu-util/src/dfu_file.h +++ /dev/null @@ -1,60 +0,0 @@ - -#ifndef DFU_FILE_H -#define DFU_FILE_H - -#include - -struct dfu_file { - /* File name */ - const char *name; - /* Pointer to file loaded into memory */ - uint8_t *firmware; - /* Different sizes */ - struct { - int total; - int prefix; - int suffix; - } size; - /* From prefix fields */ - uint32_t lmdfu_address; - /* From prefix fields */ - uint32_t prefix_type; - - /* From DFU suffix fields */ - uint32_t dwCRC; - uint16_t bcdDFU; - uint16_t idVendor; - uint16_t idProduct; - uint16_t bcdDevice; -}; - -enum suffix_req { - NO_SUFFIX, - NEEDS_SUFFIX, - MAYBE_SUFFIX -}; - -enum prefix_req { - NO_PREFIX, - NEEDS_PREFIX, - MAYBE_PREFIX -}; - -enum prefix_type { - ZERO_PREFIX, - LMDFU_PREFIX, - LPCDFU_UNENCRYPTED_PREFIX -}; - -extern int verbose; - -void dfu_load_file(struct dfu_file *file, enum suffix_req check_suffix, enum prefix_req check_prefix); -void dfu_store_file(struct dfu_file *file, int write_suffix, int write_prefix); - -void dfu_progress_bar(const char *desc, unsigned long long curr, - unsigned long long max); -void *dfu_malloc(size_t size); -uint32_t dfu_file_write_crc(int f, uint32_t crc, const void *buf, int size); -void show_suffix_and_prefix(struct dfu_file *file); - -#endif /* DFU_FILE_H */ diff --git a/linux/src/dfu-util/src/dfu_load.c b/linux/src/dfu-util/src/dfu_load.c deleted file mode 100644 index 64f7009df..000000000 --- a/linux/src/dfu-util/src/dfu_load.c +++ /dev/null @@ -1,196 +0,0 @@ -/* - * DFU transfer routines - * - * This is supposed to be a general DFU implementation, as specified in the - * USB DFU 1.0 and 1.1 specification. - * - * The code was originally intended to interface with a USB device running the - * "sam7dfu" firmware (see http://www.openpcd.org/) on an AT91SAM7 processor. - * - * Copyright 2007-2008 Harald Welte - * Copyright 2013 Hans Petter Selasky - * Copyright 2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include - -#include - -#include "portable.h" -#include "dfu.h" -#include "usb_dfu.h" -#include "dfu_file.h" -#include "dfu_load.h" -#include "quirks.h" - -int dfuload_do_upload(struct dfu_if *dif, int xfer_size, - int expected_size, int fd) -{ - int total_bytes = 0; - unsigned short transaction = 0; - unsigned char *buf; - int ret; - - buf = dfu_malloc(xfer_size); - - printf("Copying data from DFU device to PC\n"); - dfu_progress_bar("Upload", 0, 1); - - while (1) { - int rc; - rc = dfu_upload(dif->dev_handle, dif->interface, - xfer_size, transaction++, buf); - if (rc < 0) { - warnx("Error during upload"); - ret = rc; - goto out_free; - } - - dfu_file_write_crc(fd, 0, buf, rc); - total_bytes += rc; - - if (total_bytes < 0) - errx(EX_SOFTWARE, "Received too many bytes (wraparound)"); - - if (rc < xfer_size) { - /* last block, return */ - ret = total_bytes; - break; - } - dfu_progress_bar("Upload", total_bytes, expected_size); - } - ret = 0; - -out_free: - dfu_progress_bar("Upload", total_bytes, total_bytes); - if (total_bytes == 0) - printf("\nFailed.\n"); - free(buf); - if (verbose) - printf("Received a total of %i bytes\n", total_bytes); - if (expected_size != 0 && total_bytes != expected_size) - errx(EX_SOFTWARE, "Unexpected number of bytes uploaded from device"); - return ret; -} - -int dfuload_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file) -{ - int bytes_sent; - int expected_size; - unsigned char *buf; - unsigned short transaction = 0; - struct dfu_status dst; - int ret; - - printf("Copying data from PC to DFU device\n"); - - buf = file->firmware; - expected_size = file->size.total - file->size.suffix; - bytes_sent = 0; - - dfu_progress_bar("Download", 0, 1); - while (bytes_sent < expected_size) { - int bytes_left; - int chunk_size; - - bytes_left = expected_size - bytes_sent; - if (bytes_left < xfer_size) - chunk_size = bytes_left; - else - chunk_size = xfer_size; - - ret = dfu_download(dif->dev_handle, dif->interface, - chunk_size, transaction++, chunk_size ? buf : NULL); - if (ret < 0) { - warnx("Error during download"); - goto out; - } - bytes_sent += chunk_size; - buf += chunk_size; - - do { - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - errx(EX_IOERR, "Error during download get_status"); - goto out; - } - - if (dst.bState == DFU_STATE_dfuDNLOAD_IDLE || - dst.bState == DFU_STATE_dfuERROR) - break; - - /* Wait while device executes flashing */ - milli_sleep(dst.bwPollTimeout); - - } while (1); - if (dst.bStatus != DFU_STATUS_OK) { - printf(" failed!\n"); - printf("state(%u) = %s, status(%u) = %s\n", dst.bState, - dfu_state_to_string(dst.bState), dst.bStatus, - dfu_status_to_string(dst.bStatus)); - ret = -1; - goto out; - } - dfu_progress_bar("Download", bytes_sent, bytes_sent + bytes_left); - } - - /* send one zero sized download request to signalize end */ - ret = dfu_download(dif->dev_handle, dif->interface, - 0, transaction, NULL); - if (ret < 0) { - errx(EX_IOERR, "Error sending completion packet"); - goto out; - } - - dfu_progress_bar("Download", bytes_sent, bytes_sent); - - if (verbose) - printf("Sent a total of %i bytes\n", bytes_sent); - -get_status: - /* Transition to MANIFEST_SYNC state */ - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - warnx("unable to read DFU status after completion"); - goto out; - } - printf("state(%u) = %s, status(%u) = %s\n", dst.bState, - dfu_state_to_string(dst.bState), dst.bStatus, - dfu_status_to_string(dst.bStatus)); - - milli_sleep(dst.bwPollTimeout); - - /* FIXME: deal correctly with ManifestationTolerant=0 / WillDetach bits */ - switch (dst.bState) { - case DFU_STATE_dfuMANIFEST_SYNC: - case DFU_STATE_dfuMANIFEST: - /* some devices (e.g. TAS1020b) need some time before we - * can obtain the status */ - milli_sleep(1000); - goto get_status; - break; - case DFU_STATE_dfuIDLE: - break; - } - printf("Done!\n"); - -out: - return bytes_sent; -} diff --git a/linux/src/dfu-util/src/dfu_load.h b/linux/src/dfu-util/src/dfu_load.h deleted file mode 100644 index be23e9b4f..000000000 --- a/linux/src/dfu-util/src/dfu_load.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef DFU_LOAD_H -#define DFU_LOAD_H - -int dfuload_do_upload(struct dfu_if *dif, int xfer_size, int expected_size, int fd); -int dfuload_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file); - -#endif /* DFU_LOAD_H */ diff --git a/linux/src/dfu-util/src/dfu_util.c b/linux/src/dfu-util/src/dfu_util.c deleted file mode 100644 index b94c7ccd3..000000000 --- a/linux/src/dfu-util/src/dfu_util.c +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Functions for detecting DFU USB entities - * - * Written by Harald Welte - * Copyright 2007-2008 by OpenMoko, Inc. - * Copyright 2013 Hans Petter Selasky - * - * Based on existing code of dfu-programmer-0.4 - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu.h" -#include "usb_dfu.h" -#include "dfu_file.h" -#include "dfu_load.h" -#include "dfu_util.h" -#include "dfuse.h" -#include "quirks.h" - -#ifdef HAVE_USBPATH_H -#include -#endif - -/* - * Look for a descriptor in a concatenated descriptor list. Will - * return upon the first match of the given descriptor type. Returns length of - * found descriptor, limited to res_size - */ -static int find_descriptor(const uint8_t *desc_list, int list_len, - uint8_t desc_type, void *res_buf, int res_size) -{ - int p = 0; - - if (list_len < 2) - return (-1); - - while (p + 1 < list_len) { - int desclen; - - desclen = (int) desc_list[p]; - if (desclen == 0) { - warnx("Invalid descriptor list"); - return -1; - } - if (desc_list[p + 1] == desc_type) { - if (desclen > res_size) - desclen = res_size; - if (p + desclen > list_len) - desclen = list_len - p; - memcpy(res_buf, &desc_list[p], desclen); - return desclen; - } - p += (int) desc_list[p]; - } - return -1; -} - -static void probe_configuration(libusb_device *dev, struct libusb_device_descriptor *desc) -{ - struct usb_dfu_func_descriptor func_dfu; - libusb_device_handle *devh; - struct dfu_if *pdfu; - struct libusb_config_descriptor *cfg; - const struct libusb_interface_descriptor *intf; - const struct libusb_interface *uif; - char alt_name[MAX_DESC_STR_LEN + 1]; - char serial_name[MAX_DESC_STR_LEN + 1]; - int cfg_idx; - int intf_idx; - int alt_idx; - int ret; - int has_dfu; - - for (cfg_idx = 0; cfg_idx != desc->bNumConfigurations; cfg_idx++) { - memset(&func_dfu, 0, sizeof(func_dfu)); - has_dfu = 0; - - ret = libusb_get_config_descriptor(dev, cfg_idx, &cfg); - if (ret != 0) - return; - if (match_config_index > -1 && match_config_index != cfg->bConfigurationValue) { - libusb_free_config_descriptor(cfg); - continue; - } - - /* - * In some cases, noticably FreeBSD if uid != 0, - * the configuration descriptors are empty - */ - if (!cfg) - return; - - ret = find_descriptor(cfg->extra, cfg->extra_length, - USB_DT_DFU, &func_dfu, sizeof(func_dfu)); - if (ret > -1) - goto found_dfu; - - for (intf_idx = 0; intf_idx < cfg->bNumInterfaces; - intf_idx++) { - uif = &cfg->interface[intf_idx]; - if (!uif) - break; - - for (alt_idx = 0; alt_idx < cfg->interface[intf_idx].num_altsetting; - alt_idx++) { - intf = &uif->altsetting[alt_idx]; - - ret = find_descriptor(intf->extra, intf->extra_length, USB_DT_DFU, - &func_dfu, sizeof(func_dfu)); - if (ret > -1) - goto found_dfu; - - if (intf->bInterfaceClass != 0xfe || - intf->bInterfaceSubClass != 1) - continue; - - has_dfu = 1; - } - } - if (has_dfu) { - /* - * Finally try to retrieve it requesting the - * device directly This is not supported on - * all devices for non-standard types - */ - if (libusb_open(dev, &devh) == 0) { - ret = libusb_get_descriptor(devh, USB_DT_DFU, 0, - (void *)&func_dfu, sizeof(func_dfu)); - libusb_close(devh); - if (ret > -1) - goto found_dfu; - } - warnx("Device has DFU interface, " - "but has no DFU functional descriptor"); - - /* fake version 1.0 */ - func_dfu.bLength = 7; - func_dfu.bcdDFUVersion = libusb_cpu_to_le16(0x0100); - goto found_dfu; - } - libusb_free_config_descriptor(cfg); - continue; - -found_dfu: - if (func_dfu.bLength == 7) { - printf("Deducing device DFU version from functional descriptor " - "length\n"); - func_dfu.bcdDFUVersion = libusb_cpu_to_le16(0x0100); - } else if (func_dfu.bLength < 9) { - printf("Error obtaining DFU functional descriptor\n"); - printf("Please report this as a bug!\n"); - printf("Warning: Assuming DFU version 1.0\n"); - func_dfu.bcdDFUVersion = libusb_cpu_to_le16(0x0100); - printf("Warning: Transfer size can not be detected\n"); - func_dfu.wTransferSize = 0; - } - - for (intf_idx = 0; intf_idx < cfg->bNumInterfaces; - intf_idx++) { - if (match_iface_index > -1 && match_iface_index != intf_idx) - continue; - - uif = &cfg->interface[intf_idx]; - if (!uif) - break; - - for (alt_idx = 0; - alt_idx < uif->num_altsetting; alt_idx++) { - int dfu_mode; - - intf = &uif->altsetting[alt_idx]; - - if (intf->bInterfaceClass != 0xfe || - intf->bInterfaceSubClass != 1) - continue; - - dfu_mode = (intf->bInterfaceProtocol == 2); - /* e.g. DSO Nano has bInterfaceProtocol 0 instead of 2 */ - if (func_dfu.bcdDFUVersion == 0x011a && intf->bInterfaceProtocol == 0) - dfu_mode = 1; - - if (dfu_mode && - match_iface_alt_index > -1 && match_iface_alt_index != alt_idx) - continue; - - if (dfu_mode) { - if ((match_vendor_dfu >= 0 && match_vendor_dfu != desc->idVendor) || - (match_product_dfu >= 0 && match_product_dfu != desc->idProduct)) { - continue; - } - } else { - if ((match_vendor >= 0 && match_vendor != desc->idVendor) || - (match_product >= 0 && match_product != desc->idProduct)) { - continue; - } - } - - if (libusb_open(dev, &devh)) { - warnx("Cannot open DFU device %04x:%04x", desc->idVendor, desc->idProduct); - break; - } - if (intf->iInterface != 0) - ret = libusb_get_string_descriptor_ascii(devh, - intf->iInterface, (void *)alt_name, MAX_DESC_STR_LEN); - else - ret = -1; - if (ret < 1) - strcpy(alt_name, "UNKNOWN"); - if (desc->iSerialNumber != 0) - ret = libusb_get_string_descriptor_ascii(devh, - desc->iSerialNumber, (void *)serial_name, MAX_DESC_STR_LEN); - else - ret = -1; - if (ret < 1) - strcpy(serial_name, "UNKNOWN"); - libusb_close(devh); - - if (dfu_mode && - match_iface_alt_name != NULL && strcmp(alt_name, match_iface_alt_name)) - continue; - - if (dfu_mode) { - if (match_serial_dfu != NULL && strcmp(match_serial_dfu, serial_name)) - continue; - } else { - if (match_serial != NULL && strcmp(match_serial, serial_name)) - continue; - } - - pdfu = dfu_malloc(sizeof(*pdfu)); - - memset(pdfu, 0, sizeof(*pdfu)); - - pdfu->func_dfu = func_dfu; - pdfu->dev = libusb_ref_device(dev); - pdfu->quirks = get_quirks(desc->idVendor, - desc->idProduct, desc->bcdDevice); - pdfu->vendor = desc->idVendor; - pdfu->product = desc->idProduct; - pdfu->bcdDevice = desc->bcdDevice; - pdfu->configuration = cfg->bConfigurationValue; - pdfu->interface = intf->bInterfaceNumber; - pdfu->altsetting = intf->bAlternateSetting; - pdfu->devnum = libusb_get_device_address(dev); - pdfu->busnum = libusb_get_bus_number(dev); - pdfu->alt_name = strdup(alt_name); - if (pdfu->alt_name == NULL) - errx(EX_SOFTWARE, "Out of memory"); - pdfu->serial_name = strdup(serial_name); - if (pdfu->serial_name == NULL) - errx(EX_SOFTWARE, "Out of memory"); - if (dfu_mode) - pdfu->flags |= DFU_IFF_DFU; - if (pdfu->quirks & QUIRK_FORCE_DFU11) { - pdfu->func_dfu.bcdDFUVersion = - libusb_cpu_to_le16(0x0110); - } - pdfu->bMaxPacketSize0 = desc->bMaxPacketSize0; - - /* queue into list */ - pdfu->next = dfu_root; - dfu_root = pdfu; - } - } - libusb_free_config_descriptor(cfg); - } -} - -void probe_devices(libusb_context *ctx) -{ - libusb_device **list; - ssize_t num_devs; - ssize_t i; - - num_devs = libusb_get_device_list(ctx, &list); - for (i = 0; i < num_devs; ++i) { - struct libusb_device_descriptor desc; - struct libusb_device *dev = list[i]; - - if (match_bus > -1 && match_bus != libusb_get_bus_number(dev)) - continue; - if (match_device > -1 && match_device != libusb_get_device_address(dev)) - continue; - if (libusb_get_device_descriptor(dev, &desc)) - continue; - probe_configuration(dev, &desc); - } - libusb_free_device_list(list, 0); -} - -void disconnect_devices(void) -{ - struct dfu_if *pdfu; - struct dfu_if *prev = NULL; - - for (pdfu = dfu_root; pdfu != NULL; pdfu = pdfu->next) { - free(prev); - libusb_unref_device(pdfu->dev); - free(pdfu->alt_name); - free(pdfu->serial_name); - prev = pdfu; - } - free(prev); - dfu_root = NULL; -} - -void print_dfu_if(struct dfu_if *dfu_if) -{ - printf("Found %s: [%04x:%04x] ver=%04x, devnum=%u, cfg=%u, intf=%u, " - "alt=%u, name=\"%s\", serial=\"%s\"\n", - dfu_if->flags & DFU_IFF_DFU ? "DFU" : "Runtime", - dfu_if->vendor, dfu_if->product, - dfu_if->bcdDevice, dfu_if->devnum, - dfu_if->configuration, dfu_if->interface, - dfu_if->altsetting, dfu_if->alt_name, - dfu_if->serial_name); -} - -/* Walk the device tree and print out DFU devices */ -void list_dfu_interfaces(void) -{ - struct dfu_if *pdfu; - - for (pdfu = dfu_root; pdfu != NULL; pdfu = pdfu->next) - print_dfu_if(pdfu); -} diff --git a/linux/src/dfu-util/src/dfu_util.h b/linux/src/dfu-util/src/dfu_util.h deleted file mode 100644 index fc0c19dca..000000000 --- a/linux/src/dfu-util/src/dfu_util.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef DFU_UTIL_H -#define DFU_UTIL_H - -/* USB string descriptor should contain max 126 UTF-16 characters - * but 253 would even accomodate any UTF-8 encoding */ -#define MAX_DESC_STR_LEN 253 - -enum mode { - MODE_NONE, - MODE_VERSION, - MODE_LIST, - MODE_DETACH, - MODE_UPLOAD, - MODE_DOWNLOAD -}; - -extern struct dfu_if *dfu_root; -extern int match_bus; -extern int match_device; -extern int match_vendor; -extern int match_product; -extern int match_vendor_dfu; -extern int match_product_dfu; -extern int match_config_index; -extern int match_iface_index; -extern int match_iface_alt_index; -extern const char *match_iface_alt_name; -extern const char *match_serial; -extern const char *match_serial_dfu; - -void probe_devices(libusb_context *); -void disconnect_devices(void); -void print_dfu_if(struct dfu_if *); -void list_dfu_interfaces(void); - -#endif /* DFU_UTIL_H */ diff --git a/linux/src/dfu-util/src/dfuse.c b/linux/src/dfu-util/src/dfuse.c deleted file mode 100644 index fce29fed6..000000000 --- a/linux/src/dfu-util/src/dfuse.c +++ /dev/null @@ -1,652 +0,0 @@ -/* - * DfuSe specific functions - * - * This implements the ST Microsystems DFU extensions (DfuSe) - * as per the DfuSe 1.1a specification (ST documents AN3156, AN2606) - * The DfuSe file format is described in ST document UM0391. - * - * Copyright 2010-2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include - -#include "portable.h" -#include "dfu.h" -#include "usb_dfu.h" -#include "dfu_file.h" -#include "dfuse.h" -#include "dfuse_mem.h" - -#define DFU_TIMEOUT 5000 - -extern int verbose; -static unsigned int last_erased_page = 1; /* non-aligned value, won't match */ -static struct memsegment *mem_layout; -static unsigned int dfuse_address = 0; -static unsigned int dfuse_length = 0; -static int dfuse_force = 0; -static int dfuse_leave = 0; -static int dfuse_unprotect = 0; -static int dfuse_mass_erase = 0; - -unsigned int quad2uint(unsigned char *p) -{ - return (*p + (*(p + 1) << 8) + (*(p + 2) << 16) + (*(p + 3) << 24)); -} - -void dfuse_parse_options(const char *options) -{ - char *end; - const char *endword; - unsigned int number; - - /* address, possibly empty, must be first */ - if (*options != ':') { - endword = strchr(options, ':'); - if (!endword) - endword = options + strlen(options); /* GNU strchrnul */ - - number = strtoul(options, &end, 0); - if (end == endword) { - dfuse_address = number; - } else { - errx(EX_IOERR, "Invalid dfuse address: %s", options); - } - options = endword; - } - - while (*options) { - if (*options == ':') { - options++; - continue; - } - endword = strchr(options, ':'); - if (!endword) - endword = options + strlen(options); - - if (!strncmp(options, "force", endword - options)) { - dfuse_force++; - options += 5; - continue; - } - if (!strncmp(options, "leave", endword - options)) { - dfuse_leave = 1; - options += 5; - continue; - } - if (!strncmp(options, "unprotect", endword - options)) { - dfuse_unprotect = 1; - options += 9; - continue; - } - if (!strncmp(options, "mass-erase", endword - options)) { - dfuse_mass_erase = 1; - options += 10; - continue; - } - - /* any valid number is interpreted as upload length */ - number = strtoul(options, &end, 0); - if (end == endword) { - dfuse_length = number; - } else { - errx(EX_IOERR, "Invalid dfuse modifier: %s", options); - } - options = endword; - } -} - -/* DFU_UPLOAD request for DfuSe 1.1a */ -int dfuse_upload(struct dfu_if *dif, const unsigned short length, - unsigned char *data, unsigned short transaction) -{ - int status; - - status = libusb_control_transfer(dif->dev_handle, - /* bmRequestType */ LIBUSB_ENDPOINT_IN | - LIBUSB_REQUEST_TYPE_CLASS | - LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_UPLOAD, - /* wValue */ transaction, - /* wIndex */ dif->interface, - /* Data */ data, - /* wLength */ length, - DFU_TIMEOUT); - if (status < 0) { - errx(EX_IOERR, "%s: libusb_control_msg returned %d", - __FUNCTION__, status); - } - return status; -} - -/* DFU_DNLOAD request for DfuSe 1.1a */ -int dfuse_download(struct dfu_if *dif, const unsigned short length, - unsigned char *data, unsigned short transaction) -{ - int status; - - status = libusb_control_transfer(dif->dev_handle, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT | - LIBUSB_REQUEST_TYPE_CLASS | - LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_DNLOAD, - /* wValue */ transaction, - /* wIndex */ dif->interface, - /* Data */ data, - /* wLength */ length, - DFU_TIMEOUT); - if (status < 0) { - errx(EX_IOERR, "%s: libusb_control_transfer returned %d", - __FUNCTION__, status); - } - return status; -} - -/* DfuSe only commands */ -/* Leaves the device in dfuDNLOAD-IDLE state */ -int dfuse_special_command(struct dfu_if *dif, unsigned int address, - enum dfuse_command command) -{ - const char* dfuse_command_name[] = { "SET_ADDRESS" , "ERASE_PAGE", - "MASS_ERASE", "READ_UNPROTECT"}; - unsigned char buf[5]; - int length; - int ret; - struct dfu_status dst; - int firstpoll = 1; - - if (command == ERASE_PAGE) { - struct memsegment *segment; - int page_size; - - segment = find_segment(mem_layout, address); - if (!segment || !(segment->memtype & DFUSE_ERASABLE)) { - errx(EX_IOERR, "Page at 0x%08x can not be erased", - address); - } - page_size = segment->pagesize; - if (verbose > 1) - printf("Erasing page size %i at address 0x%08x, page " - "starting at 0x%08x\n", page_size, address, - address & ~(page_size - 1)); - buf[0] = 0x41; /* Erase command */ - length = 5; - last_erased_page = address & ~(page_size - 1); - } else if (command == SET_ADDRESS) { - if (verbose > 2) - printf(" Setting address pointer to 0x%08x\n", - address); - buf[0] = 0x21; /* Set Address Pointer command */ - length = 5; - } else if (command == MASS_ERASE) { - buf[0] = 0x41; /* Mass erase command when length = 1 */ - length = 1; - } else if (command == READ_UNPROTECT) { - buf[0] = 0x92; - length = 1; - } else { - errx(EX_IOERR, "Non-supported special command %d", command); - } - buf[1] = address & 0xff; - buf[2] = (address >> 8) & 0xff; - buf[3] = (address >> 16) & 0xff; - buf[4] = (address >> 24) & 0xff; - - ret = dfuse_download(dif, length, buf, 0); - if (ret < 0) { - errx(EX_IOERR, "Error during special command \"%s\" download", - dfuse_command_name[command]); - } - do { - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - errx(EX_IOERR, "Error during special command \"%s\" get_status", - dfuse_command_name[command]); - } - if (firstpoll) { - firstpoll = 0; - if (dst.bState != DFU_STATE_dfuDNBUSY) { - printf("state(%u) = %s, status(%u) = %s\n", dst.bState, - dfu_state_to_string(dst.bState), dst.bStatus, - dfu_status_to_string(dst.bStatus)); - errx(EX_IOERR, "Wrong state after command \"%s\" download", - dfuse_command_name[command]); - } - } - /* wait while command is executed */ - if (verbose) - printf(" Poll timeout %i ms\n", dst.bwPollTimeout); - milli_sleep(dst.bwPollTimeout); - if (command == READ_UNPROTECT) - return ret; - } while (dst.bState == DFU_STATE_dfuDNBUSY); - - if (dst.bStatus != DFU_STATUS_OK) { - errx(EX_IOERR, "%s not correctly executed", - dfuse_command_name[command]); - } - return ret; -} - -int dfuse_dnload_chunk(struct dfu_if *dif, unsigned char *data, int size, - int transaction) -{ - int bytes_sent; - struct dfu_status dst; - int ret; - - ret = dfuse_download(dif, size, size ? data : NULL, transaction); - if (ret < 0) { - errx(EX_IOERR, "Error during download"); - return ret; - } - bytes_sent = ret; - - do { - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - errx(EX_IOERR, "Error during download get_status"); - return ret; - } - milli_sleep(dst.bwPollTimeout); - } while (dst.bState != DFU_STATE_dfuDNLOAD_IDLE && - dst.bState != DFU_STATE_dfuERROR && - dst.bState != DFU_STATE_dfuMANIFEST); - - if (dst.bState == DFU_STATE_dfuMANIFEST) - printf("Transitioning to dfuMANIFEST state\n"); - - if (dst.bStatus != DFU_STATUS_OK) { - printf(" failed!\n"); - printf("state(%u) = %s, status(%u) = %s\n", dst.bState, - dfu_state_to_string(dst.bState), dst.bStatus, - dfu_status_to_string(dst.bStatus)); - return -1; - } - return bytes_sent; -} - -int dfuse_do_upload(struct dfu_if *dif, int xfer_size, int fd, - const char *dfuse_options) -{ - int total_bytes = 0; - int upload_limit = 0; - unsigned char *buf; - int transaction; - int ret; - - buf = dfu_malloc(xfer_size); - - if (dfuse_options) - dfuse_parse_options(dfuse_options); - if (dfuse_length) - upload_limit = dfuse_length; - if (dfuse_address) { - struct memsegment *segment; - - mem_layout = parse_memory_layout((char *)dif->alt_name); - if (!mem_layout) - errx(EX_IOERR, "Failed to parse memory layout"); - - segment = find_segment(mem_layout, dfuse_address); - if (!dfuse_force && - (!segment || !(segment->memtype & DFUSE_READABLE))) - errx(EX_IOERR, "Page at 0x%08x is not readable", - dfuse_address); - - if (!upload_limit) { - upload_limit = segment->end - dfuse_address + 1; - printf("Limiting upload to end of memory segment, " - "%i bytes\n", upload_limit); - } - dfuse_special_command(dif, dfuse_address, SET_ADDRESS); - dfu_abort_to_idle(dif); - } else { - /* Boot loader decides the start address, unknown to us */ - /* Use a short length to lower risk of running out of bounds */ - if (!upload_limit) - upload_limit = 0x4000; - printf("Limiting default upload to %i bytes\n", upload_limit); - } - - dfu_progress_bar("Upload", 0, 1); - - transaction = 2; - while (1) { - int rc; - - /* last chunk can be smaller than original xfer_size */ - if (upload_limit - total_bytes < xfer_size) - xfer_size = upload_limit - total_bytes; - rc = dfuse_upload(dif, xfer_size, buf, transaction++); - if (rc < 0) { - ret = rc; - goto out_free; - } - - dfu_file_write_crc(fd, 0, buf, rc); - total_bytes += rc; - - if (total_bytes < 0) - errx(EX_SOFTWARE, "Received too many bytes"); - - if (rc < xfer_size || total_bytes >= upload_limit) { - /* last block, return successfully */ - ret = total_bytes; - break; - } - dfu_progress_bar("Upload", total_bytes, upload_limit); - } - - dfu_progress_bar("Upload", total_bytes, total_bytes); - - dfu_abort_to_idle(dif); - if (dfuse_leave) { - dfuse_special_command(dif, dfuse_address, SET_ADDRESS); - dfuse_dnload_chunk(dif, NULL, 0, 2); /* Zero-size */ - } - - out_free: - free(buf); - - return ret; -} - -/* Writes an element of any size to the device, taking care of page erases */ -/* returns 0 on success, otherwise -EINVAL */ -int dfuse_dnload_element(struct dfu_if *dif, unsigned int dwElementAddress, - unsigned int dwElementSize, unsigned char *data, - int xfer_size) -{ - int p; - int ret; - struct memsegment *segment; - - /* Check at least that we can write to the last address */ - segment = - find_segment(mem_layout, dwElementAddress + dwElementSize - 1); - if (!segment || !(segment->memtype & DFUSE_WRITEABLE)) { - errx(EX_IOERR, "Last page at 0x%08x is not writeable", - dwElementAddress + dwElementSize - 1); - } - - dfu_progress_bar("Download", 0, 1); - - for (p = 0; p < (int)dwElementSize; p += xfer_size) { - int page_size; - unsigned int erase_address; - unsigned int address = dwElementAddress + p; - int chunk_size = xfer_size; - - segment = find_segment(mem_layout, address); - if (!segment || !(segment->memtype & DFUSE_WRITEABLE)) { - errx(EX_IOERR, "Page at 0x%08x is not writeable", - address); - } - page_size = segment->pagesize; - - /* check if this is the last chunk */ - if (p + chunk_size > (int)dwElementSize) - chunk_size = dwElementSize - p; - - /* Erase only for flash memory downloads */ - if ((segment->memtype & DFUSE_ERASABLE) && !dfuse_mass_erase) { - /* erase all involved pages */ - for (erase_address = address; - erase_address < address + chunk_size; - erase_address += page_size) - if ((erase_address & ~(page_size - 1)) != - last_erased_page) - dfuse_special_command(dif, - erase_address, - ERASE_PAGE); - - if (((address + chunk_size - 1) & ~(page_size - 1)) != - last_erased_page) { - if (verbose > 2) - printf(" Chunk extends into next page," - " erase it as well\n"); - dfuse_special_command(dif, - address + chunk_size - 1, - ERASE_PAGE); - } - } - - if (verbose) { - printf(" Download from image offset " - "%08x to memory %08x-%08x, size %i\n", - p, address, address + chunk_size - 1, - chunk_size); - } else { - dfu_progress_bar("Download", p, dwElementSize); - } - - dfuse_special_command(dif, address, SET_ADDRESS); - - /* transaction = 2 for no address offset */ - ret = dfuse_dnload_chunk(dif, data + p, chunk_size, 2); - if (ret != chunk_size) { - errx(EX_IOERR, "Failed to write whole chunk: " - "%i of %i bytes", ret, chunk_size); - return -EINVAL; - } - } - if (!verbose) - dfu_progress_bar("Download", dwElementSize, dwElementSize); - return 0; -} - -static void -dfuse_memcpy(unsigned char *dst, unsigned char **src, int *rem, int size) -{ - if (size > *rem) { - errx(EX_IOERR, "Corrupt DfuSe file: " - "Cannot read %d bytes from %d bytes", size, *rem); - } - if (dst != NULL) - memcpy(dst, *src, size); - (*src) += size; - (*rem) -= size; -} - -/* Download raw binary file to DfuSe device */ -int dfuse_do_bin_dnload(struct dfu_if *dif, int xfer_size, - struct dfu_file *file, unsigned int start_address) -{ - unsigned int dwElementAddress; - unsigned int dwElementSize; - unsigned char *data; - int ret; - - dwElementAddress = start_address; - dwElementSize = file->size.total - - file->size.suffix - file->size.prefix; - - printf("Downloading to address = 0x%08x, size = %i\n", - dwElementAddress, dwElementSize); - - data = file->firmware + file->size.prefix; - - ret = dfuse_dnload_element(dif, dwElementAddress, dwElementSize, data, - xfer_size); - if (ret != 0) - goto out_free; - - printf("File downloaded successfully\n"); - ret = dwElementSize; - - out_free: - return ret; -} - -/* Parse a DfuSe file and download contents to device */ -int dfuse_do_dfuse_dnload(struct dfu_if *dif, int xfer_size, - struct dfu_file *file) -{ - uint8_t dfuprefix[11]; - uint8_t targetprefix[274]; - uint8_t elementheader[8]; - int image; - int element; - int bTargets; - int bAlternateSetting; - int dwNbElements; - unsigned int dwElementAddress; - unsigned int dwElementSize; - uint8_t *data; - int ret; - int rem; - int bFirstAddressSaved = 0; - - rem = file->size.total - file->size.prefix - file->size.suffix; - data = file->firmware + file->size.prefix; - - /* Must be larger than a minimal DfuSe header and suffix */ - if (rem < (int)(sizeof(dfuprefix) + - sizeof(targetprefix) + sizeof(elementheader))) { - errx(EX_SOFTWARE, "File too small for a DfuSe file"); - } - - dfuse_memcpy(dfuprefix, &data, &rem, sizeof(dfuprefix)); - - if (strncmp((char *)dfuprefix, "DfuSe", 5)) { - errx(EX_IOERR, "No valid DfuSe signature"); - return -EINVAL; - } - if (dfuprefix[5] != 0x01) { - errx(EX_IOERR, "DFU format revision %i not supported", - dfuprefix[5]); - return -EINVAL; - } - bTargets = dfuprefix[10]; - printf("file contains %i DFU images\n", bTargets); - - for (image = 1; image <= bTargets; image++) { - printf("parsing DFU image %i\n", image); - dfuse_memcpy(targetprefix, &data, &rem, sizeof(targetprefix)); - if (strncmp((char *)targetprefix, "Target", 6)) { - errx(EX_IOERR, "No valid target signature"); - return -EINVAL; - } - bAlternateSetting = targetprefix[6]; - dwNbElements = quad2uint((unsigned char *)targetprefix + 270); - printf("image for alternate setting %i, ", bAlternateSetting); - printf("(%i elements, ", dwNbElements); - printf("total size = %i)\n", - quad2uint((unsigned char *)targetprefix + 266)); - if (bAlternateSetting != dif->altsetting) - printf("Warning: Image does not match current alternate" - " setting.\n" - "Please rerun with the correct -a option setting" - " to download this image!\n"); - for (element = 1; element <= dwNbElements; element++) { - printf("parsing element %i, ", element); - dfuse_memcpy(elementheader, &data, &rem, sizeof(elementheader)); - dwElementAddress = - quad2uint((unsigned char *)elementheader); - dwElementSize = - quad2uint((unsigned char *)elementheader + 4); - printf("address = 0x%08x, ", dwElementAddress); - printf("size = %i\n", dwElementSize); - - if (!bFirstAddressSaved) { - bFirstAddressSaved = 1; - dfuse_address = dwElementAddress; - } - /* sanity check */ - if ((int)dwElementSize > rem) - errx(EX_SOFTWARE, "File too small for element size"); - - if (bAlternateSetting == dif->altsetting) { - ret = dfuse_dnload_element(dif, dwElementAddress, - dwElementSize, data, xfer_size); - } else { - ret = 0; - } - - /* advance read pointer */ - dfuse_memcpy(NULL, &data, &rem, dwElementSize); - - if (ret != 0) - return ret; - } - } - - if (rem != 0) - warnx("%d bytes leftover", rem); - - printf("done parsing DfuSe file\n"); - - return 0; -} - -int dfuse_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file, - const char *dfuse_options) -{ - int ret; - - if (dfuse_options) - dfuse_parse_options(dfuse_options); - mem_layout = parse_memory_layout((char *)dif->alt_name); - if (!mem_layout) { - errx(EX_IOERR, "Failed to parse memory layout"); - } - if (dfuse_unprotect) { - if (!dfuse_force) { - errx(EX_IOERR, "The read unprotect command " - "will erase the flash memory" - "and can only be used with force\n"); - } - dfuse_special_command(dif, 0, READ_UNPROTECT); - printf("Device disconnects, erases flash and resets now\n"); - exit(0); - } - if (dfuse_mass_erase) { - if (!dfuse_force) { - errx(EX_IOERR, "The mass erase command " - "can only be used with force"); - } - printf("Performing mass erase, this can take a moment\n"); - dfuse_special_command(dif, 0, MASS_ERASE); - } - if (dfuse_address) { - if (file->bcdDFU == 0x11a) { - errx(EX_IOERR, "This is a DfuSe file, not " - "meant for raw download"); - } - ret = dfuse_do_bin_dnload(dif, xfer_size, file, dfuse_address); - } else { - if (file->bcdDFU != 0x11a) { - warnx("Only DfuSe file version 1.1a is supported"); - errx(EX_IOERR, "(for raw binary download, use the " - "--dfuse-address option)"); - } - ret = dfuse_do_dfuse_dnload(dif, xfer_size, file); - } - free_segment_list(mem_layout); - - dfu_abort_to_idle(dif); - - if (dfuse_leave) { - dfuse_special_command(dif, dfuse_address, SET_ADDRESS); - dfuse_dnload_chunk(dif, NULL, 0, 2); /* Zero-size */ - } - return ret; -} diff --git a/linux/src/dfu-util/src/dfuse.h b/linux/src/dfu-util/src/dfuse.h deleted file mode 100644 index ed1108cfc..000000000 --- a/linux/src/dfu-util/src/dfuse.h +++ /dev/null @@ -1,35 +0,0 @@ -/* This implements the ST Microsystems DFU extensions (DfuSe) - * as per the DfuSe 1.1a specification (Document UM0391) - * - * (C) 2010-2012 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef DFUSE_H -#define DFUSE_H - -#include "dfu.h" - -enum dfuse_command { SET_ADDRESS, ERASE_PAGE, MASS_ERASE, READ_UNPROTECT }; - -int dfuse_special_command(struct dfu_if *dif, unsigned int address, - enum dfuse_command command); -int dfuse_do_upload(struct dfu_if *dif, int xfer_size, int fd, - const char *dfuse_options); -int dfuse_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file, - const char *dfuse_options); - -#endif /* DFUSE_H */ diff --git a/linux/src/dfu-util/src/dfuse_mem.c b/linux/src/dfu-util/src/dfuse_mem.c deleted file mode 100644 index a91aacf5f..000000000 --- a/linux/src/dfu-util/src/dfuse_mem.c +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Helper functions for reading the memory map of a device - * following the ST DfuSe 1.1a specification. - * - * Copyright 2011-2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include - -#include "portable.h" -#include "dfu_file.h" -#include "dfuse_mem.h" - -int add_segment(struct memsegment **segment_list, struct memsegment segment) -{ - struct memsegment *new_element; - - new_element = dfu_malloc(sizeof(struct memsegment)); - *new_element = segment; - new_element->next = NULL; - - if (*segment_list == NULL) - /* list can be empty on first call */ - *segment_list = new_element; - else { - struct memsegment *next_element; - - /* find last element in list */ - next_element = *segment_list; - while (next_element->next != NULL) - next_element = next_element->next; - next_element->next = new_element; - } - return 0; -} - -struct memsegment *find_segment(struct memsegment *segment_list, - unsigned int address) -{ - while (segment_list != NULL) { - if (segment_list->start <= address && - segment_list->end >= address) - return segment_list; - segment_list = segment_list->next; - } - return NULL; -} - -void free_segment_list(struct memsegment *segment_list) -{ - struct memsegment *next_element; - - while (segment_list->next != NULL) { - next_element = segment_list->next; - free(segment_list); - segment_list = next_element; - } - free(segment_list); -} - -/* Parse memory map from interface descriptor string - * encoded as per ST document UM0424 section 4.3.2. - */ -struct memsegment *parse_memory_layout(char *intf_desc) -{ - - char multiplier, memtype; - unsigned int address; - int sectors, size; - char *name, *typestring; - int ret; - int count = 0; - char separator; - int scanned; - struct memsegment *segment_list = NULL; - struct memsegment segment; - - name = dfu_malloc(strlen(intf_desc)); - - ret = sscanf(intf_desc, "@%[^/]%n", name, &scanned); - if (ret < 1) { - free(name); - warnx("Could not read name, sscanf returned %d", ret); - return NULL; - } - printf("DfuSe interface name: \"%s\"\n", name); - - intf_desc += scanned; - typestring = dfu_malloc(strlen(intf_desc)); - - while (ret = sscanf(intf_desc, "/0x%x/%n", &address, &scanned), - ret > 0) { - - intf_desc += scanned; - while (ret = sscanf(intf_desc, "%d*%d%c%[^,/]%n", - §ors, &size, &multiplier, typestring, - &scanned), ret > 2) { - intf_desc += scanned; - - count++; - memtype = 0; - if (ret == 4) { - if (strlen(typestring) == 1 - && typestring[0] != '/') - memtype = typestring[0]; - else { - warnx("Parsing type identifier '%s' " - "failed for segment %i", - typestring, count); - continue; - } - } - - /* Quirk for STM32F4 devices */ - if (strcmp(name, "Device Feature") == 0) - memtype = 'e'; - - switch (multiplier) { - case 'B': - break; - case 'K': - size *= 1024; - break; - case 'M': - size *= 1024 * 1024; - break; - case 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': - case 'g': - if (!memtype) { - warnx("Non-valid multiplier '%c', " - "interpreted as type " - "identifier instead", - multiplier); - memtype = multiplier; - break; - } - /* fallthrough if memtype was already set */ - default: - warnx("Non-valid multiplier '%c', " - "assuming bytes", multiplier); - } - - if (!memtype) { - warnx("No valid type for segment %d\n", count); - continue; - } - - segment.start = address; - segment.end = address + sectors * size - 1; - segment.pagesize = size; - segment.memtype = memtype & 7; - add_segment(&segment_list, segment); - - if (verbose) - printf("Memory segment at 0x%08x %3d x %4d = " - "%5d (%s%s%s)\n", - address, sectors, size, sectors * size, - memtype & DFUSE_READABLE ? "r" : "", - memtype & DFUSE_ERASABLE ? "e" : "", - memtype & DFUSE_WRITEABLE ? "w" : ""); - - address += sectors * size; - - separator = *intf_desc; - if (separator == ',') - intf_desc += 1; - else - break; - } /* while per segment */ - - } /* while per address */ - free(name); - free(typestring); - - return segment_list; -} diff --git a/linux/src/dfu-util/src/dfuse_mem.h b/linux/src/dfu-util/src/dfuse_mem.h deleted file mode 100644 index 0181f0c16..000000000 --- a/linux/src/dfu-util/src/dfuse_mem.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Helper functions for reading the memory map in a device - * following the ST DfuSe 1.1a specification. - * - * (C) 2011 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef DFUSE_MEM_H -#define DFUSE_MEM_H - -#define DFUSE_READABLE 1 -#define DFUSE_ERASABLE 2 -#define DFUSE_WRITEABLE 4 - -struct memsegment { - unsigned int start; - unsigned int end; - int pagesize; - int memtype; - struct memsegment *next; -}; - -int add_segment(struct memsegment **list, struct memsegment new_element); - -struct memsegment *find_segment(struct memsegment *list, unsigned int address); - -void free_segment_list(struct memsegment *list); - -struct memsegment *parse_memory_layout(char *intf_desc_str); - -#endif /* DFUSE_MEM_H */ diff --git a/linux/src/dfu-util/src/main.c b/linux/src/dfu-util/src/main.c deleted file mode 100644 index acaed2f08..000000000 --- a/linux/src/dfu-util/src/main.c +++ /dev/null @@ -1,699 +0,0 @@ -/* - * dfu-util - * - * Copyright 2007-2008 by OpenMoko, Inc. - * Copyright 2013-2014 Hans Petter Selasky - * - * Written by Harald Welte - * - * Based on existing code of dfu-programmer-0.4 - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu.h" -#include "usb_dfu.h" -#include "dfu_file.h" -#include "dfu_load.h" -#include "dfu_util.h" -#include "dfuse.h" -#include "quirks.h" - -#ifdef HAVE_USBPATH_H -#include -#endif - -int verbose = 0; - -struct dfu_if *dfu_root = NULL; - -int match_bus = -1; -int match_device = -1; -int match_vendor = -1; -int match_product = -1; -int match_vendor_dfu = -1; -int match_product_dfu = -1; -int match_config_index = -1; -int match_iface_index = -1; -int match_iface_alt_index = -1; -const char *match_iface_alt_name = NULL; -const char *match_serial = NULL; -const char *match_serial_dfu = NULL; - -static int parse_match_value(const char *str, int default_value) -{ - char *remainder; - int value; - - if (str == NULL) { - value = default_value; - } else if (*str == '*') { - value = -1; /* Match anything */ - } else if (*str == '-') { - value = 0x10000; /* Impossible vendor/product ID */ - } else { - value = strtoul(str, &remainder, 16); - if (remainder == str) { - value = default_value; - } - } - return value; -} - -static void parse_vendprod(const char *str) -{ - const char *comma; - const char *colon; - - /* Default to match any DFU device in runtime or DFU mode */ - match_vendor = -1; - match_product = -1; - match_vendor_dfu = -1; - match_product_dfu = -1; - - comma = strchr(str, ','); - if (comma == str) { - /* DFU mode vendor/product being specified without any runtime - * vendor/product specification, so don't match any runtime device */ - match_vendor = match_product = 0x10000; - } else { - colon = strchr(str, ':'); - if (colon != NULL) { - ++colon; - if ((comma != NULL) && (colon > comma)) { - colon = NULL; - } - } - match_vendor = parse_match_value(str, match_vendor); - match_product = parse_match_value(colon, match_product); - if (comma != NULL) { - /* Both runtime and DFU mode vendor/product specifications are - * available, so default DFU mode match components to the given - * runtime match components */ - match_vendor_dfu = match_vendor; - match_product_dfu = match_product; - } - } - if (comma != NULL) { - ++comma; - colon = strchr(comma, ':'); - if (colon != NULL) { - ++colon; - } - match_vendor_dfu = parse_match_value(comma, match_vendor_dfu); - match_product_dfu = parse_match_value(colon, match_product_dfu); - } -} - -static void parse_serial(char *str) -{ - char *comma; - - match_serial = str; - comma = strchr(str, ','); - if (comma == NULL) { - match_serial_dfu = match_serial; - } else { - *comma++ = 0; - match_serial_dfu = comma; - } - if (*match_serial == 0) match_serial = NULL; - if (*match_serial_dfu == 0) match_serial_dfu = NULL; -} - -#ifdef HAVE_USBPATH_H - -static int resolve_device_path(char *path) -{ - int res; - - res = usb_path2devnum(path); - if (res < 0) - return -EINVAL; - if (!res) - return 0; - - match_bus = atoi(path); - match_device = res; - - return 0; -} - -#else /* HAVE_USBPATH_H */ - -static int resolve_device_path(char *path) -{ - (void)path; /* Eliminate unused variable warning */ - errx(EX_SOFTWARE, "USB device paths are not supported by this dfu-util.\n"); -} - -#endif /* !HAVE_USBPATH_H */ - -static void help(void) -{ - fprintf(stderr, "Usage: dfu-util [options] ...\n" - " -h --help\t\t\tPrint this help message\n" - " -V --version\t\t\tPrint the version number\n" - " -v --verbose\t\t\tPrint verbose debug statements\n" - " -l --list\t\t\tList currently attached DFU capable devices\n"); - fprintf(stderr, " -e --detach\t\t\tDetach currently attached DFU capable devices\n" - " -E --detach-delay seconds\tTime to wait before reopening a device after detach\n" - " -d --device :[,:]\n" - "\t\t\t\tSpecify Vendor/Product ID(s) of DFU device\n" - " -p --path \tSpecify path to DFU device\n" - " -c --cfg \t\tSpecify the Configuration of DFU device\n" - " -i --intf \t\tSpecify the DFU Interface number\n" - " -S --serial [,]\n" - "\t\t\t\tSpecify Serial String of DFU device\n" - " -a --alt \t\tSpecify the Altsetting of the DFU Interface\n" - "\t\t\t\tby name or by number\n"); - fprintf(stderr, " -t --transfer-size \tSpecify the number of bytes per USB Transfer\n" - " -U --upload \t\tRead firmware from device into \n" - " -Z --upload-size \tSpecify the expected upload size in bytes\n" - " -D --download \t\tWrite firmware from into device\n" - " -R --reset\t\t\tIssue USB Reset signalling once we're finished\n" - " -s --dfuse-address

\tST DfuSe mode, specify target address for\n" - "\t\t\t\traw file download or upload. Not applicable for\n" - "\t\t\t\tDfuSe file (.dfu) downloads\n" - ); - exit(EX_USAGE); -} - -static void print_version(void) -{ - printf(PACKAGE_STRING "\n\n"); - printf("Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.\n" - "Copyright 2010-2014 Tormod Volden and Stefan Schmidt\n" - "This program is Free Software and has ABSOLUTELY NO WARRANTY\n" - "Please report bugs to " PACKAGE_BUGREPORT "\n\n"); -} - -static struct option opts[] = { - { "help", 0, 0, 'h' }, - { "version", 0, 0, 'V' }, - { "verbose", 0, 0, 'v' }, - { "list", 0, 0, 'l' }, - { "detach", 0, 0, 'e' }, - { "detach-delay", 1, 0, 'E' }, - { "device", 1, 0, 'd' }, - { "path", 1, 0, 'p' }, - { "configuration", 1, 0, 'c' }, - { "cfg", 1, 0, 'c' }, - { "interface", 1, 0, 'i' }, - { "intf", 1, 0, 'i' }, - { "altsetting", 1, 0, 'a' }, - { "alt", 1, 0, 'a' }, - { "serial", 1, 0, 'S' }, - { "transfer-size", 1, 0, 't' }, - { "upload", 1, 0, 'U' }, - { "upload-size", 1, 0, 'Z' }, - { "download", 1, 0, 'D' }, - { "reset", 0, 0, 'R' }, - { "dfuse-address", 1, 0, 's' }, - { 0, 0, 0, 0 } -}; - -int main(int argc, char **argv) -{ - int expected_size = 0; - unsigned int transfer_size = 0; - enum mode mode = MODE_NONE; - struct dfu_status status; - libusb_context *ctx; - struct dfu_file file; - char *end; - int final_reset = 0; - int ret; - int dfuse_device = 0; - int fd; - const char *dfuse_options = NULL; - int detach_delay = 5; - uint16_t runtime_vendor; - uint16_t runtime_product; - - memset(&file, 0, sizeof(file)); - - /* make sure all prints are flushed */ - setvbuf(stdout, NULL, _IONBF, 0); - - while (1) { - int c, option_index = 0; - c = getopt_long(argc, argv, "hVvleE:d:p:c:i:a:S:t:U:D:Rs:Z:", opts, - &option_index); - if (c == -1) - break; - - switch (c) { - case 'h': - help(); - break; - case 'V': - mode = MODE_VERSION; - break; - case 'v': - verbose++; - break; - case 'l': - mode = MODE_LIST; - break; - case 'e': - mode = MODE_DETACH; - match_iface_alt_index = 0; - match_iface_index = 0; - break; - case 'E': - detach_delay = atoi(optarg); - break; - case 'd': - parse_vendprod(optarg); - break; - case 'p': - /* Parse device path */ - ret = resolve_device_path(optarg); - if (ret < 0) - errx(EX_SOFTWARE, "Unable to parse '%s'", optarg); - if (!ret) - errx(EX_SOFTWARE, "Cannot find '%s'", optarg); - break; - case 'c': - /* Configuration */ - match_config_index = atoi(optarg); - break; - case 'i': - /* Interface */ - match_iface_index = atoi(optarg); - break; - case 'a': - /* Interface Alternate Setting */ - match_iface_alt_index = strtoul(optarg, &end, 0); - if (*end) { - match_iface_alt_name = optarg; - match_iface_alt_index = -1; - } - break; - case 'S': - parse_serial(optarg); - break; - case 't': - transfer_size = atoi(optarg); - break; - case 'U': - mode = MODE_UPLOAD; - file.name = optarg; - break; - case 'Z': - expected_size = atoi(optarg); - break; - case 'D': - mode = MODE_DOWNLOAD; - file.name = optarg; - break; - case 'R': - final_reset = 1; - break; - case 's': - dfuse_options = optarg; - break; - default: - help(); - break; - } - } - - print_version(); - if (mode == MODE_VERSION) { - exit(0); - } - - if (mode == MODE_NONE) { - fprintf(stderr, "You need to specify one of -D or -U\n"); - help(); - } - - if (match_config_index == 0) { - /* Handle "-c 0" (unconfigured device) as don't care */ - match_config_index = -1; - } - - if (mode == MODE_DOWNLOAD) { - dfu_load_file(&file, MAYBE_SUFFIX, MAYBE_PREFIX); - /* If the user didn't specify product and/or vendor IDs to match, - * use any IDs from the file suffix for device matching */ - if (match_vendor < 0 && file.idVendor != 0xffff) { - match_vendor = file.idVendor; - printf("Match vendor ID from file: %04x\n", match_vendor); - } - if (match_product < 0 && file.idProduct != 0xffff) { - match_product = file.idProduct; - printf("Match product ID from file: %04x\n", match_product); - } - } - - ret = libusb_init(&ctx); - if (ret) - errx(EX_IOERR, "unable to initialize libusb: %i", ret); - - if (verbose > 2) { - libusb_set_debug(ctx, 255); - } - - probe_devices(ctx); - - if (mode == MODE_LIST) { - list_dfu_interfaces(); - exit(0); - } - - if (dfu_root == NULL) { - errx(EX_IOERR, "No DFU capable USB device available"); - } else if (dfu_root->next != NULL) { - /* We cannot safely support more than one DFU capable device - * with same vendor/product ID, since during DFU we need to do - * a USB bus reset, after which the target device will get a - * new address */ - errx(EX_IOERR, "More than one DFU capable USB device found! " - "Try `--list' and specify the serial number " - "or disconnect all but one device\n"); - } - - /* We have exactly one device. Its libusb_device is now in dfu_root->dev */ - - printf("Opening DFU capable USB device...\n"); - ret = libusb_open(dfu_root->dev, &dfu_root->dev_handle); - if (ret || !dfu_root->dev_handle) - errx(EX_IOERR, "Cannot open device"); - - printf("ID %04x:%04x\n", dfu_root->vendor, dfu_root->product); - - printf("Run-time device DFU version %04x\n", - libusb_le16_to_cpu(dfu_root->func_dfu.bcdDFUVersion)); - - /* Transition from run-Time mode to DFU mode */ - if (!(dfu_root->flags & DFU_IFF_DFU)) { - int err; - /* In the 'first round' during runtime mode, there can only be one - * DFU Interface descriptor according to the DFU Spec. */ - - /* FIXME: check if the selected device really has only one */ - - runtime_vendor = dfu_root->vendor; - runtime_product = dfu_root->product; - - printf("Claiming USB DFU Runtime Interface...\n"); - if (libusb_claim_interface(dfu_root->dev_handle, dfu_root->interface) < 0) { - errx(EX_IOERR, "Cannot claim interface %d", - dfu_root->interface); - } - - if (libusb_set_interface_alt_setting(dfu_root->dev_handle, dfu_root->interface, 0) < 0) { - errx(EX_IOERR, "Cannot set alt interface zero"); - } - - printf("Determining device status: "); - - err = dfu_get_status(dfu_root, &status); - if (err == LIBUSB_ERROR_PIPE) { - printf("Device does not implement get_status, assuming appIDLE\n"); - status.bStatus = DFU_STATUS_OK; - status.bwPollTimeout = 0; - status.bState = DFU_STATE_appIDLE; - status.iString = 0; - } else if (err < 0) { - errx(EX_IOERR, "error get_status"); - } else { - printf("state = %s, status = %d\n", - dfu_state_to_string(status.bState), status.bStatus); - } - milli_sleep(status.bwPollTimeout); - - switch (status.bState) { - case DFU_STATE_appIDLE: - case DFU_STATE_appDETACH: - printf("Device really in Runtime Mode, send DFU " - "detach request...\n"); - if (dfu_detach(dfu_root->dev_handle, - dfu_root->interface, 1000) < 0) { - warnx("error detaching"); - } - if (dfu_root->func_dfu.bmAttributes & USB_DFU_WILL_DETACH) { - printf("Device will detach and reattach...\n"); - } else { - printf("Resetting USB...\n"); - ret = libusb_reset_device(dfu_root->dev_handle); - if (ret < 0 && ret != LIBUSB_ERROR_NOT_FOUND) - errx(EX_IOERR, "error resetting " - "after detach"); - } - break; - case DFU_STATE_dfuERROR: - printf("dfuERROR, clearing status\n"); - if (dfu_clear_status(dfu_root->dev_handle, - dfu_root->interface) < 0) { - errx(EX_IOERR, "error clear_status"); - } - /* fall through */ - default: - warnx("WARNING: Runtime device already in DFU state ?!?"); - libusb_release_interface(dfu_root->dev_handle, - dfu_root->interface); - goto dfustate; - } - libusb_release_interface(dfu_root->dev_handle, - dfu_root->interface); - libusb_close(dfu_root->dev_handle); - dfu_root->dev_handle = NULL; - - if (mode == MODE_DETACH) { - libusb_exit(ctx); - exit(0); - } - - /* keeping handles open might prevent re-enumeration */ - disconnect_devices(); - - milli_sleep(detach_delay * 1000); - - /* Change match vendor and product to impossible values to force - * only DFU mode matches in the following probe */ - match_vendor = match_product = 0x10000; - - probe_devices(ctx); - - if (dfu_root == NULL) { - errx(EX_IOERR, "Lost device after RESET?"); - } else if (dfu_root->next != NULL) { - errx(EX_IOERR, "More than one DFU capable USB device found! " - "Try `--list' and specify the serial number " - "or disconnect all but one device"); - } - - /* Check for DFU mode device */ - if (!(dfu_root->flags | DFU_IFF_DFU)) - errx(EX_SOFTWARE, "Device is not in DFU mode"); - - printf("Opening DFU USB Device...\n"); - ret = libusb_open(dfu_root->dev, &dfu_root->dev_handle); - if (ret || !dfu_root->dev_handle) { - errx(EX_IOERR, "Cannot open device"); - } - } else { - /* we're already in DFU mode, so we can skip the detach/reset - * procedure */ - /* If a match vendor/product was specified, use that as the runtime - * vendor/product, otherwise use the DFU mode vendor/product */ - runtime_vendor = match_vendor < 0 ? dfu_root->vendor : match_vendor; - runtime_product = match_product < 0 ? dfu_root->product : match_product; - } - -dfustate: -#if 0 - printf("Setting Configuration %u...\n", dfu_root->configuration); - if (libusb_set_configuration(dfu_root->dev_handle, dfu_root->configuration) < 0) { - errx(EX_IOERR, "Cannot set configuration"); - } -#endif - printf("Claiming USB DFU Interface...\n"); - if (libusb_claim_interface(dfu_root->dev_handle, dfu_root->interface) < 0) { - errx(EX_IOERR, "Cannot claim interface"); - } - - printf("Setting Alternate Setting #%d ...\n", dfu_root->altsetting); - if (libusb_set_interface_alt_setting(dfu_root->dev_handle, dfu_root->interface, dfu_root->altsetting) < 0) { - errx(EX_IOERR, "Cannot set alternate interface"); - } - -status_again: - printf("Determining device status: "); - if (dfu_get_status(dfu_root, &status ) < 0) { - errx(EX_IOERR, "error get_status"); - } - printf("state = %s, status = %d\n", - dfu_state_to_string(status.bState), status.bStatus); - - milli_sleep(status.bwPollTimeout); - - switch (status.bState) { - case DFU_STATE_appIDLE: - case DFU_STATE_appDETACH: - errx(EX_IOERR, "Device still in Runtime Mode!"); - break; - case DFU_STATE_dfuERROR: - printf("dfuERROR, clearing status\n"); - if (dfu_clear_status(dfu_root->dev_handle, dfu_root->interface) < 0) { - errx(EX_IOERR, "error clear_status"); - } - goto status_again; - break; - case DFU_STATE_dfuDNLOAD_IDLE: - case DFU_STATE_dfuUPLOAD_IDLE: - printf("aborting previous incomplete transfer\n"); - if (dfu_abort(dfu_root->dev_handle, dfu_root->interface) < 0) { - errx(EX_IOERR, "can't send DFU_ABORT"); - } - goto status_again; - break; - case DFU_STATE_dfuIDLE: - printf("dfuIDLE, continuing\n"); - break; - default: - break; - } - - if (DFU_STATUS_OK != status.bStatus ) { - printf("WARNING: DFU Status: '%s'\n", - dfu_status_to_string(status.bStatus)); - /* Clear our status & try again. */ - if (dfu_clear_status(dfu_root->dev_handle, dfu_root->interface) < 0) - errx(EX_IOERR, "USB communication error"); - if (dfu_get_status(dfu_root, &status) < 0) - errx(EX_IOERR, "USB communication error"); - if (DFU_STATUS_OK != status.bStatus) - errx(EX_SOFTWARE, "Status is not OK: %d", status.bStatus); - - milli_sleep(status.bwPollTimeout); - } - - printf("DFU mode device DFU version %04x\n", - libusb_le16_to_cpu(dfu_root->func_dfu.bcdDFUVersion)); - - if (dfu_root->func_dfu.bcdDFUVersion == libusb_cpu_to_le16(0x11a)) - dfuse_device = 1; - - /* If not overridden by the user */ - if (!transfer_size) { - transfer_size = libusb_le16_to_cpu( - dfu_root->func_dfu.wTransferSize); - if (transfer_size) { - printf("Device returned transfer size %i\n", - transfer_size); - } else { - errx(EX_IOERR, "Transfer size must be specified"); - } - } - -#ifdef HAVE_GETPAGESIZE -/* autotools lie when cross-compiling for Windows using mingw32/64 */ -#ifndef __MINGW32__ - /* limitation of Linux usbdevio */ - if ((int)transfer_size > getpagesize()) { - transfer_size = getpagesize(); - printf("Limited transfer size to %i\n", transfer_size); - } -#endif /* __MINGW32__ */ -#endif /* HAVE_GETPAGESIZE */ - - if (transfer_size < dfu_root->bMaxPacketSize0) { - transfer_size = dfu_root->bMaxPacketSize0; - printf("Adjusted transfer size to %i\n", transfer_size); - } - - switch (mode) { - case MODE_UPLOAD: - /* open for "exclusive" writing */ - fd = open(file.name, O_WRONLY | O_BINARY | O_CREAT | O_EXCL | O_TRUNC, 0666); - if (fd < 0) - err(EX_IOERR, "Cannot open file %s for writing", file.name); - - if (dfuse_device || dfuse_options) { - if (dfuse_do_upload(dfu_root, transfer_size, fd, - dfuse_options) < 0) - exit(1); - } else { - if (dfuload_do_upload(dfu_root, transfer_size, - expected_size, fd) < 0) { - exit(1); - } - } - close(fd); - break; - - case MODE_DOWNLOAD: - if (((file.idVendor != 0xffff && file.idVendor != runtime_vendor) || - (file.idProduct != 0xffff && file.idProduct != runtime_product)) && - ((file.idVendor != 0xffff && file.idVendor != dfu_root->vendor) || - (file.idProduct != 0xffff && file.idProduct != dfu_root->product))) { - errx(EX_IOERR, "Error: File ID %04x:%04x does " - "not match device (%04x:%04x or %04x:%04x)", - file.idVendor, file.idProduct, - runtime_vendor, runtime_product, - dfu_root->vendor, dfu_root->product); - } - if (dfuse_device || dfuse_options || file.bcdDFU == 0x11a) { - if (dfuse_do_dnload(dfu_root, transfer_size, &file, - dfuse_options) < 0) - exit(1); - } else { - if (dfuload_do_dnload(dfu_root, transfer_size, &file) < 0) - exit(1); - } - break; - case MODE_DETACH: - if (dfu_detach(dfu_root->dev_handle, dfu_root->interface, 1000) < 0) { - warnx("can't detach"); - } - break; - default: - errx(EX_IOERR, "Unsupported mode: %u", mode); - break; - } - - if (final_reset) { - if (dfu_detach(dfu_root->dev_handle, dfu_root->interface, 1000) < 0) { - /* Even if detach failed, just carry on to leave the - device in a known state */ - warnx("can't detach"); - } - printf("Resetting USB to switch back to runtime mode\n"); - ret = libusb_reset_device(dfu_root->dev_handle); - if (ret < 0 && ret != LIBUSB_ERROR_NOT_FOUND) { - errx(EX_IOERR, "error resetting after download"); - } - } - - libusb_close(dfu_root->dev_handle); - dfu_root->dev_handle = NULL; - libusb_exit(ctx); - - return (0); -} diff --git a/linux/src/dfu-util/src/portable.h b/linux/src/dfu-util/src/portable.h deleted file mode 100644 index cf8d5df38..000000000 --- a/linux/src/dfu-util/src/portable.h +++ /dev/null @@ -1,72 +0,0 @@ - -#ifndef PORTABLE_H -#define PORTABLE_H - -#ifdef HAVE_CONFIG_H -# include "config.h" -#else -# define PACKAGE "dfu-util" -# define PACKAGE_VERSION "0.8-msvc" -# define PACKAGE_STRING "dfu-util 0.8-msvc" -# define PACKAGE_BUGREPORT "dfu-util@lists.gnumonks.org" -#endif /* HAVE_CONFIG_H */ - -#ifdef HAVE_FTRUNCATE -# include -#else -# include -#endif /* HAVE_FTRUNCATE */ - -#ifdef HAVE_NANOSLEEP -# include -# define milli_sleep(msec) do {\ - if (msec) {\ - struct timespec nanosleepDelay = { (msec) / 1000, ((msec) % 1000) * 1000000 };\ - nanosleep(&nanosleepDelay, NULL);\ - } } while (0) -#elif defined HAVE_WINDOWS_H -# define milli_sleep(msec) do {\ - if (msec) {\ - Sleep(msec);\ - } } while (0) -#else -# error "Can't get no sleep! Please report" -#endif /* HAVE_NANOSLEEP */ - -#ifdef HAVE_ERR -# include -#else -# include -# include -# define warnx(...) do {\ - fprintf(stderr, __VA_ARGS__);\ - fprintf(stderr, "\n"); } while (0) -# define errx(eval, ...) do {\ - warnx(__VA_ARGS__);\ - exit(eval); } while (0) -# define warn(...) do {\ - fprintf(stderr, "%s: ", strerror(errno));\ - warnx(__VA_ARGS__); } while (0) -# define err(eval, ...) do {\ - warn(__VA_ARGS__);\ - exit(eval); } while (0) -#endif /* HAVE_ERR */ - -#ifdef HAVE_SYSEXITS_H -# include -#else -# define EX_OK 0 /* successful termination */ -# define EX_USAGE 64 /* command line usage error */ -# define EX_SOFTWARE 70 /* internal software error */ -# define EX_IOERR 74 /* input/output error */ -#endif /* HAVE_SYSEXITS_H */ - -#ifndef O_BINARY -# define O_BINARY 0 -#endif - -#ifndef off_t -# define off_t long int -#endif - -#endif /* PORTABLE_H */ diff --git a/linux/src/dfu-util/src/prefix.c b/linux/src/dfu-util/src/prefix.c deleted file mode 100644 index be8e3faf3..000000000 --- a/linux/src/dfu-util/src/prefix.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * dfu-prefix - * - * Copyright 2011-2012 Stefan Schmidt - * Copyright 2013 Hans Petter Selasky - * Copyright 2014 Uwe Bonnes - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu_file.h" - -enum mode { - MODE_NONE, - MODE_ADD, - MODE_DEL, - MODE_CHECK -}; - -int verbose; - -static void help(void) -{ - fprintf(stderr, "Usage: dfu-prefix [options] ...\n" - " -h --help\t\t\tPrint this help message\n" - " -V --version\t\t\tPrint the version number\n" - " -c --check \t\tCheck DFU prefix of \n" - " -D --delete \t\tDelete DFU prefix from \n" - " -a --add \t\tAdd DFU prefix to \n" - "In combination with -a:\n" - ); - fprintf(stderr, " -s --stellaris-address
Add TI Stellaris address prefix to \n" - "In combination with -D or -c:\n" - " -T --stellaris\t\tAct on TI Stellaris address prefix of \n" - "In combination with -a or -D or -c:\n" - " -L --lpc-prefix\t\tUse NXP LPC DFU prefix format\n" - ); - exit(EX_USAGE); -} - -static void print_version(void) -{ - printf("dfu-prefix (%s) %s\n\n", PACKAGE, PACKAGE_VERSION); - printf("Copyright 2011-2012 Stefan Schmidt, 2014 Uwe Bonnes\n" - "This program is Free Software and has ABSOLUTELY NO WARRANTY\n" - "Please report bugs to %s\n\n", PACKAGE_BUGREPORT); - -} - -static struct option opts[] = { - { "help", 0, 0, 'h' }, - { "version", 0, 0, 'V' }, - { "check", 1, 0, 'c' }, - { "add", 1, 0, 'a' }, - { "delete", 1, 0, 'D' }, - { "stellaris-address", 1, 0, 's' }, - { "stellaris", 0, 0, 'T' }, - { "LPC", 0, 0, 'L' }, -}; -int main(int argc, char **argv) -{ - struct dfu_file file; - enum mode mode = MODE_NONE; - enum prefix_type type = ZERO_PREFIX; - uint32_t lmdfu_flash_address = 0; - char *end; - - /* make sure all prints are flushed */ - setvbuf(stdout, NULL, _IONBF, 0); - - print_version(); - - memset(&file, 0, sizeof(file)); - - while (1) { - int c, option_index = 0; - c = getopt_long(argc, argv, "hVc:a:D:p:v:d:s:TL", opts, - &option_index); - if (c == -1) - break; - - switch (c) { - case 'h': - help(); - break; - case 'V': - exit(0); - break; - case 'D': - file.name = optarg; - mode = MODE_DEL; - break; - case 'c': - file.name = optarg; - mode = MODE_CHECK; - break; - case 'a': - file.name = optarg; - mode = MODE_ADD; - break; - case 's': - lmdfu_flash_address = strtoul(optarg, &end, 0); - if (*end) { - errx(EX_IOERR, "Invalid lmdfu " - "address: %s", optarg); - } - /* fall-through */ - case 'T': - type = LMDFU_PREFIX; - break; - case 'L': - type = LPCDFU_UNENCRYPTED_PREFIX; - break; - default: - help(); - break; - } - } - - if (!file.name) { - fprintf(stderr, "You need to specify a filename\n"); - help(); - } - - switch(mode) { - case MODE_ADD: - if (type == ZERO_PREFIX) - errx(EX_IOERR, "Prefix type must be specified"); - dfu_load_file(&file, MAYBE_SUFFIX, NO_PREFIX); - file.lmdfu_address = lmdfu_flash_address; - file.prefix_type = type; - printf("Adding prefix to file\n"); - dfu_store_file(&file, file.size.suffix != 0, 1); - break; - - case MODE_CHECK: - dfu_load_file(&file, MAYBE_SUFFIX, MAYBE_PREFIX); - show_suffix_and_prefix(&file); - if (type > ZERO_PREFIX && file.prefix_type != type) - errx(EX_IOERR, "No prefix of requested type"); - break; - - case MODE_DEL: - dfu_load_file(&file, MAYBE_SUFFIX, NEEDS_PREFIX); - if (type > ZERO_PREFIX && file.prefix_type != type) - errx(EX_IOERR, "No prefix of requested type"); - printf("Removing prefix from file\n"); - /* if there was a suffix, rewrite it */ - dfu_store_file(&file, file.size.suffix != 0, 0); - break; - - default: - help(); - break; - } - return (0); -} diff --git a/linux/src/dfu-util/src/quirks.c b/linux/src/dfu-util/src/quirks.c deleted file mode 100644 index de394a615..000000000 --- a/linux/src/dfu-util/src/quirks.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Simple quirk system for dfu-util - * - * Copyright 2010-2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include "quirks.h" - -uint16_t get_quirks(uint16_t vendor, uint16_t product, uint16_t bcdDevice) -{ - uint16_t quirks = 0; - - /* Device returns bogus bwPollTimeout values */ - if ((vendor == VENDOR_OPENMOKO || vendor == VENDOR_FIC) && - product >= PRODUCT_FREERUNNER_FIRST && - product <= PRODUCT_FREERUNNER_LAST) - quirks |= QUIRK_POLLTIMEOUT; - - if (vendor == VENDOR_VOTI && - product == PRODUCT_OPENPCD) - quirks |= QUIRK_POLLTIMEOUT; - - /* Reports wrong DFU version in DFU descriptor */ - if (vendor == VENDOR_LEAFLABS && - product == PRODUCT_MAPLE3 && - bcdDevice == 0x0200) - quirks |= QUIRK_FORCE_DFU11; - - /* old devices(bcdDevice == 0) return bogus bwPollTimeout values */ - if (vendor == VENDOR_SIEMENS && - (product == PRODUCT_PXM40 || product == PRODUCT_PXM50) && - bcdDevice == 0) - quirks |= QUIRK_POLLTIMEOUT; - - /* M-Audio Transit returns bogus bwPollTimeout values */ - if (vendor == VENDOR_MIDIMAN && - product == PRODUCT_TRANSIT) - quirks |= QUIRK_POLLTIMEOUT; - - return (quirks); -} diff --git a/linux/src/dfu-util/src/quirks.h b/linux/src/dfu-util/src/quirks.h deleted file mode 100644 index 0e4b3ec58..000000000 --- a/linux/src/dfu-util/src/quirks.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef DFU_QUIRKS_H -#define DFU_QUIRKS_H - -#define VENDOR_OPENMOKO 0x1d50 /* Openmoko Freerunner / GTA02 */ -#define VENDOR_FIC 0x1457 /* Openmoko Freerunner / GTA02 */ -#define VENDOR_VOTI 0x16c0 /* OpenPCD Reader */ -#define VENDOR_LEAFLABS 0x1eaf /* Maple */ -#define VENDOR_SIEMENS 0x0908 /* Siemens AG */ -#define VENDOR_MIDIMAN 0x0763 /* Midiman */ - -#define PRODUCT_FREERUNNER_FIRST 0x5117 -#define PRODUCT_FREERUNNER_LAST 0x5126 -#define PRODUCT_OPENPCD 0x076b -#define PRODUCT_MAPLE3 0x0003 /* rev 3 and 5 */ -#define PRODUCT_PXM40 0x02c4 /* Siemens AG, PXM 40 */ -#define PRODUCT_PXM50 0x02c5 /* Siemens AG, PXM 50 */ -#define PRODUCT_TRANSIT 0x2806 /* M-Audio Transit (Midiman) */ - -#define QUIRK_POLLTIMEOUT (1<<0) -#define QUIRK_FORCE_DFU11 (1<<1) - -/* Fallback value, works for OpenMoko */ -#define DEFAULT_POLLTIMEOUT 5 - -uint16_t get_quirks(uint16_t vendor, uint16_t product, uint16_t bcdDevice); - -#endif /* DFU_QUIRKS_H */ diff --git a/linux/src/dfu-util/src/suffix.c b/linux/src/dfu-util/src/suffix.c deleted file mode 100644 index 0df248f51..000000000 --- a/linux/src/dfu-util/src/suffix.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * dfu-suffix - * - * Copyright 2011-2012 Stefan Schmidt - * Copyright 2013 Hans Petter Selasky - * Copyright 2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu_file.h" - -enum mode { - MODE_NONE, - MODE_ADD, - MODE_DEL, - MODE_CHECK -}; - -int verbose; - -static void help(void) -{ - fprintf(stderr, "Usage: dfu-suffix [options] ...\n" - " -h --help\t\t\tPrint this help message\n" - " -V --version\t\t\tPrint the version number\n" - " -c --check \t\tCheck DFU suffix of \n" - " -a --add \t\tAdd DFU suffix to \n" - " -D --delete \t\tDelete DFU suffix from \n" - " -p --pid \t\tAdd product ID into DFU suffix in \n" - " -v --vid \t\tAdd vendor ID into DFU suffix in \n" - " -d --did \t\tAdd device ID into DFU suffix in \n" - " -S --spec \t\tAdd DFU specification ID into DFU suffix in \n" - ); - exit(EX_USAGE); -} - -static void print_version(void) -{ - printf("dfu-suffix (%s) %s\n\n", PACKAGE, PACKAGE_VERSION); - printf("Copyright 2011-2012 Stefan Schmidt, 2013-2014 Tormod Volden\n" - "This program is Free Software and has ABSOLUTELY NO WARRANTY\n" - "Please report bugs to %s\n\n", PACKAGE_BUGREPORT); - -} - -static struct option opts[] = { - { "help", 0, 0, 'h' }, - { "version", 0, 0, 'V' }, - { "check", 1, 0, 'c' }, - { "add", 1, 0, 'a' }, - { "delete", 1, 0, 'D' }, - { "pid", 1, 0, 'p' }, - { "vid", 1, 0, 'v' }, - { "did", 1, 0, 'd' }, - { "spec", 1, 0, 'S' }, -}; - -int main(int argc, char **argv) -{ - struct dfu_file file; - int pid, vid, did, spec; - enum mode mode = MODE_NONE; - - /* make sure all prints are flushed */ - setvbuf(stdout, NULL, _IONBF, 0); - - print_version(); - - pid = vid = did = 0xffff; - spec = 0x0100; /* Default to bcdDFU version 1.0 */ - memset(&file, 0, sizeof(file)); - - while (1) { - int c, option_index = 0; - c = getopt_long(argc, argv, "hVc:a:D:p:v:d:S:s:T", opts, - &option_index); - if (c == -1) - break; - - switch (c) { - case 'h': - help(); - break; - case 'V': - exit(0); - break; - case 'D': - file.name = optarg; - mode = MODE_DEL; - break; - case 'p': - pid = strtol(optarg, NULL, 16); - break; - case 'v': - vid = strtol(optarg, NULL, 16); - break; - case 'd': - did = strtol(optarg, NULL, 16); - break; - case 'S': - spec = strtol(optarg, NULL, 16); - break; - case 'c': - file.name = optarg; - mode = MODE_CHECK; - break; - case 'a': - file.name = optarg; - mode = MODE_ADD; - break; - default: - help(); - break; - } - } - - if (!file.name) { - fprintf(stderr, "You need to specify a filename\n"); - help(); - } - - if (spec != 0x0100 && spec != 0x011a) { - fprintf(stderr, "Only DFU specification 0x0100 and 0x011a supported\n"); - help(); - } - - switch(mode) { - case MODE_ADD: - dfu_load_file(&file, NO_SUFFIX, MAYBE_PREFIX); - file.idVendor = vid; - file.idProduct = pid; - file.bcdDevice = did; - file.bcdDFU = spec; - /* always write suffix, rewrite prefix if there was one */ - dfu_store_file(&file, 1, file.size.prefix != 0); - printf("Suffix successfully added to file\n"); - break; - - case MODE_CHECK: - dfu_load_file(&file, NEEDS_SUFFIX, MAYBE_PREFIX); - show_suffix_and_prefix(&file); - break; - - case MODE_DEL: - dfu_load_file(&file, NEEDS_SUFFIX, MAYBE_PREFIX); - dfu_store_file(&file, 0, file.size.prefix != 0); - if (file.size.suffix) /* had a suffix */ - printf("Suffix successfully removed from file\n"); - break; - - default: - help(); - break; - } - return (0); -} diff --git a/linux/src/dfu-util/src/usb_dfu.h b/linux/src/dfu-util/src/usb_dfu.h deleted file mode 100644 index 660bedcbf..000000000 --- a/linux/src/dfu-util/src/usb_dfu.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef USB_DFU_H -#define USB_DFU_H -/* USB Device Firmware Update Implementation for OpenPCD - * (C) 2006 by Harald Welte - * - * Protocol definitions for USB DFU - * - * This ought to be compliant to the USB DFU Spec 1.0 as available from - * http://www.usb.org/developers/devclass_docs/usbdfu10.pdf - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include - -#define USB_DT_DFU 0x21 - -#ifdef _MSC_VER -# pragma pack(push) -# pragma pack(1) -#endif /* _MSC_VER */ -struct usb_dfu_func_descriptor { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bmAttributes; -#define USB_DFU_CAN_DOWNLOAD (1 << 0) -#define USB_DFU_CAN_UPLOAD (1 << 1) -#define USB_DFU_MANIFEST_TOL (1 << 2) -#define USB_DFU_WILL_DETACH (1 << 3) - uint16_t wDetachTimeOut; - uint16_t wTransferSize; - uint16_t bcdDFUVersion; -#ifdef _MSC_VER -}; -# pragma pack(pop) -#elif defined __GNUC__ -} __attribute__ ((packed)); -#else - #warning "No way to pack struct on this compiler? This will break!" -#endif /* _MSC_VER */ - -#define USB_DT_DFU_SIZE 9 - -#define USB_TYPE_DFU (LIBUSB_REQUEST_TYPE_CLASS|LIBUSB_RECIPIENT_INTERFACE) - -/* DFU class-specific requests (Section 3, DFU Rev 1.1) */ -#define USB_REQ_DFU_DETACH 0x00 -#define USB_REQ_DFU_DNLOAD 0x01 -#define USB_REQ_DFU_UPLOAD 0x02 -#define USB_REQ_DFU_GETSTATUS 0x03 -#define USB_REQ_DFU_CLRSTATUS 0x04 -#define USB_REQ_DFU_GETSTATE 0x05 -#define USB_REQ_DFU_ABORT 0x06 - -/* DFU_GETSTATUS bStatus values (Section 6.1.2, DFU Rev 1.1) */ -#define DFU_STATUS_OK 0x00 -#define DFU_STATUS_errTARGET 0x01 -#define DFU_STATUS_errFILE 0x02 -#define DFU_STATUS_errWRITE 0x03 -#define DFU_STATUS_errERASE 0x04 -#define DFU_STATUS_errCHECK_ERASED 0x05 -#define DFU_STATUS_errPROG 0x06 -#define DFU_STATUS_errVERIFY 0x07 -#define DFU_STATUS_errADDRESS 0x08 -#define DFU_STATUS_errNOTDONE 0x09 -#define DFU_STATUS_errFIRMWARE 0x0a -#define DFU_STATUS_errVENDOR 0x0b -#define DFU_STATUS_errUSBR 0x0c -#define DFU_STATUS_errPOR 0x0d -#define DFU_STATUS_errUNKNOWN 0x0e -#define DFU_STATUS_errSTALLEDPKT 0x0f - -enum dfu_state { - DFU_STATE_appIDLE = 0, - DFU_STATE_appDETACH = 1, - DFU_STATE_dfuIDLE = 2, - DFU_STATE_dfuDNLOAD_SYNC = 3, - DFU_STATE_dfuDNBUSY = 4, - DFU_STATE_dfuDNLOAD_IDLE = 5, - DFU_STATE_dfuMANIFEST_SYNC = 6, - DFU_STATE_dfuMANIFEST = 7, - DFU_STATE_dfuMANIFEST_WAIT_RST = 8, - DFU_STATE_dfuUPLOAD_IDLE = 9, - DFU_STATE_dfuERROR = 10 -}; - -#endif /* USB_DFU_H */ diff --git a/linux/src/dfu-util/www/build.html b/linux/src/dfu-util/www/build.html deleted file mode 100644 index f3036e40c..000000000 --- a/linux/src/dfu-util/www/build.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - Building dfu-util from source - - - - - - - - - -
-

How to build dfu-util from source

- -

Prerequisites for building from git

-

Mac OS X

-

-First install MacPorts (and if you are on 10.6 or older, the Java Developer Package) and then run: -

-
-	sudo port install libusb-devel git-core
-
- -

FreeBSD

-
-	sudo pkg_add -r git pkgconf
-
- -

Ubuntu and Debian and derivatives

-
-	sudo apt-get build-dep dfu-util
-	sudo apt-get install libusb-1.0-0-dev
-
- -

Get the source code and build it

-

-The first time you will have to clone the git repository: -

-
-	git clone git://gitorious.org/dfu-util/dfu-util.git
-	cd dfu-util
-
-

-If you later want to update to latest git version, just run this: -

-
-	make maintainer-clean
-	git pull
-
-

-To build the source: -

-
-	./autogen.sh
-	./configure  # on most systems
-	make
-
- -

-If you are building on Mac OS X, replace the ./configure command with: -

-
-	./configure --libdir=/opt/local/lib --includedir=/opt/local/include  # on MacOSX only
-
- -

-Your dfu-util binary will be inside the src folder. Use it from there, or install it to /usr/local/bin by running "sudo make install". -

- -

Cross-building for Windows

- -

-Windows binaries can be built in a MinGW -environment, on a Windows computer or cross-hosted in another OS. -To build it on a Debian or Ubuntu host, first install build dependencies: -

-
-	sudo apt-get build-dep libusb-1.0-0 dfu-util
-	sudo apt-get install mingw32
-
- -

-The below example builds dfu-util 0.8 and libusb 1.0.19 from unpacked release -tarballs. If you instead build from git, you will have to run "./autogen.sh" -before running the "./configure" steps. -

- -
-mkdir -p build
-cd libusb-1.0.19
-PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig ./configure \
-    --host=i586-mingw32msvc --prefix=$PWD/../build
-# WINVER workaround needed for 1.0.19 only
-make CFLAGS="-DWINVER=0x0501"
-make install
-cd ..
-
-cd dfu-util-0.8
-PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig ./configure \
-    --host=i586-mingw32msvc --prefix=$PWD/../build
-make
-make install
-cd ..
-
-The build files will now be in build/bin. -

- -

Building on Windows using MinGW

-This assumes using release tarballs or having run ./autogen.sh on -the git sources. -
-cd libusb-1.0.19
-./configure --prefix=$HOME
-# WINVER workaround needed for 1.0.19 only
-# MKDIR_P setting should not really be needed...
-make CFLAGS="-DWINVER=0x0501" MKDIR_P="mkdir -p"
-make install
-cd ..
-
-cd dfu-util-0.8
-./configure USB_CFLAGS="-I$HOME/include/libusb-1.0" \
-            USB_LIBS="-L $HOME/lib -lusb-1.0" PKG_CONFIG=true
-make
-make install
-cd ..
-
-To link libusb statically into dfu-util.exe use instead of "make": -
-make LDFLAGS=-static
-
-The built executables (and DLL) will now be under $HOME/bin. - -

-[Back to dfu-util main page] -

- -
- - diff --git a/linux/src/dfu-util/www/dfu-util.1.html b/linux/src/dfu-util/www/dfu-util.1.html deleted file mode 100644 index 62ca40b5d..000000000 --- a/linux/src/dfu-util/www/dfu-util.1.html +++ /dev/null @@ -1,411 +0,0 @@ - - -Man page of DFU-UTIL - - -

DFU-UTIL(1)

- -  -

NAME

- -dfu-util - Device firmware update (DFU) USB programmer -  -

SYNOPSIS

- - -
-
-dfu-util - --l - -[-v] - -[-d - -vid:pid[,vid:pid]] - -[-p - -path] - -[-c - -configuration] - -[-i - -interface] - -[-a - -alt-intf] - -[-S - -serial[,serial]] - - -
-dfu-util - -[-v] - -[-d - -vid:pid[,vid:pid]] - -[-p - -path] - -[-c - -configuration] - -[-i - -interface] - -[-a - -alt-intf] - -[-S - -serial[,serial]] - -[-t - -size] - -[-Z - -size] - -[-s - -address] - -[-R] - -[-D|-U - -file] - - -
-dfu-util - -[-hV] - -
-  -

DESCRIPTION

- -dfu-util - -is a program that implements the host (computer) side of the USB DFU -(Universal Serial Bus Device Firmware Upgrade) protocol. -

-dfu-util communicates with devices that implement the device side of the -USB DFU protocol, and is often used to upgrade the firmware of such -devices. -  -

OPTIONS

- -
-
-l, --list - -
-List the currently attached DFU capable USB devices. -
-d, --device [Run-Time VENDOR]:[Run-Time PRODUCT][,[DFU Mode VENDOR]:[DFU Mode PRODUCT]] - -
-
-Specify run-time and/or DFU mode vendor and/or product IDs of the DFU device -to work with. VENDOR and PRODUCT are hexadecimal numbers (no prefix -needed), "*" (match any), or "-" (match nothing). By default, any DFU capable -device in either run-time or DFU mode will be considered. -

-If you only have one standards-compliant DFU device attached to your computer, -this parameter is optional. However, as soon as you have multiple DFU devices -connected, dfu-util will detect this and abort, asking you to specify which -device to use. -

-If only run-time IDs are specified (e.g. "--device 1457:51ab"), then in -addition to the specified run-time IDs, any DFU mode devices will also be -considered. This is beneficial to allow a DFU capable device to be found -again after a switch to DFU mode, since the vendor and/or product ID of a -device usually changes in DFU mode. -

-If only DFU mode IDs are specified (e.g. "--device ,951:26"), then all -run-time devices will be ignored, making it easy to target a specific device in -DFU mode. -

-If both run-time and DFU mode IDs are specified (e.g. "--device -1457:51ab,:2bc"), then unspecified DFU mode components will use the run-time -value specified. -

-Examples: -

-
--device 1457:51ab,951:26 - -
-
- -Work with a device in run-time mode with -vendor ID 0x1457 and product ID 0x51ab, or in DFU mode with vendor ID 0x0951 -and product ID 0x0026 -

-

--device 1457:51ab,:2bc - -
-
- -Work with a device in run-time mode with vendor ID 0x1457 and product ID -0x51ab, or in DFU mode with vendor ID 0x1457 and product ID 0x02bc -

-

--device 1457:51ab - -
-
- -Work with a device in run-time mode with vendor ID 0x1457 and product ID -0x51ab, or in DFU mode with any vendor and product ID -

-

--device ,951:26 - -
-
- -Work with a device in DFU mode with vendor ID 0x0951 and product ID 0x0026 -

-

--device *,- - -
-
- -Work with any device in run-time mode, and ignore any device in DFU mode -

-

--device , - -
-
- -Ignore any device in run-time mode, and Work with any device in DFU mode -
-
- -
-p, --path BUS-PORT. ... .PORT - -
-Specify the path to the DFU device. -
-c, --cfg CONFIG-NR - -
-Specify the configuration of the DFU device. Note that this is only used for matching, the configuration is not set by dfu-util. -
-i, --intf INTF-NR - -
-Specify the DFU interface number. -
-a, --alt ALT - -
-Specify the altsetting of the DFU interface by name or by number. -
-S, --serial [Run-Time SERIAL][,[DFU Mode SERIAL]] - -
-Specify the run-time and DFU mode serial numbers used to further restrict -device matches. If multiple, identical DFU devices are simultaneously -connected to a system then vendor and product ID will be insufficient for -targeting a single device. In this situation, it may be possible to use this -parameter to specify a serial number which also must match. -

-If only a single serial number is specified, then the same serial number is -used in both run-time and DFU mode. An empty serial number will match any -serial number in the corresponding mode. -

-t, --transfer-size SIZE - -
-Specify the number of bytes per USB transfer. The optimal value is -usually determined automatically so this option is rarely useful. If -you need to use this option for a device, please report it as a bug. -
-Z, --upload-size SIZE - -
-Specify the expected upload size, in bytes. -
-U, --upload FILE - -
-Read firmware from device into -FILE. - -
-D, --download FILE - -
-Write firmware from -FILE - -into device. -
-R, --reset - -
-Issue USB reset signalling after upload or download has finished. -
-s, --dfuse-address address - -
-Specify target address for raw binary download/upload on DfuSe devices. Do -not - -use this for downloading DfuSe (.dfu) files. Modifiers can be added -to the address, separated by a colon, to perform special DfuSE commands such -as "leave" DFU mode, "unprotect" and "mass-erase" flash memory. -
-v, --verbose - -
-Print more information about dfu-util's operation. A second --v - -will turn on verbose logging of USB requests. Repeat this option to further -increase verbosity. -
-h, --help - -
-Show a help text and exit. -
-V, --version - -
-Show version information and exit. -
-  -

EXAMPLES

- -  -

Using dfu-util in the OpenMoko project

- -(with the Neo1973 hardware) -

- -Flashing the rootfs: -
- - $ dfu-util -a rootfs -R -D /path/to/openmoko-devel-image.jffs2 - -

- -Flashing the kernel: -
- - $ dfu-util -a kernel -R -D /path/to/uImage - -

- -Flashing the bootloader: -
- - $ dfu-util -a u-boot -R -D /path/to/u-boot.bin - -

- -Copying a kernel into RAM: -
- - $ dfu-util -a 0 -R -D /path/to/uImage - -

-Once this has finished, the kernel will be available at the default load -address of 0x32000000 in Neo1973 RAM. -Note: - -You cannot transfer more than 2MB of data into RAM using this method. -

-  -

Using dfu-util with a DfuSe device

- -

- -Flashing a -.dfu - -(special DfuSe format) file to the device: -
- - $ dfu-util -a 0 -D /path/to/dfuse-image.dfu - -

- -Reading out 1 KB of flash starting at address 0x8000000: -
- - $ dfu-util -a 0 -s 0x08000000:1024 -U newfile.bin - -

- -Flashing a binary file to address 0x8004000 of device memory and -ask the device to leave DFU mode: -
- - $ dfu-util -a 0 -s 0x08004000:leave -D /path/to/image.bin - - -  -

BUGS

- -Please report any bugs to the dfu-util mailing list at -dfu-util@lists.gnumonks.org. - -Please use the ---verbose option (repeated as necessary) to provide more - -information in your bug report. -  -

SEE ALSO

- -The dfu-util home page is -http://dfu-util.gnumonks.org - -  -

HISTORY

- -dfu-util was originally written for the OpenMoko project by -Weston Schmidt <weston_schmidt@yahoo.com> and -Harald Welte <hwelte@hmw-consulting.de>. Over time, nearly complete -support of DFU 1.0, DFU 1.1 and DfuSe ("1.1a") has been added. -  -

LICENCE

- -dfu-util - -is covered by the GNU General Public License (GPL), version 2 or later. -  -

COPYRIGHT

- -This manual page was originally written by Uwe Hermann <uwe@hermann-uwe.de>, -and is now part of the dfu-util project. -

- -


- 

Index

-
-
NAME
-
SYNOPSIS
-
DESCRIPTION
-
OPTIONS
-
EXAMPLES
-
-
Using dfu-util in the OpenMoko project
-
Using dfu-util with a DfuSe device
-
-
BUGS
-
SEE ALSO
-
HISTORY
-
LICENCE
-
COPYRIGHT
-
-
-This document was created by man2html, -using the doc/dfu-util.1 manual page from dfu-util 0.8.
-Time: 14:40:57 GMT, September 13, 2014 - - diff --git a/linux/src/dfu-util/www/dfuse.html b/linux/src/dfu-util/www/dfuse.html deleted file mode 100644 index 35e4ffa9f..000000000 --- a/linux/src/dfu-util/www/dfuse.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - DfuSe and dfu-util - - - - - - - - - -
-

Using dfu-util with DfuSe devices

-

DfuSe

-

- DfuSe (DFU with ST Microsystems extensions) is a protocol based on - DFU 1.1. However, in expanding the functionality of the DFU protocol, - ST Microsystems broke all compatibility with the DFU 1.1 standard. - DfuSe devices report the DFU version as "1.1a". -

-

- DfuSe can be used to download firmware and other data - from a host computer to a conforming device (or upload in the - opposite direction) over USB similar to standard DFU. -

-

- The main difference from standard DFU is that the target address in - the device (flash) memory is specified by the host, so that a - download can be performed to parts of the device memory. The host - program is also responsible for erasing flash pages before they - are written to. -

-

.dfu files

-

- A special file format is defined by ST Microsystems to carry firmware - for DfuSe devices. The file contains target information such as address - and alternate interface information in addition to the binary data. - Several blocks of binary data can be combined in one .dfu file. -

-

Alternate interfaces

-

- Different memory locations of the device may have different - characteristics that the host program (dfu-util) has to take - into considerations, such as flash memory page size, read-only - versus read-write segments, the need to erase, and so on. - These parameters are reported by the device in the string - descriptors meant for describing the USB interfaces. - The host program decodes these strings to build a memory map of - the device. Different memory units or address spaces are listed - in separate alternate interface settings that must be selected - according to the memory unit to access. -

-

- Note that dfu-util leaves it to the user to select alternate - interface. When parsing a .dfu file it will skip file segments - not matching the selected alternate interface. Also, some - DfuSe device firmware implementations ignore the setting of - alternate interface and deduct the memory unit from the - address, since they have no address space overlap. -

-

DfuSe special commands

-

- DfuSe special commands are used by the host program during normal - downloads or uploads, such as SET_ADDRESS and ERASE_PAGE. Also - the normal DFU_DNLOAD and DFU_UPLOAD commands have special - implementations in DfuSe. - Many DfuSe devices also support commands to leave DFU mode, - read unprotect the flash memory or mass erase the flash memory. - dfu-util (from version 0.7) - supports adding "leave", "unprotect", or "mass-erase" - to the -s option argument to send such requests in combination - with a download request. These modifiers are separated with a colon. -

-

- Some DfuSe devices have their DfuSe bootloader running from flash - memory. Erasing the whole flash memory would therefore destroy - the DfuSe bootloader itself and practically brick the device - for most users. Any use of modifiers such as "unprotect" - and "mass-erase" therefore needs to be combined with the "force" - modifer. This is not included in the examples, to not encourage - ignorant users to copy and paste such instructions and shoot - themselves in the foot. -

-

- Devices based on for instance STM32F103 all run the bootloader - from flash, since there is no USB bootloader in ROM. -

-

- For instance STM32F107, STM32F2xx and STM32F4xx devices have a - DfuSe bootloader in ROM, so the flash can be erased while - keeping the device available for USB DFU transfers as long - as the device designers use this built-in bootloader and have - not implemented another DfuSe bootloader in flash that the user is - dependent upon. -

-

- Well-written bootloaders running from flash will report their - own memory region as read-only and not eraseable, but this does - not prevent dfu-util from sending a "unprotect" or "mass-erase" - request which overrides this, if the user insists. -

-

Example usage

-

- Flashing a .dfu (special DfuSe format) file to the device: -

-
-         $ dfu-util -a 0 -D /path/to/dfuse-image.dfu
-	
-

- Reading out 1 KB of flash starting at address 0x8000000: -

-
-         $ dfu-util -a 0 -s 0x08000000:1024 -U newfile.bin
-	
-

- Flashing a binary file to address 0x8004000 of device memory and ask - the device to leave DFU mode: -

-
-         $ dfu-util -a 0 -s 0x08004000:leave -D /path/to/image.bin
-	
-

- [Back to dfu-util main page] -

- -
- - diff --git a/linux/src/dfu-util/www/index.html b/linux/src/dfu-util/www/index.html deleted file mode 100644 index 108ddaf66..000000000 --- a/linux/src/dfu-util/www/index.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - dfu-util Homepage - - - - - - - - - -
-

dfu-util - Device Firmware Upgrade Utilities

-

Description

-

- dfu-util is a host side implementation of the DFU 1.0 and DFU 1.1 specifications of the USB forum. - - DFU is intended to download and upload firmware to/from devices connected - over USB. It ranges from small devices like micro-controller boards - to mobile phones. Using dfu-util you can download firmware to your - DFU-enabled device or upload firmware from it. dfu-util has been - tested with the Openmoko Neo1973 and Freerunner and many other devices. -

-

- See the manual page for examples of use. -

-

Supported Devices

- -

Releases

-

- Releases of the dfu-util software can be found in the - releases folder. - The current release is 0.8. -

-

- We offer binaries for Microsoft Windows and some other platforms. - dfu-util uses libusb 1.0 to access your device, so - on Windows you have to register the device with the WinUSB driver - (alternatively libusb-win32 or libusbK), please see the libusbx wiki - for more details. -

-

- Mac OS X users can also get dfu-util from Homebrew with "brew install dfu-util" or from MacPorts. -

-

- Most Linux distributions ship dfu-util in binary packages for those - who do not want to compile dfu-util from source. - On Debian, Ubuntu, Fedora and Gentoo you can install it through the - normal software package tools. For other distributions -(namely OpenSuSe, Mandriva, and CentOS) Holger Freyther was kind enough to -provide binary packages through the Open Build Service. -

-

Development

-

- Development happens in a GIT repository. Browse it via the web -interface or clone it with: -

-
-	git clone git://gitorious.org/dfu-util/dfu-util.git
-	
-

- See our build instructions for how to - build the source on different platforms. -

-

License

-

- This software is licensed under the GPL version 2. -

-

Contact

-

- If you have questions about the development or use of dfu-util please - send an e-mail to our dedicated -mailing list for dfu-util. -

-

People

-

- dfu-util was originally written by - Harald Welte partially based on code from - dfu-programmer 0.4 and is currently maintained by Stefan Schmidt and - Tormod Volden. -

- -
- - diff --git a/linux/src/dfu-util/www/simple.css b/linux/src/dfu-util/www/simple.css deleted file mode 100644 index 98100bc5c..000000000 --- a/linux/src/dfu-util/www/simple.css +++ /dev/null @@ -1,56 +0,0 @@ -body { - margin: 10px; - font-size: 0.82em; - background-color: #EEE; -} - -h1 { - clear: both; - padding: 0 0 12px 0; - margin: 0; - font-size: 2em; - font-weight: bold; -} - -h2 { - clear: both; - margin: 0; - font-size: 1.5em; - font-weight: normal; -} - -h3 { - clear: both; - margin: 15px 0 0 0; - font-size: 1.0em; - font-weight: bold; -} - -p { - line-height: 20px; - padding: 8px 0 8px 0; - margin: 0; - font-size: 1.1em; -} - -pre { - white-space: pre-wrap; - background-color: #CCC; - padding: 3px; -} - -a:hover { - background-color: #DDD; -} - -#middlebox { - width: 600px; - margin: 0px auto; - text-align: left; -} - -#footer { - height: 100px; - padding: 28px 3px 0 0; - margin: 20px 0 20px 0; -} diff --git a/macosx/src/build_dfu-util.sh b/macosx/src/build_dfu-util.sh deleted file mode 100644 index 3563f576c..000000000 --- a/macosx/src/build_dfu-util.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -sudo apt-get build-dep dfu-util -sudo apt-get install build-essentials -sudo apt-get install libusb-1.0-0-dev -sudo apt-get install autoconf automake autotools-dev - -cd dfu-util -./autogen.sh -./configure -make -cp src/dfu-util ../../linux/dfu-util -cp src/dfu-suffix ../../linux/dfu-util -cp src/dfu-prefix ../../linux/dfu-util - diff --git a/macosx/src/dfu-util/AUTHORS b/macosx/src/dfu-util/AUTHORS deleted file mode 100644 index 1b36c739c..000000000 --- a/macosx/src/dfu-util/AUTHORS +++ /dev/null @@ -1,30 +0,0 @@ -Authors ordered by first contribution. - -Harald Welte -Werner Almesberger -Michael Lauer -Jim Huang -Stefan Schmidt -Daniel Willmann -Mike Frysinger -Uwe Hermann -C. Scott Ananian -Bernard Blackham -Holger Freyther -Marc Singer -James Perkins -Tommi Keisala -Pascal Schweizer -Bradley Scott -Uwe Bonnes -Andrey Smirnov -Jussi Timperi -Hans Petter Selasky -Bo Shen -Henrique de Almeida Mendonca -Bernd Krumboeck -Dennis Meier -Veli-Pekka Peltola -Dave Hylands -Michael Grzeschik -Paul Fertser diff --git a/macosx/src/dfu-util/COPYING b/macosx/src/dfu-util/COPYING deleted file mode 100644 index d60c31a97..000000000 --- a/macosx/src/dfu-util/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) 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 -this service 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 make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. 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. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -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 -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the 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 a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE 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. - - 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 -convey 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision 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, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This 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 Library General -Public License instead of this License. diff --git a/macosx/src/dfu-util/ChangeLog b/macosx/src/dfu-util/ChangeLog deleted file mode 100644 index 37f1addba..000000000 --- a/macosx/src/dfu-util/ChangeLog +++ /dev/null @@ -1,93 +0,0 @@ -0.8: - o New, separate dfu-prefix tool (Uwe Bonnes) - o Allow filtering on serial number (Uwe Bonnes) - o Improved VID/PID/serial filtering (Bradley Scott) - o Support reading firmware from stdin (Tormod Volden) - o Warn if missing DFU suffix (Tormod Volden) - o Improved progress bar (Hans Petter Selasky) - o Fix dfuse leave option (Uwe Bonnes) - o Major code rework (Hans Petter Selasky) - o MS Visual Studio build support (Henrique Mendonca) - o dfuse-pack.py tool for .dfu files (Antonio Galeo) - o Many other fixes from many people - -2014-09-13: Tormod Volden - -0.7: - o Support for TI Stellaris devices (Tommi Keisala) - o Fix libusb detection on MacOSX (Marc Singer) - o Fix libusb detection on FreeBSD (Tormod Volden) - o Improved DfuSe support (Tormod Volden) - o Support all special commands (leave, unprotect, mass-erase) - o Arbitrary upload lengths - o "force" option for various possible (dangerous) overrides - -2012-10-07: Tormod Volden - -0.6: - o Add detach mode (Stefan Schmidt) - o Check return value on all libusb calls (Tormod Volden) - o Fix segmentation fault with -s option (Tormod Volden) - o Add DFU suffix manipulation tool (Stefan Schmidt) - o Port to Windows: (Tormod Volden, some parts based on work from Satz - Klauer) - o Port file handling to stdio streams - o Sleep() macros - o C99 types - o Pack structs - o Detect DfuSe device correctly on big-endian architectures (Tormod - Volden) - o Add dfuse progress indication on download (Tormod Volden) - o Cleanup: gcc pedantic, gcc extension, ... (Tormod Volden) - o Rely on page size from functional descriptor. Please report if you get - an error about it. (Tormod Volden) - o Add quirk for Maple since it reports wrong DFU version (Tormod Volden) - -2012-04-22: Stefan Schmidt - -0.5: - o DfuSe extension support for ST devices (Tormod Volden) - o Add initial support for bitWillDetach flag from DFU 1.1 (Tormod - Volden) - o Internal cleanup and some manual page fixes (Tormod Volden) - -2011-11-02: Stefan Schmidt - -0.4: - o Rework to use libusb-1.0 (Stefan Schmidt) - o DFU suffix support (Tormod Volden, Stefan Schmidt) - o Sspeed up DFU downloads directly into memory (Bernard Blackham) - o More flexible -d vid:pid parsing (Tormod Volden) - o Many bug fixes and cleanups - -2011-07-20: Stefan Schmidt - -0.3: - o quirks: Add OpenOCD to the poll timeout quirk table. - -2010-12-22: Stefan Schmidt - -0.2: - o Fix some typos on the website and the README (Antonio Ospite, Uwe - Hermann) - o Remove build rule for a static binary. We can use autotools for this. - (Mike Frysinger) - o Fix infinite loop in download error path (C. Scott Ananian) - o Break out to show the 'finished' in upload (C. Scott Ananian) - o Add GPLv2+ headers (Harald Welte) - o Remove dead code (commands.[ch]) remnescent of dfu-programmer (Harald - Welte) - o Simple quirk system with Openmoko quirk for missing bwPollTimeout (Tormod Volden) - o New default (1024) and clamping of transfer size (Tormod Volden) - o Verify sending of completion packet (Tormod Volden) - o Look for DFU functional descriptor among all descriptors (Tormod - Volden) - o Print out in which direction we are transferring data - o Abort in upload if the file already exists - -2010-11-17 Stefan Schmidt - -0.1: - Initial release - -2010-05-23 Stefan Schmidt diff --git a/macosx/src/dfu-util/DEVICES.txt b/macosx/src/dfu-util/DEVICES.txt deleted file mode 100644 index bdd9f1f2e..000000000 --- a/macosx/src/dfu-util/DEVICES.txt +++ /dev/null @@ -1,20 +0,0 @@ -List of supported software and hardware products: - -Software user (bootloader, etc) -------------------------------- -- Sam7DFU: http://www.openpcd.org/Sam7dfu -- U-boot: DFU patches -- Barebox: http://www.barebox.org/ -- Leaflabs: http://code.google.com/p/leaflabs/ -- Blackmagic DFU - -Products using DFU ------------------- -- OpenPCD (sam7dfu) -- Openmoko Neo 1973 and Freerunner (u-boot with DFU patches) -- Leaflabs Maple -- ATUSB from Qi Hardware -- STM32F105/7, STM32F2/F3/F4 in System Bootloader -- Blackmagic debug probe -- NXP LPC31xx/LPC43XX, e.g. LPC-Link and LPC-Link2, need binaries - with LPC prefix and encoding (LPC-Link) diff --git a/macosx/src/dfu-util/Makefile.am b/macosx/src/dfu-util/Makefile.am deleted file mode 100644 index 641dda58a..000000000 --- a/macosx/src/dfu-util/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -SUBDIRS = src doc - -EXTRA_DIST = autogen.sh TODO DEVICES.txt dfuse-pack.py diff --git a/macosx/src/dfu-util/README b/macosx/src/dfu-util/README deleted file mode 100644 index 0f8f2621a..000000000 --- a/macosx/src/dfu-util/README +++ /dev/null @@ -1,20 +0,0 @@ -Dfu-util - Device Firmware Upgrade Utilities - -Dfu-util is the host side implementation of the DFU 1.0 [1] and DFU 1.1 [2] -specification of the USB forum. - -DFU is intended to download and upload firmware to devices connected over -USB. It ranges from small devices like micro-controller boards up to mobile -phones. With dfu-util you are able to download firmware to your device or -upload firmware from it. - -dfu-util has been tested with Openmoko Neo1973 and Freerunner and many -other devices. - -[1] DFU 1.0 spec: http://www.usb.org/developers/devclass_docs/usbdfu10.pdf -[2] DFU 1.1 spec: http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf - -The official website is: - - http://dfu-util.gnumonks.org/ - diff --git a/macosx/src/dfu-util/TODO b/macosx/src/dfu-util/TODO deleted file mode 100644 index 900c30c29..000000000 --- a/macosx/src/dfu-util/TODO +++ /dev/null @@ -1,14 +0,0 @@ -DfuSe: -- Do erase and write in two separate passes when downloading -- Skip "Set Address" command when downloading contiguous blocks -- Implement "Get Commands" command - -Devices: -- Research iPhone/iPod/iPad support - Heavily modified dfu-util fork here: - https://github.com/planetbeing/xpwn/tree/master/dfu-util -- Test against Niftylights - -Non-Code: -- Logo -- Re-License as LGPL for usage as library? diff --git a/macosx/src/dfu-util/autogen.sh b/macosx/src/dfu-util/autogen.sh deleted file mode 100644 index e67aed39a..000000000 --- a/macosx/src/dfu-util/autogen.sh +++ /dev/null @@ -1,2 +0,0 @@ -#! /bin/sh -autoreconf -v -i diff --git a/macosx/src/dfu-util/configure.ac b/macosx/src/dfu-util/configure.ac deleted file mode 100644 index 86221143f..000000000 --- a/macosx/src/dfu-util/configure.ac +++ /dev/null @@ -1,41 +0,0 @@ -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -AC_PREREQ(2.59) -AC_INIT([dfu-util],[0.8],[dfu-util@lists.gnumonks.org],,[http://dfu-util.gnumonks.org]) -AC_CONFIG_AUX_DIR(m4) -AM_INIT_AUTOMAKE([foreign]) -AC_CONFIG_HEADERS([config.h]) - -# Test for new silent rules and enable only if they are available -m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) - -# Checks for programs. -AC_PROG_CC - -# Checks for libraries. -# On FreeBSD the libusb-1.0 is called libusb and resides in system location -AC_CHECK_LIB([usb], [libusb_init],, [native_libusb=no],) -AS_IF([test x$native_libusb = xno], [ - PKG_CHECK_MODULES([USB], [libusb-1.0 >= 1.0.0],, - AC_MSG_ERROR([*** Required libusb-1.0 >= 1.0.0 not installed ***])) -]) -AC_CHECK_LIB([usbpath],[usb_path2devnum],,,-lusb) - -LIBS="$LIBS $USB_LIBS" -CFLAGS="$CFLAGS $USB_CFLAGS" - -# Checks for header files. -AC_HEADER_STDC -AC_CHECK_HEADERS([usbpath.h windows.h sysexits.h]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_SIZE_T - -# Checks for library functions. -AC_FUNC_MEMCMP -AC_CHECK_FUNCS([ftruncate getpagesize nanosleep err]) - -AC_CONFIG_FILES(Makefile src/Makefile doc/Makefile) -AC_OUTPUT diff --git a/macosx/src/dfu-util/device-logs/README b/macosx/src/dfu-util/device-logs/README deleted file mode 100644 index 00d3d1a96..000000000 --- a/macosx/src/dfu-util/device-logs/README +++ /dev/null @@ -1,77 +0,0 @@ -Device: -------- -qi-hardware-atusb: -- Qi Hardware ben-wpan -- DFU implementation: - http://projects.qi-hardware.com/index.php/p/ben-wpan/source/tree/master/atusb/fw/usb -- Tester: Stefan Schmidt - -openpcd: -- OpenPCD RFID reader -- DFU implementation: SAM7DFU - http://www.openpcd.org/Sam7dfu, git://git.gnumonks.org/openpcd.git -- Tester: Stefan Schmidt - -simtrace: -- Sysmocom SimTrace -- DFU implementation: SAM7DFU - http://www.openpcd.org/Sam7dfu, git://git.gnumonks.org/openpcd.git -- Tester: Stefan Schmidt - -openmoko-freerunner: -- Openmoko Freerunner -- DFU implementation: Old U-Boot - http://git.openmoko.org/?p=u-boot.git;a=shortlog;h=refs/heads/mokopatches -- Tester: Stefan Schmidt - -openmoko-neo1973: -- Openmoko Neo1073 -- DFU implementation: Old U-Boot - http://git.openmoko.org/?p=u-boot.git;a=shortlog;h=refs/heads/mokopatches -- Tester: Stefan Schmidt - -tdk-bluetooth: -- TDK Corp. Bluetooth Adapter -- DFU implementation: closed soure -- Only upload has been tested -- Tester: Stefan Schmidt - -stm32f107: -- STM32 microcontrollers with built-in (ROM) DFU loader -- DFU implementation: Closed source but probably similar to the one - in their USB device libraries. Some relevant application notes: - http://www.st.com -> AN3156 and AN2606 -- Tested by Uwe Bonnes - -stm32f4discovery: -- STM32 microcontroller board with built-in (ROM) DFU loader -- DFU implementation: Closed source, probably similar to stm32f107. -- Tested by Joe Rothweiler - -dso-nano: -- DSO Nano pocket oscilloscope -- DFU implementation: Based on ST Microelectronics USB FS Library 1.0 - http://dsonano.googlecode.com/files/DS0201_OpenSource.rar -- Tester: Tormod Volden - -opc-20: -- Custom devices based on STM32F1xx -- DFU implementation: ST Microelectronics USB FS Device Library 3.1.0 - http://www.st.com -> um0424.zip -- Tester: Tormod Volden - -lpc-link, lpclink2: -- NXP LPCXpresso debug adapters -- Proprietary DFU implementation, uses special download files with - LPC prefix and encoding of the target firmware code -- Tested by Uwe Bonnes - -Adding the lsusb output and a download log of your device here helps -us to avoid regressions for hardware we cannot test while working on -the code. To extract the lsusb output use this command: -sudo lsusb -v -d $USBID > $DEVICE.lsusb -Prepare a description snippet as above, and send it to us. A log -(copy-paste of the command window) of a firmware download is also -nice, please use the double verbose option -v -v and include the -command line in the log file. - diff --git a/macosx/src/dfu-util/device-logs/dsonano.lsusb b/macosx/src/dfu-util/device-logs/dsonano.lsusb deleted file mode 100644 index 140a7bc6c..000000000 --- a/macosx/src/dfu-util/device-logs/dsonano.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 002 Device 004: ID 0483:df11 SGS Thomson Microelectronics -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0483 SGS Thomson Microelectronics - idProduct 0xdf11 - bcdDevice 1.1a - iManufacturer 1 STMicroelectronics - iProduct 2 STM32 DFU - iSerial 3 001 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 64mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 0 - iInterface 4 @Internal Flash /0x08000000/12*001Ka,116*001Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 0 - iInterface 5 @SPI Flash : M25P64/0x00000000/64*064Kg,64*064Kg - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 1024 bytes - bcdDFUVersion 1.1a -Device Status: 0x0000 - (Bus Powered) diff --git a/macosx/src/dfu-util/device-logs/lpclink.log b/macosx/src/dfu-util/device-logs/lpclink.log deleted file mode 100644 index 7de4dd3e6..000000000 --- a/macosx/src/dfu-util/device-logs/lpclink.log +++ /dev/null @@ -1,59 +0,0 @@ -(The on-board LPC3154 has some encryption key set and LPCXpressoWIN.enc -is encrypted.) - -$ lsusb | grep NXP -Bus 003 Device 011: ID 0471:df55 Philips (or NXP) LPCXpresso LPC-Link - -$ dfu-util -v -v -v -R -D /opt/lpc/lpcxpresso/bin/LPCXpressoWIN.enc - -dfu-util 0.7 - -Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc. -Copyright 2010-2012 Tormod Volden and Stefan Schmidt -This program is Free Software and has ABSOLUTELY NO WARRANTY -Please report bugs to dfu-util@lists.gnumonks.org - -dfu-util: Invalid DFU suffix signature -dfu-util: A valid DFU suffix will be required in a future dfu-util release!!! -Deducing device DFU version from functional descriptor length -Opening DFU capable USB device... -ID 0471:df55 -Run-time device DFU version 0100 -Claiming USB DFU Runtime Interface... -Determining device status: -state = dfuIDLE, status = 0 -dfu-util: WARNING: Runtime device already in DFU state ?!? -Claiming USB DFU Interface... -Setting Alternate Setting #0 ... -Determining device status: -state = dfuIDLE, status = 0 -dfuIDLE, continuing -DFU mode device DFU version 0100 -Device returned transfer size 2048 -Copying data from PC to DFU device -Download [ ] 0% 0 bytes -Download [= ] 6% 2048 bytes -Download [=== ] 13% 4096 bytes -Download [==== ] 19% 6144 bytes -Download [====== ] 26% 8192 bytes -Download [======== ] 32% 10240 bytes -Download [========= ] 39% 12288 bytes -Download [=========== ] 45% 14336 bytes -Download [============= ] 52% 16384 bytes -Download [============== ] 59% 18432 bytes -Download [================ ] 65% 20480 bytes -Download [================== ] 72% 22528 bytes -Download [=================== ] 78% 24576 bytes -Download [===================== ] 85% 26624 bytes -Download [====================== ] 91% 28672 bytes -Download [======================== ] 98% 29192 bytes -Download [=========================] 100% 29192 bytes -Download done. -Sent a total of 29192 bytes -state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present -Done! -dfu-util: can't detach -Resetting USB to switch back to runtime mode - -$ lsusb | grep NXP -Bus 003 Device 012: ID 1fc9:0009 NXP Semiconductors diff --git a/macosx/src/dfu-util/device-logs/lpclink.lsusb b/macosx/src/dfu-util/device-logs/lpclink.lsusb deleted file mode 100644 index 867b2a2c5..000000000 --- a/macosx/src/dfu-util/device-logs/lpclink.lsusb +++ /dev/null @@ -1,58 +0,0 @@ - -Bus 003 Device 008: ID 0471:df55 Philips (or NXP) LPCXpresso LPC-Link -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 2.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0471 Philips (or NXP) - idProduct 0xdf55 LPCXpresso LPC-Link - bcdDevice 0.01 - iManufacturer 0 - iProduct 0 - iSerial 0 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 25 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 0 - iInterface 0 - Device Firmware Upgrade Interface Descriptor: - bLength 7 - bDescriptorType 33 - bmAttributes 1 - Will Not Detach - Manifestation Intolerant - Upload Unsupported - Download Supported - wDetachTimeout 65535 milliseconds - wTransferSize 2048 bytes -Device Qualifier (for other device speed): - bLength 10 - bDescriptorType 6 - bcdUSB 2.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - bNumConfigurations 1 -Device Status: 0x0000 - (Bus Powered) diff --git a/macosx/src/dfu-util/device-logs/lpclink2.log b/macosx/src/dfu-util/device-logs/lpclink2.log deleted file mode 100644 index 4681eff7d..000000000 --- a/macosx/src/dfu-util/device-logs/lpclink2.log +++ /dev/null @@ -1,59 +0,0 @@ -$ lsusb | grep NXP -Bus 003 Device 013: ID 1fc9:000c NXP Semiconductors - -$ dfu-util -D ~/devel/dfu-util/firmware.bin.qthdr - -dfu-util 0.7 - -Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc. -Copyright 2010-2012 Tormod Volden and Stefan Schmidt -This program is Free Software and has ABSOLUTELY NO WARRANTY -Please report bugs to dfu-util@lists.gnumonks.org - -dfu-util: Invalid DFU suffix signature -dfu-util: A valid DFU suffix will be required in a future dfu-util release!!! -Possible unencryptes NXP LPC DFU prefix with the following properties -Payload length: 39 kiByte -Opening DFU capable USB device... -ID 1fc9:000c -Run-time device DFU version 0100 -Claiming USB DFU Runtime Interface... -Determining device status: -state = dfuIDLE, status = 0 -dfu-util: WARNING: Runtime device already in DFU state ?!? -Claiming USB DFU Interface... -Setting Alternate Setting #0 ... -Determining device status: -state = dfuIDLE, status = 0 -dfuIDLE, continuing -DFU mode device DFU version 0100 -Device returned transfer size 2048 -Copying data from PC to DFU device -Download [ ] 0% 0 bytes -Download [= ] 4% 2048 bytes -Download [== ] 9% 4096 bytes -Download [=== ] 14% 6144 bytes -Download [==== ] 19% 8192 bytes -Download [====== ] 24% 10240 bytes -Download [======= ] 28% 12288 bytes -Download [======== ] 33% 14336 bytes -Download [========= ] 38% 16384 bytes -Download [========== ] 43% 18432 bytes -Download [============ ] 48% 20480 bytes -Download [============= ] 53% 22528 bytes -Download [============== ] 57% 24576 bytes -Download [=============== ] 62% 26624 bytes -Download [================ ] 67% 28672 bytes -Download [================== ] 72% 30720 bytes -Download [=================== ] 77% 32768 bytes -Download [==================== ] 82% 34816 bytes -Download [===================== ] 86% 36864 bytes -Download [====================== ] 91% 38912 bytes -Download [======================== ] 96% 40356 bytes -Download [=========================] 100% 40356 bytes -Download done. -Sent a total of 40356 bytes -dfu-util: unable to read DFU status - -$ lsusb | grep NXP -Bus 003 Device 014: ID 1fc9:0018 NXP Semiconductors diff --git a/macosx/src/dfu-util/device-logs/lpclink2.lsusb b/macosx/src/dfu-util/device-logs/lpclink2.lsusb deleted file mode 100644 index b833fca77..000000000 --- a/macosx/src/dfu-util/device-logs/lpclink2.lsusb +++ /dev/null @@ -1,203 +0,0 @@ - -Bus 003 Device 007: ID 0c72:000c PEAK System PCAN-USB -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 16 - idVendor 0x0c72 PEAK System - idProduct 0x000c PCAN-USB - bcdDevice 1c.ff - iManufacturer 0 - iProduct 3 VER1:PEAK -VER2:02.8.01 -DAT :06.05.2004 -TIME:09:35:37 - ... - iSerial 0 - bNumConfigurations 3 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 46 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 200mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 4 - bInterfaceClass 0 (Defined at Interface level) - bInterfaceSubClass 0 - bInterfaceProtocol 0 - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 20 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x01 EP 1 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 20 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x82 EP 2 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 46 - bNumInterfaces 1 - bConfigurationValue 2 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 394mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 4 - bInterfaceClass 0 (Defined at Interface level) - bInterfaceSubClass 0 - bInterfaceProtocol 0 - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 20 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x01 EP 1 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 20 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x82 EP 2 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 46 - bNumInterfaces 1 - bConfigurationValue 3 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 200mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 4 - bInterfaceClass 0 (Defined at Interface level) - bInterfaceSubClass 0 - bInterfaceProtocol 0 - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x01 EP 1 OUT - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x82 EP 2 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 -Device Status: 0x0001 - Self Powered diff --git a/macosx/src/dfu-util/device-logs/opc-20.lsusb b/macosx/src/dfu-util/device-logs/opc-20.lsusb deleted file mode 100644 index 580df90e5..000000000 --- a/macosx/src/dfu-util/device-logs/opc-20.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 001 Device 004: ID 0483:df11 SGS Thomson Microelectronics -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0483 SGS Thomson Microelectronics - idProduct 0xdf11 - bcdDevice 2.00 - iManufacturer 1 STMicroelectronics - iProduct 2 STM32 DFU - iSerial 3 ÿÿÿÿÿÿÿÿÿÿÿÿ - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0xc0 - Self Powered - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 @Internal Flash /0x08000000/12*001Ka,116*001Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 @SPI Flash : M25P64/0x00000000/128*64Kg - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 1024 bytes - bcdDFUVersion 1a.01 -Device Status: 0x0001 - Self Powered diff --git a/macosx/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb b/macosx/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb deleted file mode 100644 index 4c0abfb06..000000000 --- a/macosx/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb +++ /dev/null @@ -1,109 +0,0 @@ -Bus 003 Device 017: ID 1d50:5119 OpenMoko, Inc. GTA01/GTA02 U-Boot Bootloader -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 16 - idVendor 0x1d50 OpenMoko, Inc. - idProduct 0x5119 GTA01/GTA02 U-Boot Bootloader - bcdDevice 0.00 - iManufacturer 1 OpenMoko, Inc - iProduct 2 Neo1973 Bootloader U-Boot 1.3.2-moko12 - iSerial 3 0000000 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 81 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 7 USB Device Firmware Upgrade - bmAttributes 0x80 - (Bus Powered) - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 8 RAM 0x32000000 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 9 u-boot - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 2 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 10 u-boot_env - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 3 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 11 kernel - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 4 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 12 splash - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 5 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 13 factory - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 6 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 14 rootfs - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 7 - Will Not Detach - Manifestation Tolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 4096 bytes - bcdDFUVersion 1.00 -Device Status: 0x0a00 - (Bus Powered) diff --git a/macosx/src/dfu-util/device-logs/openmoko-freerunner.lsusb b/macosx/src/dfu-util/device-logs/openmoko-freerunner.lsusb deleted file mode 100644 index 835708dd8..000000000 --- a/macosx/src/dfu-util/device-logs/openmoko-freerunner.lsusb +++ /dev/null @@ -1,179 +0,0 @@ -Bus 005 Device 033: ID 1d50:5119 OpenMoko, Inc. GTA01/GTA02 U-Boot Bootloader -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.10 - bDeviceClass 2 Communications - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 16 - idVendor 0x1d50 OpenMoko, Inc. - idProduct 0x5119 GTA01/GTA02 U-Boot Bootloader - bcdDevice 0.00 - iManufacturer 1 OpenMoko, Inc - iProduct 2 Neo1973 Bootloader U-Boot 1.3.2-moko12 - iSerial 3 0000000 - bNumConfigurations 2 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 85 - bNumInterfaces 3 - bConfigurationValue 1 - iConfiguration 4 TTY via USB - bmAttributes 0x80 - (Bus Powered) - MaxPower 500mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 2 Communications - bInterfaceSubClass 2 Abstract (modem) - bInterfaceProtocol 1 AT-commands (v.25ter) - iInterface 6 Control Interface - CDC Header: - bcdCDC 0.6e - CDC Call Management: - bmCapabilities 0x00 - bDataInterface 1 - CDC ACM: - bmCapabilities 0x00 - CDC Union: - bMasterInterface 0 - bSlaveInterface 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 10 CDC Data - bInterfaceSubClass 0 Unused - bInterfaceProtocol 0 - iInterface 5 Bulk Data Interface - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 2 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 1 - iInterface 7 USB Device Firmware Upgrade - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 7 - Will Not Detach - Manifestation Tolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 4096 bytes - bcdDFUVersion 1.00 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 67 - bNumInterfaces 2 - bConfigurationValue 2 - iConfiguration 4 TTY via USB - bmAttributes 0x80 - (Bus Powered) - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 2 Communications - bInterfaceSubClass 2 Abstract (modem) - bInterfaceProtocol 1 AT-commands (v.25ter) - iInterface 6 Control Interface - CDC Header: - bcdCDC 0.6e - CDC Call Management: - bmCapabilities 0x00 - bDataInterface 1 - CDC ACM: - bmCapabilities 0x00 - CDC Union: - bMasterInterface 0 - bSlaveInterface 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 10 CDC Data - bInterfaceSubClass 0 Unused - bInterfaceProtocol 0 - iInterface 5 Bulk Data Interface - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 -Device Status: 0x9a00 - (Bus Powered) diff --git a/macosx/src/dfu-util/device-logs/openmoko-neo1973.lsusb b/macosx/src/dfu-util/device-logs/openmoko-neo1973.lsusb deleted file mode 100644 index 07789506a..000000000 --- a/macosx/src/dfu-util/device-logs/openmoko-neo1973.lsusb +++ /dev/null @@ -1,182 +0,0 @@ - -Bus 006 Device 020: ID 1457:5119 First International Computer, Inc. OpenMoko Neo1973 u-boot cdc_acm serial port -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.10 - bDeviceClass 2 Communications - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 16 - idVendor 0x1457 First International Computer, Inc. - idProduct 0x5119 OpenMoko Neo1973 u-boot cdc_acm serial port - bcdDevice 0.00 - iManufacturer 1 - iProduct 2 - iSerial 3 - bNumConfigurations 2 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 85 - bNumInterfaces 3 - bConfigurationValue 1 - iConfiguration 4 - bmAttributes 0x80 - (Bus Powered) - MaxPower 500mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 2 Communications - bInterfaceSubClass 2 Abstract (modem) - bInterfaceProtocol 1 AT-commands (v.25ter) - iInterface 6 - CDC Header: - bcdCDC 0.6e - CDC Call Management: - bmCapabilities 0x00 - bDataInterface 1 - CDC ACM: - bmCapabilities 0x00 - CDC Union: - bMasterInterface 0 - bSlaveInterface 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 10 CDC Data - bInterfaceSubClass 0 Unused - bInterfaceProtocol 0 - iInterface 5 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 2 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 1 - iInterface 7 - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 7 - Will Not Detach - Manifestation Tolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 4096 bytes - bcdDFUVersion 1.00 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 67 - bNumInterfaces 2 - bConfigurationValue 2 - iConfiguration 4 - bmAttributes 0x80 - (Bus Powered) - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 2 Communications - bInterfaceSubClass 2 Abstract (modem) - bInterfaceProtocol 1 AT-commands (v.25ter) - iInterface 6 - CDC Header: - bcdCDC 0.6e - CDC Call Management: - bmCapabilities 0x00 - bDataInterface 1 - CDC ACM: - bmCapabilities 0x00 - CDC Union: - bMasterInterface 0 - bSlaveInterface 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 10 CDC Data - bInterfaceSubClass 0 Unused - bInterfaceProtocol 0 - iInterface 5 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 -Device Status: 0x0006 - (Bus Powered) - Remote Wakeup Enabled - Test Mode diff --git a/macosx/src/dfu-util/device-logs/openpcd.lsusb b/macosx/src/dfu-util/device-logs/openpcd.lsusb deleted file mode 100644 index f6255a943..000000000 --- a/macosx/src/dfu-util/device-logs/openpcd.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 006 Device 016: ID 16c0:076b VOTI OpenPCD 13.56MHz RFID Reader -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 8 - idVendor 0x16c0 VOTI - idProduct 0x076b OpenPCD 13.56MHz RFID Reader - bcdDevice 0.00 - iManufacturer 1 - iProduct 2 OpenPCD RFID Simulator - DFU Mode - iSerial 0 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 200mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 0 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 0 - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 3 - Will Not Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 256 bytes - bcdDFUVersion 1.00 -Device Status: 0x0000 - (Bus Powered) diff --git a/macosx/src/dfu-util/device-logs/qi-hardware-atusb.lsusb b/macosx/src/dfu-util/device-logs/qi-hardware-atusb.lsusb deleted file mode 100644 index bfc1701e1..000000000 --- a/macosx/src/dfu-util/device-logs/qi-hardware-atusb.lsusb +++ /dev/null @@ -1,59 +0,0 @@ - -Bus 006 Device 013: ID 20b7:1540 Qi Hardware ben-wpan, AT86RF230-based -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 2.00 - bDeviceClass 255 Vendor Specific Class - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x20b7 Qi Hardware - idProduct 0x1540 ben-wpan, AT86RF230-based - bcdDevice 0.01 - iManufacturer 0 - iProduct 0 - iSerial 1 4630333438371508231a - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 34 - bNumInterfaces 2 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 40mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 255 Vendor Specific Class - bInterfaceSubClass 0 - bInterfaceProtocol 0 - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 0 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 1 - iInterface 0 -Device Status: 0x0000 - (Bus Powered) diff --git a/macosx/src/dfu-util/device-logs/simtrace.lsusb b/macosx/src/dfu-util/device-logs/simtrace.lsusb deleted file mode 100644 index 578ddf0e1..000000000 --- a/macosx/src/dfu-util/device-logs/simtrace.lsusb +++ /dev/null @@ -1,70 +0,0 @@ - -Bus 006 Device 017: ID 16c0:0762 VOTI -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 8 - idVendor 0x16c0 VOTI - idProduct 0x0762 - bcdDevice 0.00 - iManufacturer 1 sysmocom - systems for mobile communications GmbH - iProduct 2 SimTrace SIM Sniffer - DFU Mode - iSerial 0 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 45 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 3 SimTrace DFU Configuration - bmAttributes 0x80 - (Bus Powered) - MaxPower 200mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 SimTrace DFU Interface - Application Partition - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 SimTrace DFU Interface - Bootloader Partition - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 2 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 6 SimTrace DFU Interface - RAM - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 3 - Will Not Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 256 bytes - bcdDFUVersion 1.00 -Device Status: 0x0000 - (Bus Powered) diff --git a/macosx/src/dfu-util/device-logs/sparkcore.lsusb b/macosx/src/dfu-util/device-logs/sparkcore.lsusb deleted file mode 100644 index b6029ffa5..000000000 --- a/macosx/src/dfu-util/device-logs/sparkcore.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 001 Device 008: ID 1d50:607f OpenMoko, Inc. -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x1d50 OpenMoko, Inc. - idProduct 0x607f - bcdDevice 2.00 - iManufacturer 1 Spark Devices - iProduct 2 CORE DFU - iSerial 3 8D80527B5055 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0xc0 - Self Powered - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 @Internal Flash /0x08000000/20*001Ka,108*001Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 @SPI Flash : SST25x/0x00000000/512*04Kg - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 1024 bytes - bcdDFUVersion 1.1a -Device Status: 0x0001 - Self Powered diff --git a/macosx/src/dfu-util/device-logs/stm32f107.bin-download b/macosx/src/dfu-util/device-logs/stm32f107.bin-download deleted file mode 100644 index 45b714f83..000000000 --- a/macosx/src/dfu-util/device-logs/stm32f107.bin-download +++ /dev/null @@ -1,48 +0,0 @@ -> src/dfu-util --intf 0 --alt 0 -v -v -v -s 0x8000000 -D test3 -dfu-util 0.4 - -(C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc. -(C) 2010-2011 Tormod Volden (DfuSe support) -This program is Free Software and has ABSOLUTELY NO WARRANTY - -dfu-util does currently only support DFU version 1.0 - -Opening DFU USB device... ID 0483:df11 -Run-time device DFU version 011a -Found DFU: [0483:df11] devnum=0, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/128*002Kg" -Claiming USB DFU Interface... -Setting Alternate Setting #0 ... -Determining device status: state = dfuIDLE, status = 0 -dfuIDLE, continuing -DFU mode device DFU version 011a -Device returned transfer size 2048 -No valid DFU suffix signature -Warning: File has no DFU suffix -DfuSe interface name: "Internal Flash " -Memory segment at 0x08000000 128 x 2048 = 262144 (rew) -Uploading to address = 0x08000000, size = 16384 -Erasing page size 2048 at address 0x08000000, page starting at 0x08000000 - Download from image offset 00000000 to memory 08000000-080007ff, size 2048 - Setting address pointer to 0x08000000 -Erasing page size 2048 at address 0x08000800, page starting at 0x08000800 - Download from image offset 00000800 to memory 08000800-08000fff, size 2048 - Setting address pointer to 0x08000800 -Erasing page size 2048 at address 0x08001000, page starting at 0x08001000 - Download from image offset 00001000 to memory 08001000-080017ff, size 2048 - Setting address pointer to 0x08001000 -Erasing page size 2048 at address 0x08001800, page starting at 0x08001800 - Download from image offset 00001800 to memory 08001800-08001fff, size 2048 - Setting address pointer to 0x08001800 -Erasing page size 2048 at address 0x08002000, page starting at 0x08002000 - Download from image offset 00002000 to memory 08002000-080027ff, size 2048 - Setting address pointer to 0x08002000 -Erasing page size 2048 at address 0x08002800, page starting at 0x08002800 - Download from image offset 00002800 to memory 08002800-08002fff, size 2048 - Setting address pointer to 0x08002800 -Erasing page size 2048 at address 0x08003000, page starting at 0x08003000 - Download from image offset 00003000 to memory 08003000-080037ff, size 2048 - Setting address pointer to 0x08003000 -Erasing page size 2048 at address 0x08003800, page starting at 0x08003800 - Download from image offset 00003800 to memory 08003800-08003fff, size 2048 - Setting address pointer to 0x08003800 - diff --git a/macosx/src/dfu-util/device-logs/stm32f107.lsusb b/macosx/src/dfu-util/device-logs/stm32f107.lsusb deleted file mode 100644 index 14b45cda0..000000000 --- a/macosx/src/dfu-util/device-logs/stm32f107.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 001 Device 028: ID 0483:df11 SGS Thomson Microelectronics STM Device in DFU Mode -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0483 SGS Thomson Microelectronics - idProduct 0xdf11 STM Device in DFU Mode - bcdDevice 20.00 - iManufacturer 1 STMicroelectronics - iProduct 2 STM32 0x418 DFU Bootloader - iSerial 3 STM32 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0xc0 - Self Powered - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 @Internal Flash /0x08000000/128*002Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 @Option Bytes /0x1FFFF800/01*016 g - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 2048 bytes - bcdDFUVersion 1.1a -Device Status: 0x0000 - (Bus Powered) diff --git a/macosx/src/dfu-util/device-logs/stm32f4discovery.bin-download b/macosx/src/dfu-util/device-logs/stm32f4discovery.bin-download deleted file mode 100644 index 96e172216..000000000 --- a/macosx/src/dfu-util/device-logs/stm32f4discovery.bin-download +++ /dev/null @@ -1,36 +0,0 @@ -dfu-util --device 0483:df11 --alt 0 \ - --dfuse-address 0x08000000 \ - -v -v -v \ - --download arm/iotoggle.bin -No valid DFU suffix signature -Warning: File has no DFU suffix -dfu-util 0.5 - -(C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc. -(C) 2010-2011 Tormod Volden (DfuSe support) -This program is Free Software and has ABSOLUTELY NO WARRANTY - -dfu-util does currently only support DFU version 1.0 - -Filter on vendor = 0x0483 product = 0xdf11 -Opening DFU capable USB device... ID 0483:df11 -Run-time device DFU version 011a -Found DFU: [0483:df11] devnum=0, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/04*016Kg,01*064Kg,07*128Kg" -Claiming USB DFU Interface... -Setting Alternate Setting #0 ... -Determining device status: state = dfuERROR, status = 10 -dfuERROR, clearing status -Determining device status: state = dfuIDLE, status = 0 -dfuIDLE, continuing -DFU mode device DFU version 011a -Device returned transfer size 2048 -DfuSe interface name: "Internal Flash " -Memory segment at 0x08000000 4 x 16384 = 65536 (rew) -Memory segment at 0x08010000 1 x 65536 = 65536 (rew) -Memory segment at 0x08020000 7 x 131072 = 917504 (rew) -Uploading to address = 0x08000000, size = 2308 -Erasing page size 16384 at address 0x08000000, page starting at 0x08000000 - Download from image offset 00000000 to memory 08000000-080007ff, size 2048 - Setting address pointer to 0x08000000 - Download from image offset 00000800 to memory 08000800-08000903, size 260 - Setting address pointer to 0x08000800 diff --git a/macosx/src/dfu-util/device-logs/stm32f4discovery.lsusb b/macosx/src/dfu-util/device-logs/stm32f4discovery.lsusb deleted file mode 100644 index 0b870de91..000000000 --- a/macosx/src/dfu-util/device-logs/stm32f4discovery.lsusb +++ /dev/null @@ -1,80 +0,0 @@ - -Bus 001 Device 010: ID 0483:df11 SGS Thomson Microelectronics STM Device in DFU Mode -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0483 SGS Thomson Microelectronics - idProduct 0xdf11 STM Device in DFU Mode - bcdDevice 21.00 - iManufacturer 1 STMicroelectronics - iProduct 2 STM32 BOOTLOADER - iSerial 3 315A28A0B956 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 54 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0xc0 - Self Powered - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 @Internal Flash /0x08000000/04*016Kg,01*064Kg,07*128Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 @Option Bytes /0x1FFFC000/01*016 g - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 2 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 6 @OTP Memory /0x1FFF7800/01*512 g,01*016 g - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 3 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 7 @Device Feature/0xFFFF0000/01*004 g - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 2048 bytes - bcdDFUVersion 1.1a -Device Status: 0x0001 - Self Powered diff --git a/macosx/src/dfu-util/device-logs/tdk-bluetooth.lsusb b/macosx/src/dfu-util/device-logs/tdk-bluetooth.lsusb deleted file mode 100644 index c0cfaceb6..000000000 --- a/macosx/src/dfu-util/device-logs/tdk-bluetooth.lsusb +++ /dev/null @@ -1,269 +0,0 @@ - -Bus 006 Device 014: ID 04bf:0320 TDK Corp. Bluetooth Adapter -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 2.00 - bDeviceClass 224 Wireless - bDeviceSubClass 1 Radio Frequency - bDeviceProtocol 1 Bluetooth - bMaxPacketSize0 64 - idVendor 0x04bf TDK Corp. - idProduct 0x0320 Bluetooth Adapter - bcdDevice 26.52 - iManufacturer 1 Ezurio - iProduct 2 Turbo Bluetooth Adapter - iSerial 3 008098D4FFBD - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 193 - bNumInterfaces 3 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 64mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 3 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x82 EP 2 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0000 1x 0 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0000 1x 0 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 1 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0009 1x 9 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0009 1x 9 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 2 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0011 1x 17 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0011 1x 17 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 3 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0019 1x 25 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0019 1x 25 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 4 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0021 1x 33 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0021 1x 33 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 5 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0031 1x 49 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0031 1x 49 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 2 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 0 - iInterface 0 - Device Firmware Upgrade Interface Descriptor: - bLength 7 - bDescriptorType 33 - bmAttributes 7 - Will Not Detach - Manifestation Tolerant - Upload Supported - Download Supported - wDetachTimeout 5000 milliseconds - wTransferSize 1023 bytes -Device Status: 0x0000 - (Bus Powered) diff --git a/macosx/src/dfu-util/dfuse-pack.py b/macosx/src/dfu-util/dfuse-pack.py deleted file mode 100644 index 875cc5c6e..000000000 --- a/macosx/src/dfu-util/dfuse-pack.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/python - -# Written by Antonio Galea - 2010/11/18 -# Distributed under Gnu LGPL 3.0 -# see http://www.gnu.org/licenses/lgpl-3.0.txt - -import sys,struct,zlib,os -from optparse import OptionParser - -DEFAULT_DEVICE="0x0483:0xdf11" - -def named(tuple,names): - return dict(zip(names.split(),tuple)) -def consume(fmt,data,names): - n = struct.calcsize(fmt) - return named(struct.unpack(fmt,data[:n]),names),data[n:] -def cstring(string): - return string.split('\0',1)[0] -def compute_crc(data): - return 0xFFFFFFFF & -zlib.crc32(data) -1 - -def parse(file,dump_images=False): - print 'File: "%s"' % file - data = open(file,'rb').read() - crc = compute_crc(data[:-4]) - prefix, data = consume('<5sBIB',data,'signature version size targets') - print '%(signature)s v%(version)d, image size: %(size)d, targets: %(targets)d' % prefix - for t in range(prefix['targets']): - tprefix, data = consume('<6sBI255s2I',data,'signature altsetting named name size elements') - tprefix['num'] = t - if tprefix['named']: - tprefix['name'] = cstring(tprefix['name']) - else: - tprefix['name'] = '' - print '%(signature)s %(num)d, alt setting: %(altsetting)s, name: "%(name)s", size: %(size)d, elements: %(elements)d' % tprefix - tsize = tprefix['size'] - target, data = data[:tsize], data[tsize:] - for e in range(tprefix['elements']): - eprefix, target = consume('<2I',target,'address size') - eprefix['num'] = e - print ' %(num)d, address: 0x%(address)08x, size: %(size)d' % eprefix - esize = eprefix['size'] - image, target = target[:esize], target[esize:] - if dump_images: - out = '%s.target%d.image%d.bin' % (file,t,e) - open(out,'wb').write(image) - print ' DUMPED IMAGE TO "%s"' % out - if len(target): - print "target %d: PARSE ERROR" % t - suffix = named(struct.unpack('<4H3sBI',data[:16]),'device product vendor dfu ufd len crc') - print 'usb: %(vendor)04x:%(product)04x, device: 0x%(device)04x, dfu: 0x%(dfu)04x, %(ufd)s, %(len)d, 0x%(crc)08x' % suffix - if crc != suffix['crc']: - print "CRC ERROR: computed crc32 is 0x%08x" % crc - data = data[16:] - if data: - print "PARSE ERROR" - -def build(file,targets,device=DEFAULT_DEVICE): - data = '' - for t,target in enumerate(targets): - tdata = '' - for image in target: - tdata += struct.pack('<2I',image['address'],len(image['data']))+image['data'] - tdata = struct.pack('<6sBI255s2I','Target',0,1,'ST...',len(tdata),len(target)) + tdata - data += tdata - data = struct.pack('<5sBIB','DfuSe',1,len(data)+11,len(targets)) + data - v,d=map(lambda x: int(x,0) & 0xFFFF, device.split(':',1)) - data += struct.pack('<4H3sB',0,d,v,0x011a,'UFD',16) - crc = compute_crc(data) - data += struct.pack(' and -Harald Welte . Over time, nearly complete -support of DFU 1.0, DFU 1.1 and DfuSe ("1.1a") has been added. -.SH LICENCE -.B dfu-util -is covered by the GNU General Public License (GPL), version 2 or later. -.SH COPYRIGHT -This manual page was originally written by Uwe Hermann , -and is now part of the dfu-util project. diff --git a/macosx/src/dfu-util/msvc/README_msvc.txt b/macosx/src/dfu-util/msvc/README_msvc.txt deleted file mode 100644 index 6e68ec6ff..000000000 --- a/macosx/src/dfu-util/msvc/README_msvc.txt +++ /dev/null @@ -1,10 +0,0 @@ -# (C) Roger Meier -# (C) Pascal Schweizer -# msvc folder is GPL-2.0+, LGPL-2.1+, BSD-3-Clause or MIT license(SPDX) - -Building dfu-util native on Windows with Visual Studio - -3rd party dependencies: -- libusbx ( git clone https://github.com/libusbx/libusbx.git ) - - getopt (part of libusbx: libusbx/examples/getopt) - diff --git a/macosx/src/dfu-util/msvc/dfu-suffix_2010.vcxproj b/macosx/src/dfu-util/msvc/dfu-suffix_2010.vcxproj deleted file mode 100644 index 0c316c2e5..000000000 --- a/macosx/src/dfu-util/msvc/dfu-suffix_2010.vcxproj +++ /dev/null @@ -1,100 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA} - dfusuffix - dfu-suffix - - - - Application - true - MultiByte - - - Application - false - true - MultiByte - - - - - - - - - - - - - $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\dll;$(LibraryPath) - $(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib - $(ExecutablePath) - - - $(ExecutablePath) - $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\dll;$(LibraryPath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - - - - Level3 - Disabled - HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - - - true - - - - - Level3 - MaxSpeed - true - true - HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - true - - - - - - - - - - - - - {a2169bc8-cf99-40bf-83f3-b0e38f7067bd} - - - {349ee8f9-7d25-4909-aaf5-ff3fade72187} - - - - - - \ No newline at end of file diff --git a/macosx/src/dfu-util/msvc/dfu-util_2010.sln b/macosx/src/dfu-util/msvc/dfu-util_2010.sln deleted file mode 100644 index ef797239b..000000000 --- a/macosx/src/dfu-util/msvc/dfu-util_2010.sln +++ /dev/null @@ -1,54 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dfu-util", "dfu-util_2010.vcxproj", "{0E071A60-7EF2-4427-BAA8-9143CACB5BCB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{C4F8746D-B27E-4806-95E5-2052174E923B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dfu-suffix", "dfu-suffix_2010.vcxproj", "{8F7600A2-3B37-4956-B39B-A1D43EF29EDA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "getopt_2010", "..\..\libusbx\msvc\getopt_2010.vcxproj", "{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (static)", "..\..\libusbx\msvc\libusb_static_2010.vcxproj", "{349EE8F9-7D25-4909-AAF5-FF3FADE72187}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Debug|Win32.ActiveCfg = Debug|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Debug|Win32.Build.0 = Debug|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Debug|x64.ActiveCfg = Debug|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Release|Win32.ActiveCfg = Release|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Release|Win32.Build.0 = Release|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Release|x64.ActiveCfg = Release|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Debug|Win32.ActiveCfg = Debug|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Debug|Win32.Build.0 = Debug|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Debug|x64.ActiveCfg = Debug|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Release|Win32.ActiveCfg = Release|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Release|Win32.Build.0 = Release|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Release|x64.ActiveCfg = Release|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.ActiveCfg = Debug|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.Build.0 = Debug|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.ActiveCfg = Debug|x64 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.Build.0 = Debug|x64 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.ActiveCfg = Release|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.Build.0 = Release|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.ActiveCfg = Release|x64 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.Build.0 = Release|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.Build.0 = Debug|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.Build.0 = Debug|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.Build.0 = Release|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/macosx/src/dfu-util/msvc/dfu-util_2010.vcxproj b/macosx/src/dfu-util/msvc/dfu-util_2010.vcxproj deleted file mode 100644 index 17a8bee1b..000000000 --- a/macosx/src/dfu-util/msvc/dfu-util_2010.vcxproj +++ /dev/null @@ -1,120 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB} - dfuutil - dfu-util - - - - Application - true - MultiByte - - - Application - false - true - MultiByte - - - - - - - - - - - - - $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\getopt\$(Configuration);$(LibraryPath) - $(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib - $(ExecutablePath) - - - $(ExecutablePath) - $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) - $(SolutionDir)..\$(Platform)\getopt\$(Configuration);$(LibraryPath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - - - - Level3 - Disabled - HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - - - true - - - - - - - - - Level3 - MaxSpeed - true - true - HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - true - - - copy $(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0.dll $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - - - - - - - - - - - - - - - - - - - - - - - - - - {a2169bc8-cf99-40bf-83f3-b0e38f7067bd} - - - {349ee8f9-7d25-4909-aaf5-ff3fade72187} - - - - - - \ No newline at end of file diff --git a/macosx/src/dfu-util/src/Makefile.am b/macosx/src/dfu-util/src/Makefile.am deleted file mode 100644 index 70179c411..000000000 --- a/macosx/src/dfu-util/src/Makefile.am +++ /dev/null @@ -1,28 +0,0 @@ -AM_CFLAGS = -Wall -Wextra - -bin_PROGRAMS = dfu-util dfu-suffix dfu-prefix -dfu_util_SOURCES = main.c \ - portable.h \ - dfu_load.c \ - dfu_load.h \ - dfu_util.c \ - dfu_util.h \ - dfuse.c \ - dfuse.h \ - dfuse_mem.c \ - dfuse_mem.h \ - dfu.c \ - dfu.h \ - usb_dfu.h \ - dfu_file.c \ - dfu_file.h \ - quirks.c \ - quirks.h - -dfu_suffix_SOURCES = suffix.c \ - dfu_file.h \ - dfu_file.c - -dfu_prefix_SOURCES = prefix.c \ - dfu_file.h \ - dfu_file.c diff --git a/macosx/src/dfu-util/src/dfu.c b/macosx/src/dfu-util/src/dfu.c deleted file mode 100644 index 14d7673d1..000000000 --- a/macosx/src/dfu-util/src/dfu.c +++ /dev/null @@ -1,357 +0,0 @@ -/* - * Low-level DFU communication routines, originally taken from - * $Id: dfu.c,v 1.3 2006/06/20 06:28:04 schmidtw Exp $ - * (part of dfu-programmer). - * - * Copyright 2005-2006 Weston Schmidt - * Copyright 2011-2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include - -#include - -#include "portable.h" -#include "dfu.h" -#include "quirks.h" - -static int dfu_timeout = 5000; /* 5 seconds - default */ - -/* - * DFU_DETACH Request (DFU Spec 1.0, Section 5.1) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * timeout - the timeout in ms the USB device should wait for a pending - * USB reset before giving up and terminating the operation - * - * returns 0 or < 0 on error - */ -int dfu_detach( libusb_device_handle *device, - const unsigned short interface, - const unsigned short timeout ) -{ - return libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_DETACH, - /* wValue */ timeout, - /* wIndex */ interface, - /* Data */ NULL, - /* wLength */ 0, - dfu_timeout ); -} - - -/* - * DFU_DNLOAD Request (DFU Spec 1.0, Section 6.1.1) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * length - the total number of bytes to transfer to the USB - * device - must be less than wTransferSize - * data - the data to transfer - * - * returns the number of bytes written or < 0 on error - */ -int dfu_download( libusb_device_handle *device, - const unsigned short interface, - const unsigned short length, - const unsigned short transaction, - unsigned char* data ) -{ - int status; - - status = libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_DNLOAD, - /* wValue */ transaction, - /* wIndex */ interface, - /* Data */ data, - /* wLength */ length, - dfu_timeout ); - return status; -} - - -/* - * DFU_UPLOAD Request (DFU Spec 1.0, Section 6.2) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * length - the maximum number of bytes to receive from the USB - * device - must be less than wTransferSize - * data - the buffer to put the received data in - * - * returns the number of bytes received or < 0 on error - */ -int dfu_upload( libusb_device_handle *device, - const unsigned short interface, - const unsigned short length, - const unsigned short transaction, - unsigned char* data ) -{ - int status; - - status = libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_UPLOAD, - /* wValue */ transaction, - /* wIndex */ interface, - /* Data */ data, - /* wLength */ length, - dfu_timeout ); - return status; -} - - -/* - * DFU_GETSTATUS Request (DFU Spec 1.0, Section 6.1.2) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * status - the data structure to be populated with the results - * - * return the number of bytes read in or < 0 on an error - */ -int dfu_get_status( struct dfu_if *dif, struct dfu_status *status ) -{ - unsigned char buffer[6]; - int result; - - /* Initialize the status data structure */ - status->bStatus = DFU_STATUS_ERROR_UNKNOWN; - status->bwPollTimeout = 0; - status->bState = STATE_DFU_ERROR; - status->iString = 0; - - result = libusb_control_transfer( dif->dev_handle, - /* bmRequestType */ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_GETSTATUS, - /* wValue */ 0, - /* wIndex */ dif->interface, - /* Data */ buffer, - /* wLength */ 6, - dfu_timeout ); - - if( 6 == result ) { - status->bStatus = buffer[0]; - if (dif->quirks & QUIRK_POLLTIMEOUT) - status->bwPollTimeout = DEFAULT_POLLTIMEOUT; - else - status->bwPollTimeout = ((0xff & buffer[3]) << 16) | - ((0xff & buffer[2]) << 8) | - (0xff & buffer[1]); - status->bState = buffer[4]; - status->iString = buffer[5]; - } - - return result; -} - - -/* - * DFU_CLRSTATUS Request (DFU Spec 1.0, Section 6.1.3) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * - * return 0 or < 0 on an error - */ -int dfu_clear_status( libusb_device_handle *device, - const unsigned short interface ) -{ - return libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT| LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_CLRSTATUS, - /* wValue */ 0, - /* wIndex */ interface, - /* Data */ NULL, - /* wLength */ 0, - dfu_timeout ); -} - - -/* - * DFU_GETSTATE Request (DFU Spec 1.0, Section 6.1.5) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * length - the maximum number of bytes to receive from the USB - * device - must be less than wTransferSize - * data - the buffer to put the received data in - * - * returns the state or < 0 on error - */ -int dfu_get_state( libusb_device_handle *device, - const unsigned short interface ) -{ - int result; - unsigned char buffer[1]; - - result = libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_GETSTATE, - /* wValue */ 0, - /* wIndex */ interface, - /* Data */ buffer, - /* wLength */ 1, - dfu_timeout ); - - /* Return the error if there is one. */ - if (result < 1) - return -1; - - /* Return the state. */ - return buffer[0]; -} - - -/* - * DFU_ABORT Request (DFU Spec 1.0, Section 6.1.4) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * - * returns 0 or < 0 on an error - */ -int dfu_abort( libusb_device_handle *device, - const unsigned short interface ) -{ - return libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_ABORT, - /* wValue */ 0, - /* wIndex */ interface, - /* Data */ NULL, - /* wLength */ 0, - dfu_timeout ); -} - - -const char* dfu_state_to_string( int state ) -{ - const char *message; - - switch (state) { - case STATE_APP_IDLE: - message = "appIDLE"; - break; - case STATE_APP_DETACH: - message = "appDETACH"; - break; - case STATE_DFU_IDLE: - message = "dfuIDLE"; - break; - case STATE_DFU_DOWNLOAD_SYNC: - message = "dfuDNLOAD-SYNC"; - break; - case STATE_DFU_DOWNLOAD_BUSY: - message = "dfuDNBUSY"; - break; - case STATE_DFU_DOWNLOAD_IDLE: - message = "dfuDNLOAD-IDLE"; - break; - case STATE_DFU_MANIFEST_SYNC: - message = "dfuMANIFEST-SYNC"; - break; - case STATE_DFU_MANIFEST: - message = "dfuMANIFEST"; - break; - case STATE_DFU_MANIFEST_WAIT_RESET: - message = "dfuMANIFEST-WAIT-RESET"; - break; - case STATE_DFU_UPLOAD_IDLE: - message = "dfuUPLOAD-IDLE"; - break; - case STATE_DFU_ERROR: - message = "dfuERROR"; - break; - default: - message = NULL; - break; - } - - return message; -} - -/* Chapter 6.1.2 */ -static const char *dfu_status_names[] = { - /* DFU_STATUS_OK */ - "No error condition is present", - /* DFU_STATUS_errTARGET */ - "File is not targeted for use by this device", - /* DFU_STATUS_errFILE */ - "File is for this device but fails some vendor-specific test", - /* DFU_STATUS_errWRITE */ - "Device is unable to write memory", - /* DFU_STATUS_errERASE */ - "Memory erase function failed", - /* DFU_STATUS_errCHECK_ERASED */ - "Memory erase check failed", - /* DFU_STATUS_errPROG */ - "Program memory function failed", - /* DFU_STATUS_errVERIFY */ - "Programmed memory failed verification", - /* DFU_STATUS_errADDRESS */ - "Cannot program memory due to received address that is out of range", - /* DFU_STATUS_errNOTDONE */ - "Received DFU_DNLOAD with wLength = 0, but device does not think that it has all data yet", - /* DFU_STATUS_errFIRMWARE */ - "Device's firmware is corrupt. It cannot return to run-time (non-DFU) operations", - /* DFU_STATUS_errVENDOR */ - "iString indicates a vendor specific error", - /* DFU_STATUS_errUSBR */ - "Device detected unexpected USB reset signalling", - /* DFU_STATUS_errPOR */ - "Device detected unexpected power on reset", - /* DFU_STATUS_errUNKNOWN */ - "Something went wrong, but the device does not know what it was", - /* DFU_STATUS_errSTALLEDPKT */ - "Device stalled an unexpected request" -}; - - -const char *dfu_status_to_string(int status) -{ - if (status > DFU_STATUS_errSTALLEDPKT) - return "INVALID"; - return dfu_status_names[status]; -} - -int dfu_abort_to_idle(struct dfu_if *dif) -{ - int ret; - struct dfu_status dst; - - ret = dfu_abort(dif->dev_handle, dif->interface); - if (ret < 0) { - errx(EX_IOERR, "Error sending dfu abort request"); - exit(1); - } - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - errx(EX_IOERR, "Error during abort get_status"); - exit(1); - } - if (dst.bState != DFU_STATE_dfuIDLE) { - errx(EX_IOERR, "Failed to enter idle state on abort"); - exit(1); - } - milli_sleep(dst.bwPollTimeout); - return ret; -} diff --git a/macosx/src/dfu-util/src/dfu.h b/macosx/src/dfu-util/src/dfu.h deleted file mode 100644 index 8e3caeb7b..000000000 --- a/macosx/src/dfu-util/src/dfu.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * dfu-programmer - * - * $Id: dfu.h,v 1.2 2005/09/25 01:27:42 schmidtw Exp $ - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef DFU_H -#define DFU_H - -#include -#include "usb_dfu.h" - -/* DFU states */ -#define STATE_APP_IDLE 0x00 -#define STATE_APP_DETACH 0x01 -#define STATE_DFU_IDLE 0x02 -#define STATE_DFU_DOWNLOAD_SYNC 0x03 -#define STATE_DFU_DOWNLOAD_BUSY 0x04 -#define STATE_DFU_DOWNLOAD_IDLE 0x05 -#define STATE_DFU_MANIFEST_SYNC 0x06 -#define STATE_DFU_MANIFEST 0x07 -#define STATE_DFU_MANIFEST_WAIT_RESET 0x08 -#define STATE_DFU_UPLOAD_IDLE 0x09 -#define STATE_DFU_ERROR 0x0a - - -/* DFU status */ -#define DFU_STATUS_OK 0x00 -#define DFU_STATUS_ERROR_TARGET 0x01 -#define DFU_STATUS_ERROR_FILE 0x02 -#define DFU_STATUS_ERROR_WRITE 0x03 -#define DFU_STATUS_ERROR_ERASE 0x04 -#define DFU_STATUS_ERROR_CHECK_ERASED 0x05 -#define DFU_STATUS_ERROR_PROG 0x06 -#define DFU_STATUS_ERROR_VERIFY 0x07 -#define DFU_STATUS_ERROR_ADDRESS 0x08 -#define DFU_STATUS_ERROR_NOTDONE 0x09 -#define DFU_STATUS_ERROR_FIRMWARE 0x0a -#define DFU_STATUS_ERROR_VENDOR 0x0b -#define DFU_STATUS_ERROR_USBR 0x0c -#define DFU_STATUS_ERROR_POR 0x0d -#define DFU_STATUS_ERROR_UNKNOWN 0x0e -#define DFU_STATUS_ERROR_STALLEDPKT 0x0f - -/* DFU commands */ -#define DFU_DETACH 0 -#define DFU_DNLOAD 1 -#define DFU_UPLOAD 2 -#define DFU_GETSTATUS 3 -#define DFU_CLRSTATUS 4 -#define DFU_GETSTATE 5 -#define DFU_ABORT 6 - -/* DFU interface */ -#define DFU_IFF_DFU 0x0001 /* DFU Mode, (not Runtime) */ - -/* This is based off of DFU_GETSTATUS - * - * 1 unsigned byte bStatus - * 3 unsigned byte bwPollTimeout - * 1 unsigned byte bState - * 1 unsigned byte iString -*/ - -struct dfu_status { - unsigned char bStatus; - unsigned int bwPollTimeout; - unsigned char bState; - unsigned char iString; -}; - -struct dfu_if { - struct usb_dfu_func_descriptor func_dfu; - uint16_t quirks; - uint16_t busnum; - uint16_t devnum; - uint16_t vendor; - uint16_t product; - uint16_t bcdDevice; - uint8_t configuration; - uint8_t interface; - uint8_t altsetting; - uint8_t flags; - uint8_t bMaxPacketSize0; - char *alt_name; - char *serial_name; - libusb_device *dev; - libusb_device_handle *dev_handle; - struct dfu_if *next; -}; - -int dfu_detach( libusb_device_handle *device, - const unsigned short interface, - const unsigned short timeout ); -int dfu_download( libusb_device_handle *device, - const unsigned short interface, - const unsigned short length, - const unsigned short transaction, - unsigned char* data ); -int dfu_upload( libusb_device_handle *device, - const unsigned short interface, - const unsigned short length, - const unsigned short transaction, - unsigned char* data ); -int dfu_get_status( struct dfu_if *dif, - struct dfu_status *status ); -int dfu_clear_status( libusb_device_handle *device, - const unsigned short interface ); -int dfu_get_state( libusb_device_handle *device, - const unsigned short interface ); -int dfu_abort( libusb_device_handle *device, - const unsigned short interface ); -int dfu_abort_to_idle( struct dfu_if *dif); - -const char *dfu_state_to_string( int state ); - -const char *dfu_status_to_string( int status ); - -#endif /* DFU_H */ diff --git a/macosx/src/dfu-util/src/dfu_file.c b/macosx/src/dfu-util/src/dfu_file.c deleted file mode 100644 index 7c897d4f6..000000000 --- a/macosx/src/dfu-util/src/dfu_file.c +++ /dev/null @@ -1,444 +0,0 @@ -/* - * Load or store DFU files including suffix and prefix - * - * Copyright 2014 Tormod Volden - * Copyright 2012 Stefan Schmidt - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu_file.h" - -#define DFU_SUFFIX_LENGTH 16 -#define LMDFU_PREFIX_LENGTH 8 -#define LPCDFU_PREFIX_LENGTH 16 -#define PROGRESS_BAR_WIDTH 25 -#define STDIN_CHUNK_SIZE 65536 - -static const unsigned long crc32_table[] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, - 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, - 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, - 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, - 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, - 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, - 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, - 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, - 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, - 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, - 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, - 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, - 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, - 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, - 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, - 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, - 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, - 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}; - -static uint32_t crc32_byte(uint32_t accum, uint8_t delta) -{ - return crc32_table[(accum ^ delta) & 0xff] ^ (accum >> 8); -} - -static int probe_prefix(struct dfu_file *file) -{ - uint8_t *prefix = file->firmware; - - if (file->size.total < LMDFU_PREFIX_LENGTH) - return 1; - if ((prefix[0] == 0x01) && (prefix[1] == 0x00)) { - file->prefix_type = LMDFU_PREFIX; - file->size.prefix = LMDFU_PREFIX_LENGTH; - file->lmdfu_address = 1024 * ((prefix[3] << 8) | prefix[2]); - } - else if (((prefix[0] & 0x3f) == 0x1a) && ((prefix[1] & 0x3f)== 0x3f)) { - file->prefix_type = LPCDFU_UNENCRYPTED_PREFIX; - file->size.prefix = LPCDFU_PREFIX_LENGTH; - } - - if (file->size.prefix + file->size.suffix > file->size.total) - return 1; - return 0; -} - -void dfu_progress_bar(const char *desc, unsigned long long curr, - unsigned long long max) -{ - static char buf[PROGRESS_BAR_WIDTH + 1]; - static unsigned long long last_progress = -1; - static time_t last_time; - time_t curr_time = time(NULL); - unsigned long long progress; - unsigned long long x; - - /* check for not known maximum */ - if (max < curr) - max = curr + 1; - /* make none out of none give zero */ - if (max == 0 && curr == 0) - max = 1; - - /* compute completion */ - progress = (PROGRESS_BAR_WIDTH * curr) / max; - if (progress > PROGRESS_BAR_WIDTH) - progress = PROGRESS_BAR_WIDTH; - if (progress == last_progress && - curr_time == last_time) - return; - last_progress = progress; - last_time = curr_time; - - for (x = 0; x != PROGRESS_BAR_WIDTH; x++) { - if (x < progress) - buf[x] = '='; - else - buf[x] = ' '; - } - buf[x] = 0; - - printf("\r%s\t[%s] %3lld%% %12lld bytes", desc, buf, - (100ULL * curr) / max, curr); - - if (progress == PROGRESS_BAR_WIDTH) - printf("\n%s done.\n", desc); -} - -void *dfu_malloc(size_t size) -{ - void *ptr = malloc(size); - if (ptr == NULL) - errx(EX_SOFTWARE, "Cannot allocate memory of size %d bytes", (int)size); - return (ptr); -} - -uint32_t dfu_file_write_crc(int f, uint32_t crc, const void *buf, int size) -{ - int x; - - /* compute CRC */ - for (x = 0; x != size; x++) - crc = crc32_byte(crc, ((uint8_t *)buf)[x]); - - /* write data */ - if (write(f, buf, size) != size) - err(EX_IOERR, "Could not write %d bytes to file %d", size, f); - - return (crc); -} - -void dfu_load_file(struct dfu_file *file, enum suffix_req check_suffix, enum prefix_req check_prefix) -{ - off_t offset; - int f; - int i; - int res; - - file->size.prefix = 0; - file->size.suffix = 0; - - /* default values, if no valid suffix is found */ - file->bcdDFU = 0; - file->idVendor = 0xffff; /* wildcard value */ - file->idProduct = 0xffff; /* wildcard value */ - file->bcdDevice = 0xffff; /* wildcard value */ - - /* default values, if no valid prefix is found */ - file->lmdfu_address = 0; - - free(file->firmware); - - if (!strcmp(file->name, "-")) { - int read_bytes; - -#ifdef WIN32 - _setmode( _fileno( stdin ), _O_BINARY ); -#endif - file->firmware = (uint8_t*) dfu_malloc(STDIN_CHUNK_SIZE); - read_bytes = fread(file->firmware, 1, STDIN_CHUNK_SIZE, stdin); - file->size.total = read_bytes; - while (read_bytes == STDIN_CHUNK_SIZE) { - file->firmware = (uint8_t*) realloc(file->firmware, file->size.total + STDIN_CHUNK_SIZE); - if (!file->firmware) - err(EX_IOERR, "Could not allocate firmware buffer"); - read_bytes = fread(file->firmware + file->size.total, 1, STDIN_CHUNK_SIZE, stdin); - file->size.total += read_bytes; - } - if (verbose) - printf("Read %i bytes from stdin\n", file->size.total); - /* Never require suffix when reading from stdin */ - check_suffix = MAYBE_SUFFIX; - } else { - f = open(file->name, O_RDONLY | O_BINARY); - if (f < 0) - err(EX_IOERR, "Could not open file %s for reading", file->name); - - offset = lseek(f, 0, SEEK_END); - - if ((int)offset < 0 || (int)offset != offset) - err(EX_IOERR, "File size is too big"); - - if (lseek(f, 0, SEEK_SET) != 0) - err(EX_IOERR, "Could not seek to beginning"); - - file->size.total = offset; - file->firmware = dfu_malloc(file->size.total); - - if (read(f, file->firmware, file->size.total) != file->size.total) { - err(EX_IOERR, "Could not read %d bytes from %s", - file->size.total, file->name); - } - close(f); - } - - /* Check for possible DFU file suffix by trying to parse one */ - { - uint32_t crc = 0xffffffff; - const uint8_t *dfusuffix; - int missing_suffix = 0; - const char *reason; - - if (file->size.total < DFU_SUFFIX_LENGTH) { - reason = "File too short for DFU suffix"; - missing_suffix = 1; - goto checked; - } - - dfusuffix = file->firmware + file->size.total - - DFU_SUFFIX_LENGTH; - - for (i = 0; i < file->size.total - 4; i++) - crc = crc32_byte(crc, file->firmware[i]); - - if (dfusuffix[10] != 'D' || - dfusuffix[9] != 'F' || - dfusuffix[8] != 'U') { - reason = "Invalid DFU suffix signature"; - missing_suffix = 1; - goto checked; - } - - file->dwCRC = (dfusuffix[15] << 24) + - (dfusuffix[14] << 16) + - (dfusuffix[13] << 8) + - dfusuffix[12]; - - if (file->dwCRC != crc) { - reason = "DFU suffix CRC does not match"; - missing_suffix = 1; - goto checked; - } - - /* At this point we believe we have a DFU suffix - so we require further checks to succeed */ - - file->bcdDFU = (dfusuffix[7] << 8) + dfusuffix[6]; - - if (verbose) - printf("DFU suffix version %x\n", file->bcdDFU); - - file->size.suffix = dfusuffix[11]; - - if (file->size.suffix < DFU_SUFFIX_LENGTH) { - errx(EX_IOERR, "Unsupported DFU suffix length %d", - file->size.suffix); - } - - if (file->size.suffix > file->size.total) { - errx(EX_IOERR, "Invalid DFU suffix length %d", - file->size.suffix); - } - - file->idVendor = (dfusuffix[5] << 8) + dfusuffix[4]; - file->idProduct = (dfusuffix[3] << 8) + dfusuffix[2]; - file->bcdDevice = (dfusuffix[1] << 8) + dfusuffix[0]; - -checked: - if (missing_suffix) { - if (check_suffix == NEEDS_SUFFIX) { - warnx("%s", reason); - errx(EX_IOERR, "Valid DFU suffix needed"); - } else if (check_suffix == MAYBE_SUFFIX) { - warnx("%s", reason); - warnx("A valid DFU suffix will be required in " - "a future dfu-util release!!!"); - } - } else { - if (check_suffix == NO_SUFFIX) { - errx(EX_SOFTWARE, "Please remove existing DFU suffix before adding a new one.\n"); - } - } - } - res = probe_prefix(file); - if ((res || file->size.prefix == 0) && check_prefix == NEEDS_PREFIX) - errx(EX_IOERR, "Valid DFU prefix needed"); - if (file->size.prefix && check_prefix == NO_PREFIX) - errx(EX_IOERR, "A prefix already exists, please delete it first"); - if (file->size.prefix && verbose) { - uint8_t *data = file->firmware; - if (file->prefix_type == LMDFU_PREFIX) - printf("Possible TI Stellaris DFU prefix with " - "the following properties\n" - "Address: 0x%08x\n" - "Payload length: %d\n", - file->lmdfu_address, - data[4] | (data[5] << 8) | - (data[6] << 16) | (data[7] << 14)); - else if (file->prefix_type == LPCDFU_UNENCRYPTED_PREFIX) - printf("Possible unencrypted NXP LPC DFU prefix with " - "the following properties\n" - "Payload length: %d kiByte\n", - data[2] >>1 | (data[3] << 7) ); - else - errx(EX_IOERR, "Unknown DFU prefix type"); - } -} - -void dfu_store_file(struct dfu_file *file, int write_suffix, int write_prefix) -{ - uint32_t crc = 0xffffffff; - int f; - - f = open(file->name, O_WRONLY | O_BINARY | O_TRUNC | O_CREAT, 0666); - if (f < 0) - err(EX_IOERR, "Could not open file %s for writing", file->name); - - /* write prefix, if any */ - if (write_prefix) { - if (file->prefix_type == LMDFU_PREFIX) { - uint8_t lmdfu_prefix[LMDFU_PREFIX_LENGTH]; - uint32_t addr = file->lmdfu_address / 1024; - - /* lmdfu_dfu_prefix payload length excludes prefix and suffix */ - uint32_t len = file->size.total - - file->size.prefix - file->size.suffix; - - lmdfu_prefix[0] = 0x01; /* STELLARIS_DFU_PROG */ - lmdfu_prefix[1] = 0x00; /* Reserved */ - lmdfu_prefix[2] = (uint8_t)(addr & 0xff); - lmdfu_prefix[3] = (uint8_t)(addr >> 8); - lmdfu_prefix[4] = (uint8_t)(len & 0xff); - lmdfu_prefix[5] = (uint8_t)(len >> 8) & 0xff; - lmdfu_prefix[6] = (uint8_t)(len >> 16) & 0xff; - lmdfu_prefix[7] = (uint8_t)(len >> 24); - - crc = dfu_file_write_crc(f, crc, lmdfu_prefix, LMDFU_PREFIX_LENGTH); - } - if (file->prefix_type == LPCDFU_UNENCRYPTED_PREFIX) { - uint8_t lpcdfu_prefix[LPCDFU_PREFIX_LENGTH] = {0}; - int i; - - /* Payload is firmware and prefix rounded to 512 bytes */ - uint32_t len = (file->size.total - file->size.suffix + 511) /512; - - lpcdfu_prefix[0] = 0x1a; /* Unencypted*/ - lpcdfu_prefix[1] = 0x3f; /* Reserved */ - lpcdfu_prefix[2] = (uint8_t)(len & 0xff); - lpcdfu_prefix[3] = (uint8_t)((len >> 8) & 0xff); - for (i = 12; i < LPCDFU_PREFIX_LENGTH; i++) - lpcdfu_prefix[i] = 0xff; - - crc = dfu_file_write_crc(f, crc, lpcdfu_prefix, LPCDFU_PREFIX_LENGTH); - } - } - /* write firmware binary */ - crc = dfu_file_write_crc(f, crc, file->firmware + file->size.prefix, - file->size.total - file->size.prefix - file->size.suffix); - - /* write suffix, if any */ - if (write_suffix) { - uint8_t dfusuffix[DFU_SUFFIX_LENGTH]; - - dfusuffix[0] = file->bcdDevice & 0xff; - dfusuffix[1] = file->bcdDevice >> 8; - dfusuffix[2] = file->idProduct & 0xff; - dfusuffix[3] = file->idProduct >> 8; - dfusuffix[4] = file->idVendor & 0xff; - dfusuffix[5] = file->idVendor >> 8; - dfusuffix[6] = file->bcdDFU & 0xff; - dfusuffix[7] = file->bcdDFU >> 8; - dfusuffix[8] = 'U'; - dfusuffix[9] = 'F'; - dfusuffix[10] = 'D'; - dfusuffix[11] = DFU_SUFFIX_LENGTH; - - crc = dfu_file_write_crc(f, crc, dfusuffix, - DFU_SUFFIX_LENGTH - 4); - - dfusuffix[12] = crc; - dfusuffix[13] = crc >> 8; - dfusuffix[14] = crc >> 16; - dfusuffix[15] = crc >> 24; - - crc = dfu_file_write_crc(f, crc, dfusuffix + 12, 4); - } - close(f); -} - -void show_suffix_and_prefix(struct dfu_file *file) -{ - if (file->size.prefix == LMDFU_PREFIX_LENGTH) { - printf("The file %s contains a TI Stellaris DFU prefix with the following properties:\n", file->name); - printf("Address:\t0x%08x\n", file->lmdfu_address); - } else if (file->size.prefix == LPCDFU_PREFIX_LENGTH) { - uint8_t * prefix = file->firmware; - printf("The file %s contains a NXP unencrypted LPC DFU prefix with the following properties:\n", file->name); - printf("Size:\t%5d kiB\n", prefix[2]>>1|prefix[3]<<7); - } else if (file->size.prefix != 0) { - printf("The file %s contains an unknown prefix\n", file->name); - } - if (file->size.suffix > 0) { - printf("The file %s contains a DFU suffix with the following properties:\n", file->name); - printf("BCD device:\t0x%04X\n", file->bcdDevice); - printf("Product ID:\t0x%04X\n",file->idProduct); - printf("Vendor ID:\t0x%04X\n", file->idVendor); - printf("BCD DFU:\t0x%04X\n", file->bcdDFU); - printf("Length:\t\t%i\n", file->size.suffix); - printf("CRC:\t\t0x%08X\n", file->dwCRC); - } -} diff --git a/macosx/src/dfu-util/src/dfu_file.h b/macosx/src/dfu-util/src/dfu_file.h deleted file mode 100644 index abebd44f4..000000000 --- a/macosx/src/dfu-util/src/dfu_file.h +++ /dev/null @@ -1,60 +0,0 @@ - -#ifndef DFU_FILE_H -#define DFU_FILE_H - -#include - -struct dfu_file { - /* File name */ - const char *name; - /* Pointer to file loaded into memory */ - uint8_t *firmware; - /* Different sizes */ - struct { - int total; - int prefix; - int suffix; - } size; - /* From prefix fields */ - uint32_t lmdfu_address; - /* From prefix fields */ - uint32_t prefix_type; - - /* From DFU suffix fields */ - uint32_t dwCRC; - uint16_t bcdDFU; - uint16_t idVendor; - uint16_t idProduct; - uint16_t bcdDevice; -}; - -enum suffix_req { - NO_SUFFIX, - NEEDS_SUFFIX, - MAYBE_SUFFIX -}; - -enum prefix_req { - NO_PREFIX, - NEEDS_PREFIX, - MAYBE_PREFIX -}; - -enum prefix_type { - ZERO_PREFIX, - LMDFU_PREFIX, - LPCDFU_UNENCRYPTED_PREFIX -}; - -extern int verbose; - -void dfu_load_file(struct dfu_file *file, enum suffix_req check_suffix, enum prefix_req check_prefix); -void dfu_store_file(struct dfu_file *file, int write_suffix, int write_prefix); - -void dfu_progress_bar(const char *desc, unsigned long long curr, - unsigned long long max); -void *dfu_malloc(size_t size); -uint32_t dfu_file_write_crc(int f, uint32_t crc, const void *buf, int size); -void show_suffix_and_prefix(struct dfu_file *file); - -#endif /* DFU_FILE_H */ diff --git a/macosx/src/dfu-util/src/dfu_load.c b/macosx/src/dfu-util/src/dfu_load.c deleted file mode 100644 index 64f7009df..000000000 --- a/macosx/src/dfu-util/src/dfu_load.c +++ /dev/null @@ -1,196 +0,0 @@ -/* - * DFU transfer routines - * - * This is supposed to be a general DFU implementation, as specified in the - * USB DFU 1.0 and 1.1 specification. - * - * The code was originally intended to interface with a USB device running the - * "sam7dfu" firmware (see http://www.openpcd.org/) on an AT91SAM7 processor. - * - * Copyright 2007-2008 Harald Welte - * Copyright 2013 Hans Petter Selasky - * Copyright 2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include - -#include - -#include "portable.h" -#include "dfu.h" -#include "usb_dfu.h" -#include "dfu_file.h" -#include "dfu_load.h" -#include "quirks.h" - -int dfuload_do_upload(struct dfu_if *dif, int xfer_size, - int expected_size, int fd) -{ - int total_bytes = 0; - unsigned short transaction = 0; - unsigned char *buf; - int ret; - - buf = dfu_malloc(xfer_size); - - printf("Copying data from DFU device to PC\n"); - dfu_progress_bar("Upload", 0, 1); - - while (1) { - int rc; - rc = dfu_upload(dif->dev_handle, dif->interface, - xfer_size, transaction++, buf); - if (rc < 0) { - warnx("Error during upload"); - ret = rc; - goto out_free; - } - - dfu_file_write_crc(fd, 0, buf, rc); - total_bytes += rc; - - if (total_bytes < 0) - errx(EX_SOFTWARE, "Received too many bytes (wraparound)"); - - if (rc < xfer_size) { - /* last block, return */ - ret = total_bytes; - break; - } - dfu_progress_bar("Upload", total_bytes, expected_size); - } - ret = 0; - -out_free: - dfu_progress_bar("Upload", total_bytes, total_bytes); - if (total_bytes == 0) - printf("\nFailed.\n"); - free(buf); - if (verbose) - printf("Received a total of %i bytes\n", total_bytes); - if (expected_size != 0 && total_bytes != expected_size) - errx(EX_SOFTWARE, "Unexpected number of bytes uploaded from device"); - return ret; -} - -int dfuload_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file) -{ - int bytes_sent; - int expected_size; - unsigned char *buf; - unsigned short transaction = 0; - struct dfu_status dst; - int ret; - - printf("Copying data from PC to DFU device\n"); - - buf = file->firmware; - expected_size = file->size.total - file->size.suffix; - bytes_sent = 0; - - dfu_progress_bar("Download", 0, 1); - while (bytes_sent < expected_size) { - int bytes_left; - int chunk_size; - - bytes_left = expected_size - bytes_sent; - if (bytes_left < xfer_size) - chunk_size = bytes_left; - else - chunk_size = xfer_size; - - ret = dfu_download(dif->dev_handle, dif->interface, - chunk_size, transaction++, chunk_size ? buf : NULL); - if (ret < 0) { - warnx("Error during download"); - goto out; - } - bytes_sent += chunk_size; - buf += chunk_size; - - do { - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - errx(EX_IOERR, "Error during download get_status"); - goto out; - } - - if (dst.bState == DFU_STATE_dfuDNLOAD_IDLE || - dst.bState == DFU_STATE_dfuERROR) - break; - - /* Wait while device executes flashing */ - milli_sleep(dst.bwPollTimeout); - - } while (1); - if (dst.bStatus != DFU_STATUS_OK) { - printf(" failed!\n"); - printf("state(%u) = %s, status(%u) = %s\n", dst.bState, - dfu_state_to_string(dst.bState), dst.bStatus, - dfu_status_to_string(dst.bStatus)); - ret = -1; - goto out; - } - dfu_progress_bar("Download", bytes_sent, bytes_sent + bytes_left); - } - - /* send one zero sized download request to signalize end */ - ret = dfu_download(dif->dev_handle, dif->interface, - 0, transaction, NULL); - if (ret < 0) { - errx(EX_IOERR, "Error sending completion packet"); - goto out; - } - - dfu_progress_bar("Download", bytes_sent, bytes_sent); - - if (verbose) - printf("Sent a total of %i bytes\n", bytes_sent); - -get_status: - /* Transition to MANIFEST_SYNC state */ - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - warnx("unable to read DFU status after completion"); - goto out; - } - printf("state(%u) = %s, status(%u) = %s\n", dst.bState, - dfu_state_to_string(dst.bState), dst.bStatus, - dfu_status_to_string(dst.bStatus)); - - milli_sleep(dst.bwPollTimeout); - - /* FIXME: deal correctly with ManifestationTolerant=0 / WillDetach bits */ - switch (dst.bState) { - case DFU_STATE_dfuMANIFEST_SYNC: - case DFU_STATE_dfuMANIFEST: - /* some devices (e.g. TAS1020b) need some time before we - * can obtain the status */ - milli_sleep(1000); - goto get_status; - break; - case DFU_STATE_dfuIDLE: - break; - } - printf("Done!\n"); - -out: - return bytes_sent; -} diff --git a/macosx/src/dfu-util/src/dfu_load.h b/macosx/src/dfu-util/src/dfu_load.h deleted file mode 100644 index be23e9b4f..000000000 --- a/macosx/src/dfu-util/src/dfu_load.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef DFU_LOAD_H -#define DFU_LOAD_H - -int dfuload_do_upload(struct dfu_if *dif, int xfer_size, int expected_size, int fd); -int dfuload_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file); - -#endif /* DFU_LOAD_H */ diff --git a/macosx/src/dfu-util/src/dfu_util.c b/macosx/src/dfu-util/src/dfu_util.c deleted file mode 100644 index b94c7ccd3..000000000 --- a/macosx/src/dfu-util/src/dfu_util.c +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Functions for detecting DFU USB entities - * - * Written by Harald Welte - * Copyright 2007-2008 by OpenMoko, Inc. - * Copyright 2013 Hans Petter Selasky - * - * Based on existing code of dfu-programmer-0.4 - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu.h" -#include "usb_dfu.h" -#include "dfu_file.h" -#include "dfu_load.h" -#include "dfu_util.h" -#include "dfuse.h" -#include "quirks.h" - -#ifdef HAVE_USBPATH_H -#include -#endif - -/* - * Look for a descriptor in a concatenated descriptor list. Will - * return upon the first match of the given descriptor type. Returns length of - * found descriptor, limited to res_size - */ -static int find_descriptor(const uint8_t *desc_list, int list_len, - uint8_t desc_type, void *res_buf, int res_size) -{ - int p = 0; - - if (list_len < 2) - return (-1); - - while (p + 1 < list_len) { - int desclen; - - desclen = (int) desc_list[p]; - if (desclen == 0) { - warnx("Invalid descriptor list"); - return -1; - } - if (desc_list[p + 1] == desc_type) { - if (desclen > res_size) - desclen = res_size; - if (p + desclen > list_len) - desclen = list_len - p; - memcpy(res_buf, &desc_list[p], desclen); - return desclen; - } - p += (int) desc_list[p]; - } - return -1; -} - -static void probe_configuration(libusb_device *dev, struct libusb_device_descriptor *desc) -{ - struct usb_dfu_func_descriptor func_dfu; - libusb_device_handle *devh; - struct dfu_if *pdfu; - struct libusb_config_descriptor *cfg; - const struct libusb_interface_descriptor *intf; - const struct libusb_interface *uif; - char alt_name[MAX_DESC_STR_LEN + 1]; - char serial_name[MAX_DESC_STR_LEN + 1]; - int cfg_idx; - int intf_idx; - int alt_idx; - int ret; - int has_dfu; - - for (cfg_idx = 0; cfg_idx != desc->bNumConfigurations; cfg_idx++) { - memset(&func_dfu, 0, sizeof(func_dfu)); - has_dfu = 0; - - ret = libusb_get_config_descriptor(dev, cfg_idx, &cfg); - if (ret != 0) - return; - if (match_config_index > -1 && match_config_index != cfg->bConfigurationValue) { - libusb_free_config_descriptor(cfg); - continue; - } - - /* - * In some cases, noticably FreeBSD if uid != 0, - * the configuration descriptors are empty - */ - if (!cfg) - return; - - ret = find_descriptor(cfg->extra, cfg->extra_length, - USB_DT_DFU, &func_dfu, sizeof(func_dfu)); - if (ret > -1) - goto found_dfu; - - for (intf_idx = 0; intf_idx < cfg->bNumInterfaces; - intf_idx++) { - uif = &cfg->interface[intf_idx]; - if (!uif) - break; - - for (alt_idx = 0; alt_idx < cfg->interface[intf_idx].num_altsetting; - alt_idx++) { - intf = &uif->altsetting[alt_idx]; - - ret = find_descriptor(intf->extra, intf->extra_length, USB_DT_DFU, - &func_dfu, sizeof(func_dfu)); - if (ret > -1) - goto found_dfu; - - if (intf->bInterfaceClass != 0xfe || - intf->bInterfaceSubClass != 1) - continue; - - has_dfu = 1; - } - } - if (has_dfu) { - /* - * Finally try to retrieve it requesting the - * device directly This is not supported on - * all devices for non-standard types - */ - if (libusb_open(dev, &devh) == 0) { - ret = libusb_get_descriptor(devh, USB_DT_DFU, 0, - (void *)&func_dfu, sizeof(func_dfu)); - libusb_close(devh); - if (ret > -1) - goto found_dfu; - } - warnx("Device has DFU interface, " - "but has no DFU functional descriptor"); - - /* fake version 1.0 */ - func_dfu.bLength = 7; - func_dfu.bcdDFUVersion = libusb_cpu_to_le16(0x0100); - goto found_dfu; - } - libusb_free_config_descriptor(cfg); - continue; - -found_dfu: - if (func_dfu.bLength == 7) { - printf("Deducing device DFU version from functional descriptor " - "length\n"); - func_dfu.bcdDFUVersion = libusb_cpu_to_le16(0x0100); - } else if (func_dfu.bLength < 9) { - printf("Error obtaining DFU functional descriptor\n"); - printf("Please report this as a bug!\n"); - printf("Warning: Assuming DFU version 1.0\n"); - func_dfu.bcdDFUVersion = libusb_cpu_to_le16(0x0100); - printf("Warning: Transfer size can not be detected\n"); - func_dfu.wTransferSize = 0; - } - - for (intf_idx = 0; intf_idx < cfg->bNumInterfaces; - intf_idx++) { - if (match_iface_index > -1 && match_iface_index != intf_idx) - continue; - - uif = &cfg->interface[intf_idx]; - if (!uif) - break; - - for (alt_idx = 0; - alt_idx < uif->num_altsetting; alt_idx++) { - int dfu_mode; - - intf = &uif->altsetting[alt_idx]; - - if (intf->bInterfaceClass != 0xfe || - intf->bInterfaceSubClass != 1) - continue; - - dfu_mode = (intf->bInterfaceProtocol == 2); - /* e.g. DSO Nano has bInterfaceProtocol 0 instead of 2 */ - if (func_dfu.bcdDFUVersion == 0x011a && intf->bInterfaceProtocol == 0) - dfu_mode = 1; - - if (dfu_mode && - match_iface_alt_index > -1 && match_iface_alt_index != alt_idx) - continue; - - if (dfu_mode) { - if ((match_vendor_dfu >= 0 && match_vendor_dfu != desc->idVendor) || - (match_product_dfu >= 0 && match_product_dfu != desc->idProduct)) { - continue; - } - } else { - if ((match_vendor >= 0 && match_vendor != desc->idVendor) || - (match_product >= 0 && match_product != desc->idProduct)) { - continue; - } - } - - if (libusb_open(dev, &devh)) { - warnx("Cannot open DFU device %04x:%04x", desc->idVendor, desc->idProduct); - break; - } - if (intf->iInterface != 0) - ret = libusb_get_string_descriptor_ascii(devh, - intf->iInterface, (void *)alt_name, MAX_DESC_STR_LEN); - else - ret = -1; - if (ret < 1) - strcpy(alt_name, "UNKNOWN"); - if (desc->iSerialNumber != 0) - ret = libusb_get_string_descriptor_ascii(devh, - desc->iSerialNumber, (void *)serial_name, MAX_DESC_STR_LEN); - else - ret = -1; - if (ret < 1) - strcpy(serial_name, "UNKNOWN"); - libusb_close(devh); - - if (dfu_mode && - match_iface_alt_name != NULL && strcmp(alt_name, match_iface_alt_name)) - continue; - - if (dfu_mode) { - if (match_serial_dfu != NULL && strcmp(match_serial_dfu, serial_name)) - continue; - } else { - if (match_serial != NULL && strcmp(match_serial, serial_name)) - continue; - } - - pdfu = dfu_malloc(sizeof(*pdfu)); - - memset(pdfu, 0, sizeof(*pdfu)); - - pdfu->func_dfu = func_dfu; - pdfu->dev = libusb_ref_device(dev); - pdfu->quirks = get_quirks(desc->idVendor, - desc->idProduct, desc->bcdDevice); - pdfu->vendor = desc->idVendor; - pdfu->product = desc->idProduct; - pdfu->bcdDevice = desc->bcdDevice; - pdfu->configuration = cfg->bConfigurationValue; - pdfu->interface = intf->bInterfaceNumber; - pdfu->altsetting = intf->bAlternateSetting; - pdfu->devnum = libusb_get_device_address(dev); - pdfu->busnum = libusb_get_bus_number(dev); - pdfu->alt_name = strdup(alt_name); - if (pdfu->alt_name == NULL) - errx(EX_SOFTWARE, "Out of memory"); - pdfu->serial_name = strdup(serial_name); - if (pdfu->serial_name == NULL) - errx(EX_SOFTWARE, "Out of memory"); - if (dfu_mode) - pdfu->flags |= DFU_IFF_DFU; - if (pdfu->quirks & QUIRK_FORCE_DFU11) { - pdfu->func_dfu.bcdDFUVersion = - libusb_cpu_to_le16(0x0110); - } - pdfu->bMaxPacketSize0 = desc->bMaxPacketSize0; - - /* queue into list */ - pdfu->next = dfu_root; - dfu_root = pdfu; - } - } - libusb_free_config_descriptor(cfg); - } -} - -void probe_devices(libusb_context *ctx) -{ - libusb_device **list; - ssize_t num_devs; - ssize_t i; - - num_devs = libusb_get_device_list(ctx, &list); - for (i = 0; i < num_devs; ++i) { - struct libusb_device_descriptor desc; - struct libusb_device *dev = list[i]; - - if (match_bus > -1 && match_bus != libusb_get_bus_number(dev)) - continue; - if (match_device > -1 && match_device != libusb_get_device_address(dev)) - continue; - if (libusb_get_device_descriptor(dev, &desc)) - continue; - probe_configuration(dev, &desc); - } - libusb_free_device_list(list, 0); -} - -void disconnect_devices(void) -{ - struct dfu_if *pdfu; - struct dfu_if *prev = NULL; - - for (pdfu = dfu_root; pdfu != NULL; pdfu = pdfu->next) { - free(prev); - libusb_unref_device(pdfu->dev); - free(pdfu->alt_name); - free(pdfu->serial_name); - prev = pdfu; - } - free(prev); - dfu_root = NULL; -} - -void print_dfu_if(struct dfu_if *dfu_if) -{ - printf("Found %s: [%04x:%04x] ver=%04x, devnum=%u, cfg=%u, intf=%u, " - "alt=%u, name=\"%s\", serial=\"%s\"\n", - dfu_if->flags & DFU_IFF_DFU ? "DFU" : "Runtime", - dfu_if->vendor, dfu_if->product, - dfu_if->bcdDevice, dfu_if->devnum, - dfu_if->configuration, dfu_if->interface, - dfu_if->altsetting, dfu_if->alt_name, - dfu_if->serial_name); -} - -/* Walk the device tree and print out DFU devices */ -void list_dfu_interfaces(void) -{ - struct dfu_if *pdfu; - - for (pdfu = dfu_root; pdfu != NULL; pdfu = pdfu->next) - print_dfu_if(pdfu); -} diff --git a/macosx/src/dfu-util/src/dfu_util.h b/macosx/src/dfu-util/src/dfu_util.h deleted file mode 100644 index fc0c19dca..000000000 --- a/macosx/src/dfu-util/src/dfu_util.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef DFU_UTIL_H -#define DFU_UTIL_H - -/* USB string descriptor should contain max 126 UTF-16 characters - * but 253 would even accomodate any UTF-8 encoding */ -#define MAX_DESC_STR_LEN 253 - -enum mode { - MODE_NONE, - MODE_VERSION, - MODE_LIST, - MODE_DETACH, - MODE_UPLOAD, - MODE_DOWNLOAD -}; - -extern struct dfu_if *dfu_root; -extern int match_bus; -extern int match_device; -extern int match_vendor; -extern int match_product; -extern int match_vendor_dfu; -extern int match_product_dfu; -extern int match_config_index; -extern int match_iface_index; -extern int match_iface_alt_index; -extern const char *match_iface_alt_name; -extern const char *match_serial; -extern const char *match_serial_dfu; - -void probe_devices(libusb_context *); -void disconnect_devices(void); -void print_dfu_if(struct dfu_if *); -void list_dfu_interfaces(void); - -#endif /* DFU_UTIL_H */ diff --git a/macosx/src/dfu-util/src/dfuse.c b/macosx/src/dfu-util/src/dfuse.c deleted file mode 100644 index fce29fed6..000000000 --- a/macosx/src/dfu-util/src/dfuse.c +++ /dev/null @@ -1,652 +0,0 @@ -/* - * DfuSe specific functions - * - * This implements the ST Microsystems DFU extensions (DfuSe) - * as per the DfuSe 1.1a specification (ST documents AN3156, AN2606) - * The DfuSe file format is described in ST document UM0391. - * - * Copyright 2010-2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include - -#include "portable.h" -#include "dfu.h" -#include "usb_dfu.h" -#include "dfu_file.h" -#include "dfuse.h" -#include "dfuse_mem.h" - -#define DFU_TIMEOUT 5000 - -extern int verbose; -static unsigned int last_erased_page = 1; /* non-aligned value, won't match */ -static struct memsegment *mem_layout; -static unsigned int dfuse_address = 0; -static unsigned int dfuse_length = 0; -static int dfuse_force = 0; -static int dfuse_leave = 0; -static int dfuse_unprotect = 0; -static int dfuse_mass_erase = 0; - -unsigned int quad2uint(unsigned char *p) -{ - return (*p + (*(p + 1) << 8) + (*(p + 2) << 16) + (*(p + 3) << 24)); -} - -void dfuse_parse_options(const char *options) -{ - char *end; - const char *endword; - unsigned int number; - - /* address, possibly empty, must be first */ - if (*options != ':') { - endword = strchr(options, ':'); - if (!endword) - endword = options + strlen(options); /* GNU strchrnul */ - - number = strtoul(options, &end, 0); - if (end == endword) { - dfuse_address = number; - } else { - errx(EX_IOERR, "Invalid dfuse address: %s", options); - } - options = endword; - } - - while (*options) { - if (*options == ':') { - options++; - continue; - } - endword = strchr(options, ':'); - if (!endword) - endword = options + strlen(options); - - if (!strncmp(options, "force", endword - options)) { - dfuse_force++; - options += 5; - continue; - } - if (!strncmp(options, "leave", endword - options)) { - dfuse_leave = 1; - options += 5; - continue; - } - if (!strncmp(options, "unprotect", endword - options)) { - dfuse_unprotect = 1; - options += 9; - continue; - } - if (!strncmp(options, "mass-erase", endword - options)) { - dfuse_mass_erase = 1; - options += 10; - continue; - } - - /* any valid number is interpreted as upload length */ - number = strtoul(options, &end, 0); - if (end == endword) { - dfuse_length = number; - } else { - errx(EX_IOERR, "Invalid dfuse modifier: %s", options); - } - options = endword; - } -} - -/* DFU_UPLOAD request for DfuSe 1.1a */ -int dfuse_upload(struct dfu_if *dif, const unsigned short length, - unsigned char *data, unsigned short transaction) -{ - int status; - - status = libusb_control_transfer(dif->dev_handle, - /* bmRequestType */ LIBUSB_ENDPOINT_IN | - LIBUSB_REQUEST_TYPE_CLASS | - LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_UPLOAD, - /* wValue */ transaction, - /* wIndex */ dif->interface, - /* Data */ data, - /* wLength */ length, - DFU_TIMEOUT); - if (status < 0) { - errx(EX_IOERR, "%s: libusb_control_msg returned %d", - __FUNCTION__, status); - } - return status; -} - -/* DFU_DNLOAD request for DfuSe 1.1a */ -int dfuse_download(struct dfu_if *dif, const unsigned short length, - unsigned char *data, unsigned short transaction) -{ - int status; - - status = libusb_control_transfer(dif->dev_handle, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT | - LIBUSB_REQUEST_TYPE_CLASS | - LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_DNLOAD, - /* wValue */ transaction, - /* wIndex */ dif->interface, - /* Data */ data, - /* wLength */ length, - DFU_TIMEOUT); - if (status < 0) { - errx(EX_IOERR, "%s: libusb_control_transfer returned %d", - __FUNCTION__, status); - } - return status; -} - -/* DfuSe only commands */ -/* Leaves the device in dfuDNLOAD-IDLE state */ -int dfuse_special_command(struct dfu_if *dif, unsigned int address, - enum dfuse_command command) -{ - const char* dfuse_command_name[] = { "SET_ADDRESS" , "ERASE_PAGE", - "MASS_ERASE", "READ_UNPROTECT"}; - unsigned char buf[5]; - int length; - int ret; - struct dfu_status dst; - int firstpoll = 1; - - if (command == ERASE_PAGE) { - struct memsegment *segment; - int page_size; - - segment = find_segment(mem_layout, address); - if (!segment || !(segment->memtype & DFUSE_ERASABLE)) { - errx(EX_IOERR, "Page at 0x%08x can not be erased", - address); - } - page_size = segment->pagesize; - if (verbose > 1) - printf("Erasing page size %i at address 0x%08x, page " - "starting at 0x%08x\n", page_size, address, - address & ~(page_size - 1)); - buf[0] = 0x41; /* Erase command */ - length = 5; - last_erased_page = address & ~(page_size - 1); - } else if (command == SET_ADDRESS) { - if (verbose > 2) - printf(" Setting address pointer to 0x%08x\n", - address); - buf[0] = 0x21; /* Set Address Pointer command */ - length = 5; - } else if (command == MASS_ERASE) { - buf[0] = 0x41; /* Mass erase command when length = 1 */ - length = 1; - } else if (command == READ_UNPROTECT) { - buf[0] = 0x92; - length = 1; - } else { - errx(EX_IOERR, "Non-supported special command %d", command); - } - buf[1] = address & 0xff; - buf[2] = (address >> 8) & 0xff; - buf[3] = (address >> 16) & 0xff; - buf[4] = (address >> 24) & 0xff; - - ret = dfuse_download(dif, length, buf, 0); - if (ret < 0) { - errx(EX_IOERR, "Error during special command \"%s\" download", - dfuse_command_name[command]); - } - do { - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - errx(EX_IOERR, "Error during special command \"%s\" get_status", - dfuse_command_name[command]); - } - if (firstpoll) { - firstpoll = 0; - if (dst.bState != DFU_STATE_dfuDNBUSY) { - printf("state(%u) = %s, status(%u) = %s\n", dst.bState, - dfu_state_to_string(dst.bState), dst.bStatus, - dfu_status_to_string(dst.bStatus)); - errx(EX_IOERR, "Wrong state after command \"%s\" download", - dfuse_command_name[command]); - } - } - /* wait while command is executed */ - if (verbose) - printf(" Poll timeout %i ms\n", dst.bwPollTimeout); - milli_sleep(dst.bwPollTimeout); - if (command == READ_UNPROTECT) - return ret; - } while (dst.bState == DFU_STATE_dfuDNBUSY); - - if (dst.bStatus != DFU_STATUS_OK) { - errx(EX_IOERR, "%s not correctly executed", - dfuse_command_name[command]); - } - return ret; -} - -int dfuse_dnload_chunk(struct dfu_if *dif, unsigned char *data, int size, - int transaction) -{ - int bytes_sent; - struct dfu_status dst; - int ret; - - ret = dfuse_download(dif, size, size ? data : NULL, transaction); - if (ret < 0) { - errx(EX_IOERR, "Error during download"); - return ret; - } - bytes_sent = ret; - - do { - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - errx(EX_IOERR, "Error during download get_status"); - return ret; - } - milli_sleep(dst.bwPollTimeout); - } while (dst.bState != DFU_STATE_dfuDNLOAD_IDLE && - dst.bState != DFU_STATE_dfuERROR && - dst.bState != DFU_STATE_dfuMANIFEST); - - if (dst.bState == DFU_STATE_dfuMANIFEST) - printf("Transitioning to dfuMANIFEST state\n"); - - if (dst.bStatus != DFU_STATUS_OK) { - printf(" failed!\n"); - printf("state(%u) = %s, status(%u) = %s\n", dst.bState, - dfu_state_to_string(dst.bState), dst.bStatus, - dfu_status_to_string(dst.bStatus)); - return -1; - } - return bytes_sent; -} - -int dfuse_do_upload(struct dfu_if *dif, int xfer_size, int fd, - const char *dfuse_options) -{ - int total_bytes = 0; - int upload_limit = 0; - unsigned char *buf; - int transaction; - int ret; - - buf = dfu_malloc(xfer_size); - - if (dfuse_options) - dfuse_parse_options(dfuse_options); - if (dfuse_length) - upload_limit = dfuse_length; - if (dfuse_address) { - struct memsegment *segment; - - mem_layout = parse_memory_layout((char *)dif->alt_name); - if (!mem_layout) - errx(EX_IOERR, "Failed to parse memory layout"); - - segment = find_segment(mem_layout, dfuse_address); - if (!dfuse_force && - (!segment || !(segment->memtype & DFUSE_READABLE))) - errx(EX_IOERR, "Page at 0x%08x is not readable", - dfuse_address); - - if (!upload_limit) { - upload_limit = segment->end - dfuse_address + 1; - printf("Limiting upload to end of memory segment, " - "%i bytes\n", upload_limit); - } - dfuse_special_command(dif, dfuse_address, SET_ADDRESS); - dfu_abort_to_idle(dif); - } else { - /* Boot loader decides the start address, unknown to us */ - /* Use a short length to lower risk of running out of bounds */ - if (!upload_limit) - upload_limit = 0x4000; - printf("Limiting default upload to %i bytes\n", upload_limit); - } - - dfu_progress_bar("Upload", 0, 1); - - transaction = 2; - while (1) { - int rc; - - /* last chunk can be smaller than original xfer_size */ - if (upload_limit - total_bytes < xfer_size) - xfer_size = upload_limit - total_bytes; - rc = dfuse_upload(dif, xfer_size, buf, transaction++); - if (rc < 0) { - ret = rc; - goto out_free; - } - - dfu_file_write_crc(fd, 0, buf, rc); - total_bytes += rc; - - if (total_bytes < 0) - errx(EX_SOFTWARE, "Received too many bytes"); - - if (rc < xfer_size || total_bytes >= upload_limit) { - /* last block, return successfully */ - ret = total_bytes; - break; - } - dfu_progress_bar("Upload", total_bytes, upload_limit); - } - - dfu_progress_bar("Upload", total_bytes, total_bytes); - - dfu_abort_to_idle(dif); - if (dfuse_leave) { - dfuse_special_command(dif, dfuse_address, SET_ADDRESS); - dfuse_dnload_chunk(dif, NULL, 0, 2); /* Zero-size */ - } - - out_free: - free(buf); - - return ret; -} - -/* Writes an element of any size to the device, taking care of page erases */ -/* returns 0 on success, otherwise -EINVAL */ -int dfuse_dnload_element(struct dfu_if *dif, unsigned int dwElementAddress, - unsigned int dwElementSize, unsigned char *data, - int xfer_size) -{ - int p; - int ret; - struct memsegment *segment; - - /* Check at least that we can write to the last address */ - segment = - find_segment(mem_layout, dwElementAddress + dwElementSize - 1); - if (!segment || !(segment->memtype & DFUSE_WRITEABLE)) { - errx(EX_IOERR, "Last page at 0x%08x is not writeable", - dwElementAddress + dwElementSize - 1); - } - - dfu_progress_bar("Download", 0, 1); - - for (p = 0; p < (int)dwElementSize; p += xfer_size) { - int page_size; - unsigned int erase_address; - unsigned int address = dwElementAddress + p; - int chunk_size = xfer_size; - - segment = find_segment(mem_layout, address); - if (!segment || !(segment->memtype & DFUSE_WRITEABLE)) { - errx(EX_IOERR, "Page at 0x%08x is not writeable", - address); - } - page_size = segment->pagesize; - - /* check if this is the last chunk */ - if (p + chunk_size > (int)dwElementSize) - chunk_size = dwElementSize - p; - - /* Erase only for flash memory downloads */ - if ((segment->memtype & DFUSE_ERASABLE) && !dfuse_mass_erase) { - /* erase all involved pages */ - for (erase_address = address; - erase_address < address + chunk_size; - erase_address += page_size) - if ((erase_address & ~(page_size - 1)) != - last_erased_page) - dfuse_special_command(dif, - erase_address, - ERASE_PAGE); - - if (((address + chunk_size - 1) & ~(page_size - 1)) != - last_erased_page) { - if (verbose > 2) - printf(" Chunk extends into next page," - " erase it as well\n"); - dfuse_special_command(dif, - address + chunk_size - 1, - ERASE_PAGE); - } - } - - if (verbose) { - printf(" Download from image offset " - "%08x to memory %08x-%08x, size %i\n", - p, address, address + chunk_size - 1, - chunk_size); - } else { - dfu_progress_bar("Download", p, dwElementSize); - } - - dfuse_special_command(dif, address, SET_ADDRESS); - - /* transaction = 2 for no address offset */ - ret = dfuse_dnload_chunk(dif, data + p, chunk_size, 2); - if (ret != chunk_size) { - errx(EX_IOERR, "Failed to write whole chunk: " - "%i of %i bytes", ret, chunk_size); - return -EINVAL; - } - } - if (!verbose) - dfu_progress_bar("Download", dwElementSize, dwElementSize); - return 0; -} - -static void -dfuse_memcpy(unsigned char *dst, unsigned char **src, int *rem, int size) -{ - if (size > *rem) { - errx(EX_IOERR, "Corrupt DfuSe file: " - "Cannot read %d bytes from %d bytes", size, *rem); - } - if (dst != NULL) - memcpy(dst, *src, size); - (*src) += size; - (*rem) -= size; -} - -/* Download raw binary file to DfuSe device */ -int dfuse_do_bin_dnload(struct dfu_if *dif, int xfer_size, - struct dfu_file *file, unsigned int start_address) -{ - unsigned int dwElementAddress; - unsigned int dwElementSize; - unsigned char *data; - int ret; - - dwElementAddress = start_address; - dwElementSize = file->size.total - - file->size.suffix - file->size.prefix; - - printf("Downloading to address = 0x%08x, size = %i\n", - dwElementAddress, dwElementSize); - - data = file->firmware + file->size.prefix; - - ret = dfuse_dnload_element(dif, dwElementAddress, dwElementSize, data, - xfer_size); - if (ret != 0) - goto out_free; - - printf("File downloaded successfully\n"); - ret = dwElementSize; - - out_free: - return ret; -} - -/* Parse a DfuSe file and download contents to device */ -int dfuse_do_dfuse_dnload(struct dfu_if *dif, int xfer_size, - struct dfu_file *file) -{ - uint8_t dfuprefix[11]; - uint8_t targetprefix[274]; - uint8_t elementheader[8]; - int image; - int element; - int bTargets; - int bAlternateSetting; - int dwNbElements; - unsigned int dwElementAddress; - unsigned int dwElementSize; - uint8_t *data; - int ret; - int rem; - int bFirstAddressSaved = 0; - - rem = file->size.total - file->size.prefix - file->size.suffix; - data = file->firmware + file->size.prefix; - - /* Must be larger than a minimal DfuSe header and suffix */ - if (rem < (int)(sizeof(dfuprefix) + - sizeof(targetprefix) + sizeof(elementheader))) { - errx(EX_SOFTWARE, "File too small for a DfuSe file"); - } - - dfuse_memcpy(dfuprefix, &data, &rem, sizeof(dfuprefix)); - - if (strncmp((char *)dfuprefix, "DfuSe", 5)) { - errx(EX_IOERR, "No valid DfuSe signature"); - return -EINVAL; - } - if (dfuprefix[5] != 0x01) { - errx(EX_IOERR, "DFU format revision %i not supported", - dfuprefix[5]); - return -EINVAL; - } - bTargets = dfuprefix[10]; - printf("file contains %i DFU images\n", bTargets); - - for (image = 1; image <= bTargets; image++) { - printf("parsing DFU image %i\n", image); - dfuse_memcpy(targetprefix, &data, &rem, sizeof(targetprefix)); - if (strncmp((char *)targetprefix, "Target", 6)) { - errx(EX_IOERR, "No valid target signature"); - return -EINVAL; - } - bAlternateSetting = targetprefix[6]; - dwNbElements = quad2uint((unsigned char *)targetprefix + 270); - printf("image for alternate setting %i, ", bAlternateSetting); - printf("(%i elements, ", dwNbElements); - printf("total size = %i)\n", - quad2uint((unsigned char *)targetprefix + 266)); - if (bAlternateSetting != dif->altsetting) - printf("Warning: Image does not match current alternate" - " setting.\n" - "Please rerun with the correct -a option setting" - " to download this image!\n"); - for (element = 1; element <= dwNbElements; element++) { - printf("parsing element %i, ", element); - dfuse_memcpy(elementheader, &data, &rem, sizeof(elementheader)); - dwElementAddress = - quad2uint((unsigned char *)elementheader); - dwElementSize = - quad2uint((unsigned char *)elementheader + 4); - printf("address = 0x%08x, ", dwElementAddress); - printf("size = %i\n", dwElementSize); - - if (!bFirstAddressSaved) { - bFirstAddressSaved = 1; - dfuse_address = dwElementAddress; - } - /* sanity check */ - if ((int)dwElementSize > rem) - errx(EX_SOFTWARE, "File too small for element size"); - - if (bAlternateSetting == dif->altsetting) { - ret = dfuse_dnload_element(dif, dwElementAddress, - dwElementSize, data, xfer_size); - } else { - ret = 0; - } - - /* advance read pointer */ - dfuse_memcpy(NULL, &data, &rem, dwElementSize); - - if (ret != 0) - return ret; - } - } - - if (rem != 0) - warnx("%d bytes leftover", rem); - - printf("done parsing DfuSe file\n"); - - return 0; -} - -int dfuse_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file, - const char *dfuse_options) -{ - int ret; - - if (dfuse_options) - dfuse_parse_options(dfuse_options); - mem_layout = parse_memory_layout((char *)dif->alt_name); - if (!mem_layout) { - errx(EX_IOERR, "Failed to parse memory layout"); - } - if (dfuse_unprotect) { - if (!dfuse_force) { - errx(EX_IOERR, "The read unprotect command " - "will erase the flash memory" - "and can only be used with force\n"); - } - dfuse_special_command(dif, 0, READ_UNPROTECT); - printf("Device disconnects, erases flash and resets now\n"); - exit(0); - } - if (dfuse_mass_erase) { - if (!dfuse_force) { - errx(EX_IOERR, "The mass erase command " - "can only be used with force"); - } - printf("Performing mass erase, this can take a moment\n"); - dfuse_special_command(dif, 0, MASS_ERASE); - } - if (dfuse_address) { - if (file->bcdDFU == 0x11a) { - errx(EX_IOERR, "This is a DfuSe file, not " - "meant for raw download"); - } - ret = dfuse_do_bin_dnload(dif, xfer_size, file, dfuse_address); - } else { - if (file->bcdDFU != 0x11a) { - warnx("Only DfuSe file version 1.1a is supported"); - errx(EX_IOERR, "(for raw binary download, use the " - "--dfuse-address option)"); - } - ret = dfuse_do_dfuse_dnload(dif, xfer_size, file); - } - free_segment_list(mem_layout); - - dfu_abort_to_idle(dif); - - if (dfuse_leave) { - dfuse_special_command(dif, dfuse_address, SET_ADDRESS); - dfuse_dnload_chunk(dif, NULL, 0, 2); /* Zero-size */ - } - return ret; -} diff --git a/macosx/src/dfu-util/src/dfuse.h b/macosx/src/dfu-util/src/dfuse.h deleted file mode 100644 index ed1108cfc..000000000 --- a/macosx/src/dfu-util/src/dfuse.h +++ /dev/null @@ -1,35 +0,0 @@ -/* This implements the ST Microsystems DFU extensions (DfuSe) - * as per the DfuSe 1.1a specification (Document UM0391) - * - * (C) 2010-2012 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef DFUSE_H -#define DFUSE_H - -#include "dfu.h" - -enum dfuse_command { SET_ADDRESS, ERASE_PAGE, MASS_ERASE, READ_UNPROTECT }; - -int dfuse_special_command(struct dfu_if *dif, unsigned int address, - enum dfuse_command command); -int dfuse_do_upload(struct dfu_if *dif, int xfer_size, int fd, - const char *dfuse_options); -int dfuse_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file, - const char *dfuse_options); - -#endif /* DFUSE_H */ diff --git a/macosx/src/dfu-util/src/dfuse_mem.c b/macosx/src/dfu-util/src/dfuse_mem.c deleted file mode 100644 index a91aacf5f..000000000 --- a/macosx/src/dfu-util/src/dfuse_mem.c +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Helper functions for reading the memory map of a device - * following the ST DfuSe 1.1a specification. - * - * Copyright 2011-2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include - -#include "portable.h" -#include "dfu_file.h" -#include "dfuse_mem.h" - -int add_segment(struct memsegment **segment_list, struct memsegment segment) -{ - struct memsegment *new_element; - - new_element = dfu_malloc(sizeof(struct memsegment)); - *new_element = segment; - new_element->next = NULL; - - if (*segment_list == NULL) - /* list can be empty on first call */ - *segment_list = new_element; - else { - struct memsegment *next_element; - - /* find last element in list */ - next_element = *segment_list; - while (next_element->next != NULL) - next_element = next_element->next; - next_element->next = new_element; - } - return 0; -} - -struct memsegment *find_segment(struct memsegment *segment_list, - unsigned int address) -{ - while (segment_list != NULL) { - if (segment_list->start <= address && - segment_list->end >= address) - return segment_list; - segment_list = segment_list->next; - } - return NULL; -} - -void free_segment_list(struct memsegment *segment_list) -{ - struct memsegment *next_element; - - while (segment_list->next != NULL) { - next_element = segment_list->next; - free(segment_list); - segment_list = next_element; - } - free(segment_list); -} - -/* Parse memory map from interface descriptor string - * encoded as per ST document UM0424 section 4.3.2. - */ -struct memsegment *parse_memory_layout(char *intf_desc) -{ - - char multiplier, memtype; - unsigned int address; - int sectors, size; - char *name, *typestring; - int ret; - int count = 0; - char separator; - int scanned; - struct memsegment *segment_list = NULL; - struct memsegment segment; - - name = dfu_malloc(strlen(intf_desc)); - - ret = sscanf(intf_desc, "@%[^/]%n", name, &scanned); - if (ret < 1) { - free(name); - warnx("Could not read name, sscanf returned %d", ret); - return NULL; - } - printf("DfuSe interface name: \"%s\"\n", name); - - intf_desc += scanned; - typestring = dfu_malloc(strlen(intf_desc)); - - while (ret = sscanf(intf_desc, "/0x%x/%n", &address, &scanned), - ret > 0) { - - intf_desc += scanned; - while (ret = sscanf(intf_desc, "%d*%d%c%[^,/]%n", - §ors, &size, &multiplier, typestring, - &scanned), ret > 2) { - intf_desc += scanned; - - count++; - memtype = 0; - if (ret == 4) { - if (strlen(typestring) == 1 - && typestring[0] != '/') - memtype = typestring[0]; - else { - warnx("Parsing type identifier '%s' " - "failed for segment %i", - typestring, count); - continue; - } - } - - /* Quirk for STM32F4 devices */ - if (strcmp(name, "Device Feature") == 0) - memtype = 'e'; - - switch (multiplier) { - case 'B': - break; - case 'K': - size *= 1024; - break; - case 'M': - size *= 1024 * 1024; - break; - case 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': - case 'g': - if (!memtype) { - warnx("Non-valid multiplier '%c', " - "interpreted as type " - "identifier instead", - multiplier); - memtype = multiplier; - break; - } - /* fallthrough if memtype was already set */ - default: - warnx("Non-valid multiplier '%c', " - "assuming bytes", multiplier); - } - - if (!memtype) { - warnx("No valid type for segment %d\n", count); - continue; - } - - segment.start = address; - segment.end = address + sectors * size - 1; - segment.pagesize = size; - segment.memtype = memtype & 7; - add_segment(&segment_list, segment); - - if (verbose) - printf("Memory segment at 0x%08x %3d x %4d = " - "%5d (%s%s%s)\n", - address, sectors, size, sectors * size, - memtype & DFUSE_READABLE ? "r" : "", - memtype & DFUSE_ERASABLE ? "e" : "", - memtype & DFUSE_WRITEABLE ? "w" : ""); - - address += sectors * size; - - separator = *intf_desc; - if (separator == ',') - intf_desc += 1; - else - break; - } /* while per segment */ - - } /* while per address */ - free(name); - free(typestring); - - return segment_list; -} diff --git a/macosx/src/dfu-util/src/dfuse_mem.h b/macosx/src/dfu-util/src/dfuse_mem.h deleted file mode 100644 index 0181f0c16..000000000 --- a/macosx/src/dfu-util/src/dfuse_mem.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Helper functions for reading the memory map in a device - * following the ST DfuSe 1.1a specification. - * - * (C) 2011 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef DFUSE_MEM_H -#define DFUSE_MEM_H - -#define DFUSE_READABLE 1 -#define DFUSE_ERASABLE 2 -#define DFUSE_WRITEABLE 4 - -struct memsegment { - unsigned int start; - unsigned int end; - int pagesize; - int memtype; - struct memsegment *next; -}; - -int add_segment(struct memsegment **list, struct memsegment new_element); - -struct memsegment *find_segment(struct memsegment *list, unsigned int address); - -void free_segment_list(struct memsegment *list); - -struct memsegment *parse_memory_layout(char *intf_desc_str); - -#endif /* DFUSE_MEM_H */ diff --git a/macosx/src/dfu-util/src/main.c b/macosx/src/dfu-util/src/main.c deleted file mode 100644 index acaed2f08..000000000 --- a/macosx/src/dfu-util/src/main.c +++ /dev/null @@ -1,699 +0,0 @@ -/* - * dfu-util - * - * Copyright 2007-2008 by OpenMoko, Inc. - * Copyright 2013-2014 Hans Petter Selasky - * - * Written by Harald Welte - * - * Based on existing code of dfu-programmer-0.4 - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu.h" -#include "usb_dfu.h" -#include "dfu_file.h" -#include "dfu_load.h" -#include "dfu_util.h" -#include "dfuse.h" -#include "quirks.h" - -#ifdef HAVE_USBPATH_H -#include -#endif - -int verbose = 0; - -struct dfu_if *dfu_root = NULL; - -int match_bus = -1; -int match_device = -1; -int match_vendor = -1; -int match_product = -1; -int match_vendor_dfu = -1; -int match_product_dfu = -1; -int match_config_index = -1; -int match_iface_index = -1; -int match_iface_alt_index = -1; -const char *match_iface_alt_name = NULL; -const char *match_serial = NULL; -const char *match_serial_dfu = NULL; - -static int parse_match_value(const char *str, int default_value) -{ - char *remainder; - int value; - - if (str == NULL) { - value = default_value; - } else if (*str == '*') { - value = -1; /* Match anything */ - } else if (*str == '-') { - value = 0x10000; /* Impossible vendor/product ID */ - } else { - value = strtoul(str, &remainder, 16); - if (remainder == str) { - value = default_value; - } - } - return value; -} - -static void parse_vendprod(const char *str) -{ - const char *comma; - const char *colon; - - /* Default to match any DFU device in runtime or DFU mode */ - match_vendor = -1; - match_product = -1; - match_vendor_dfu = -1; - match_product_dfu = -1; - - comma = strchr(str, ','); - if (comma == str) { - /* DFU mode vendor/product being specified without any runtime - * vendor/product specification, so don't match any runtime device */ - match_vendor = match_product = 0x10000; - } else { - colon = strchr(str, ':'); - if (colon != NULL) { - ++colon; - if ((comma != NULL) && (colon > comma)) { - colon = NULL; - } - } - match_vendor = parse_match_value(str, match_vendor); - match_product = parse_match_value(colon, match_product); - if (comma != NULL) { - /* Both runtime and DFU mode vendor/product specifications are - * available, so default DFU mode match components to the given - * runtime match components */ - match_vendor_dfu = match_vendor; - match_product_dfu = match_product; - } - } - if (comma != NULL) { - ++comma; - colon = strchr(comma, ':'); - if (colon != NULL) { - ++colon; - } - match_vendor_dfu = parse_match_value(comma, match_vendor_dfu); - match_product_dfu = parse_match_value(colon, match_product_dfu); - } -} - -static void parse_serial(char *str) -{ - char *comma; - - match_serial = str; - comma = strchr(str, ','); - if (comma == NULL) { - match_serial_dfu = match_serial; - } else { - *comma++ = 0; - match_serial_dfu = comma; - } - if (*match_serial == 0) match_serial = NULL; - if (*match_serial_dfu == 0) match_serial_dfu = NULL; -} - -#ifdef HAVE_USBPATH_H - -static int resolve_device_path(char *path) -{ - int res; - - res = usb_path2devnum(path); - if (res < 0) - return -EINVAL; - if (!res) - return 0; - - match_bus = atoi(path); - match_device = res; - - return 0; -} - -#else /* HAVE_USBPATH_H */ - -static int resolve_device_path(char *path) -{ - (void)path; /* Eliminate unused variable warning */ - errx(EX_SOFTWARE, "USB device paths are not supported by this dfu-util.\n"); -} - -#endif /* !HAVE_USBPATH_H */ - -static void help(void) -{ - fprintf(stderr, "Usage: dfu-util [options] ...\n" - " -h --help\t\t\tPrint this help message\n" - " -V --version\t\t\tPrint the version number\n" - " -v --verbose\t\t\tPrint verbose debug statements\n" - " -l --list\t\t\tList currently attached DFU capable devices\n"); - fprintf(stderr, " -e --detach\t\t\tDetach currently attached DFU capable devices\n" - " -E --detach-delay seconds\tTime to wait before reopening a device after detach\n" - " -d --device :[,:]\n" - "\t\t\t\tSpecify Vendor/Product ID(s) of DFU device\n" - " -p --path \tSpecify path to DFU device\n" - " -c --cfg \t\tSpecify the Configuration of DFU device\n" - " -i --intf \t\tSpecify the DFU Interface number\n" - " -S --serial [,]\n" - "\t\t\t\tSpecify Serial String of DFU device\n" - " -a --alt \t\tSpecify the Altsetting of the DFU Interface\n" - "\t\t\t\tby name or by number\n"); - fprintf(stderr, " -t --transfer-size \tSpecify the number of bytes per USB Transfer\n" - " -U --upload \t\tRead firmware from device into \n" - " -Z --upload-size \tSpecify the expected upload size in bytes\n" - " -D --download \t\tWrite firmware from into device\n" - " -R --reset\t\t\tIssue USB Reset signalling once we're finished\n" - " -s --dfuse-address
\tST DfuSe mode, specify target address for\n" - "\t\t\t\traw file download or upload. Not applicable for\n" - "\t\t\t\tDfuSe file (.dfu) downloads\n" - ); - exit(EX_USAGE); -} - -static void print_version(void) -{ - printf(PACKAGE_STRING "\n\n"); - printf("Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.\n" - "Copyright 2010-2014 Tormod Volden and Stefan Schmidt\n" - "This program is Free Software and has ABSOLUTELY NO WARRANTY\n" - "Please report bugs to " PACKAGE_BUGREPORT "\n\n"); -} - -static struct option opts[] = { - { "help", 0, 0, 'h' }, - { "version", 0, 0, 'V' }, - { "verbose", 0, 0, 'v' }, - { "list", 0, 0, 'l' }, - { "detach", 0, 0, 'e' }, - { "detach-delay", 1, 0, 'E' }, - { "device", 1, 0, 'd' }, - { "path", 1, 0, 'p' }, - { "configuration", 1, 0, 'c' }, - { "cfg", 1, 0, 'c' }, - { "interface", 1, 0, 'i' }, - { "intf", 1, 0, 'i' }, - { "altsetting", 1, 0, 'a' }, - { "alt", 1, 0, 'a' }, - { "serial", 1, 0, 'S' }, - { "transfer-size", 1, 0, 't' }, - { "upload", 1, 0, 'U' }, - { "upload-size", 1, 0, 'Z' }, - { "download", 1, 0, 'D' }, - { "reset", 0, 0, 'R' }, - { "dfuse-address", 1, 0, 's' }, - { 0, 0, 0, 0 } -}; - -int main(int argc, char **argv) -{ - int expected_size = 0; - unsigned int transfer_size = 0; - enum mode mode = MODE_NONE; - struct dfu_status status; - libusb_context *ctx; - struct dfu_file file; - char *end; - int final_reset = 0; - int ret; - int dfuse_device = 0; - int fd; - const char *dfuse_options = NULL; - int detach_delay = 5; - uint16_t runtime_vendor; - uint16_t runtime_product; - - memset(&file, 0, sizeof(file)); - - /* make sure all prints are flushed */ - setvbuf(stdout, NULL, _IONBF, 0); - - while (1) { - int c, option_index = 0; - c = getopt_long(argc, argv, "hVvleE:d:p:c:i:a:S:t:U:D:Rs:Z:", opts, - &option_index); - if (c == -1) - break; - - switch (c) { - case 'h': - help(); - break; - case 'V': - mode = MODE_VERSION; - break; - case 'v': - verbose++; - break; - case 'l': - mode = MODE_LIST; - break; - case 'e': - mode = MODE_DETACH; - match_iface_alt_index = 0; - match_iface_index = 0; - break; - case 'E': - detach_delay = atoi(optarg); - break; - case 'd': - parse_vendprod(optarg); - break; - case 'p': - /* Parse device path */ - ret = resolve_device_path(optarg); - if (ret < 0) - errx(EX_SOFTWARE, "Unable to parse '%s'", optarg); - if (!ret) - errx(EX_SOFTWARE, "Cannot find '%s'", optarg); - break; - case 'c': - /* Configuration */ - match_config_index = atoi(optarg); - break; - case 'i': - /* Interface */ - match_iface_index = atoi(optarg); - break; - case 'a': - /* Interface Alternate Setting */ - match_iface_alt_index = strtoul(optarg, &end, 0); - if (*end) { - match_iface_alt_name = optarg; - match_iface_alt_index = -1; - } - break; - case 'S': - parse_serial(optarg); - break; - case 't': - transfer_size = atoi(optarg); - break; - case 'U': - mode = MODE_UPLOAD; - file.name = optarg; - break; - case 'Z': - expected_size = atoi(optarg); - break; - case 'D': - mode = MODE_DOWNLOAD; - file.name = optarg; - break; - case 'R': - final_reset = 1; - break; - case 's': - dfuse_options = optarg; - break; - default: - help(); - break; - } - } - - print_version(); - if (mode == MODE_VERSION) { - exit(0); - } - - if (mode == MODE_NONE) { - fprintf(stderr, "You need to specify one of -D or -U\n"); - help(); - } - - if (match_config_index == 0) { - /* Handle "-c 0" (unconfigured device) as don't care */ - match_config_index = -1; - } - - if (mode == MODE_DOWNLOAD) { - dfu_load_file(&file, MAYBE_SUFFIX, MAYBE_PREFIX); - /* If the user didn't specify product and/or vendor IDs to match, - * use any IDs from the file suffix for device matching */ - if (match_vendor < 0 && file.idVendor != 0xffff) { - match_vendor = file.idVendor; - printf("Match vendor ID from file: %04x\n", match_vendor); - } - if (match_product < 0 && file.idProduct != 0xffff) { - match_product = file.idProduct; - printf("Match product ID from file: %04x\n", match_product); - } - } - - ret = libusb_init(&ctx); - if (ret) - errx(EX_IOERR, "unable to initialize libusb: %i", ret); - - if (verbose > 2) { - libusb_set_debug(ctx, 255); - } - - probe_devices(ctx); - - if (mode == MODE_LIST) { - list_dfu_interfaces(); - exit(0); - } - - if (dfu_root == NULL) { - errx(EX_IOERR, "No DFU capable USB device available"); - } else if (dfu_root->next != NULL) { - /* We cannot safely support more than one DFU capable device - * with same vendor/product ID, since during DFU we need to do - * a USB bus reset, after which the target device will get a - * new address */ - errx(EX_IOERR, "More than one DFU capable USB device found! " - "Try `--list' and specify the serial number " - "or disconnect all but one device\n"); - } - - /* We have exactly one device. Its libusb_device is now in dfu_root->dev */ - - printf("Opening DFU capable USB device...\n"); - ret = libusb_open(dfu_root->dev, &dfu_root->dev_handle); - if (ret || !dfu_root->dev_handle) - errx(EX_IOERR, "Cannot open device"); - - printf("ID %04x:%04x\n", dfu_root->vendor, dfu_root->product); - - printf("Run-time device DFU version %04x\n", - libusb_le16_to_cpu(dfu_root->func_dfu.bcdDFUVersion)); - - /* Transition from run-Time mode to DFU mode */ - if (!(dfu_root->flags & DFU_IFF_DFU)) { - int err; - /* In the 'first round' during runtime mode, there can only be one - * DFU Interface descriptor according to the DFU Spec. */ - - /* FIXME: check if the selected device really has only one */ - - runtime_vendor = dfu_root->vendor; - runtime_product = dfu_root->product; - - printf("Claiming USB DFU Runtime Interface...\n"); - if (libusb_claim_interface(dfu_root->dev_handle, dfu_root->interface) < 0) { - errx(EX_IOERR, "Cannot claim interface %d", - dfu_root->interface); - } - - if (libusb_set_interface_alt_setting(dfu_root->dev_handle, dfu_root->interface, 0) < 0) { - errx(EX_IOERR, "Cannot set alt interface zero"); - } - - printf("Determining device status: "); - - err = dfu_get_status(dfu_root, &status); - if (err == LIBUSB_ERROR_PIPE) { - printf("Device does not implement get_status, assuming appIDLE\n"); - status.bStatus = DFU_STATUS_OK; - status.bwPollTimeout = 0; - status.bState = DFU_STATE_appIDLE; - status.iString = 0; - } else if (err < 0) { - errx(EX_IOERR, "error get_status"); - } else { - printf("state = %s, status = %d\n", - dfu_state_to_string(status.bState), status.bStatus); - } - milli_sleep(status.bwPollTimeout); - - switch (status.bState) { - case DFU_STATE_appIDLE: - case DFU_STATE_appDETACH: - printf("Device really in Runtime Mode, send DFU " - "detach request...\n"); - if (dfu_detach(dfu_root->dev_handle, - dfu_root->interface, 1000) < 0) { - warnx("error detaching"); - } - if (dfu_root->func_dfu.bmAttributes & USB_DFU_WILL_DETACH) { - printf("Device will detach and reattach...\n"); - } else { - printf("Resetting USB...\n"); - ret = libusb_reset_device(dfu_root->dev_handle); - if (ret < 0 && ret != LIBUSB_ERROR_NOT_FOUND) - errx(EX_IOERR, "error resetting " - "after detach"); - } - break; - case DFU_STATE_dfuERROR: - printf("dfuERROR, clearing status\n"); - if (dfu_clear_status(dfu_root->dev_handle, - dfu_root->interface) < 0) { - errx(EX_IOERR, "error clear_status"); - } - /* fall through */ - default: - warnx("WARNING: Runtime device already in DFU state ?!?"); - libusb_release_interface(dfu_root->dev_handle, - dfu_root->interface); - goto dfustate; - } - libusb_release_interface(dfu_root->dev_handle, - dfu_root->interface); - libusb_close(dfu_root->dev_handle); - dfu_root->dev_handle = NULL; - - if (mode == MODE_DETACH) { - libusb_exit(ctx); - exit(0); - } - - /* keeping handles open might prevent re-enumeration */ - disconnect_devices(); - - milli_sleep(detach_delay * 1000); - - /* Change match vendor and product to impossible values to force - * only DFU mode matches in the following probe */ - match_vendor = match_product = 0x10000; - - probe_devices(ctx); - - if (dfu_root == NULL) { - errx(EX_IOERR, "Lost device after RESET?"); - } else if (dfu_root->next != NULL) { - errx(EX_IOERR, "More than one DFU capable USB device found! " - "Try `--list' and specify the serial number " - "or disconnect all but one device"); - } - - /* Check for DFU mode device */ - if (!(dfu_root->flags | DFU_IFF_DFU)) - errx(EX_SOFTWARE, "Device is not in DFU mode"); - - printf("Opening DFU USB Device...\n"); - ret = libusb_open(dfu_root->dev, &dfu_root->dev_handle); - if (ret || !dfu_root->dev_handle) { - errx(EX_IOERR, "Cannot open device"); - } - } else { - /* we're already in DFU mode, so we can skip the detach/reset - * procedure */ - /* If a match vendor/product was specified, use that as the runtime - * vendor/product, otherwise use the DFU mode vendor/product */ - runtime_vendor = match_vendor < 0 ? dfu_root->vendor : match_vendor; - runtime_product = match_product < 0 ? dfu_root->product : match_product; - } - -dfustate: -#if 0 - printf("Setting Configuration %u...\n", dfu_root->configuration); - if (libusb_set_configuration(dfu_root->dev_handle, dfu_root->configuration) < 0) { - errx(EX_IOERR, "Cannot set configuration"); - } -#endif - printf("Claiming USB DFU Interface...\n"); - if (libusb_claim_interface(dfu_root->dev_handle, dfu_root->interface) < 0) { - errx(EX_IOERR, "Cannot claim interface"); - } - - printf("Setting Alternate Setting #%d ...\n", dfu_root->altsetting); - if (libusb_set_interface_alt_setting(dfu_root->dev_handle, dfu_root->interface, dfu_root->altsetting) < 0) { - errx(EX_IOERR, "Cannot set alternate interface"); - } - -status_again: - printf("Determining device status: "); - if (dfu_get_status(dfu_root, &status ) < 0) { - errx(EX_IOERR, "error get_status"); - } - printf("state = %s, status = %d\n", - dfu_state_to_string(status.bState), status.bStatus); - - milli_sleep(status.bwPollTimeout); - - switch (status.bState) { - case DFU_STATE_appIDLE: - case DFU_STATE_appDETACH: - errx(EX_IOERR, "Device still in Runtime Mode!"); - break; - case DFU_STATE_dfuERROR: - printf("dfuERROR, clearing status\n"); - if (dfu_clear_status(dfu_root->dev_handle, dfu_root->interface) < 0) { - errx(EX_IOERR, "error clear_status"); - } - goto status_again; - break; - case DFU_STATE_dfuDNLOAD_IDLE: - case DFU_STATE_dfuUPLOAD_IDLE: - printf("aborting previous incomplete transfer\n"); - if (dfu_abort(dfu_root->dev_handle, dfu_root->interface) < 0) { - errx(EX_IOERR, "can't send DFU_ABORT"); - } - goto status_again; - break; - case DFU_STATE_dfuIDLE: - printf("dfuIDLE, continuing\n"); - break; - default: - break; - } - - if (DFU_STATUS_OK != status.bStatus ) { - printf("WARNING: DFU Status: '%s'\n", - dfu_status_to_string(status.bStatus)); - /* Clear our status & try again. */ - if (dfu_clear_status(dfu_root->dev_handle, dfu_root->interface) < 0) - errx(EX_IOERR, "USB communication error"); - if (dfu_get_status(dfu_root, &status) < 0) - errx(EX_IOERR, "USB communication error"); - if (DFU_STATUS_OK != status.bStatus) - errx(EX_SOFTWARE, "Status is not OK: %d", status.bStatus); - - milli_sleep(status.bwPollTimeout); - } - - printf("DFU mode device DFU version %04x\n", - libusb_le16_to_cpu(dfu_root->func_dfu.bcdDFUVersion)); - - if (dfu_root->func_dfu.bcdDFUVersion == libusb_cpu_to_le16(0x11a)) - dfuse_device = 1; - - /* If not overridden by the user */ - if (!transfer_size) { - transfer_size = libusb_le16_to_cpu( - dfu_root->func_dfu.wTransferSize); - if (transfer_size) { - printf("Device returned transfer size %i\n", - transfer_size); - } else { - errx(EX_IOERR, "Transfer size must be specified"); - } - } - -#ifdef HAVE_GETPAGESIZE -/* autotools lie when cross-compiling for Windows using mingw32/64 */ -#ifndef __MINGW32__ - /* limitation of Linux usbdevio */ - if ((int)transfer_size > getpagesize()) { - transfer_size = getpagesize(); - printf("Limited transfer size to %i\n", transfer_size); - } -#endif /* __MINGW32__ */ -#endif /* HAVE_GETPAGESIZE */ - - if (transfer_size < dfu_root->bMaxPacketSize0) { - transfer_size = dfu_root->bMaxPacketSize0; - printf("Adjusted transfer size to %i\n", transfer_size); - } - - switch (mode) { - case MODE_UPLOAD: - /* open for "exclusive" writing */ - fd = open(file.name, O_WRONLY | O_BINARY | O_CREAT | O_EXCL | O_TRUNC, 0666); - if (fd < 0) - err(EX_IOERR, "Cannot open file %s for writing", file.name); - - if (dfuse_device || dfuse_options) { - if (dfuse_do_upload(dfu_root, transfer_size, fd, - dfuse_options) < 0) - exit(1); - } else { - if (dfuload_do_upload(dfu_root, transfer_size, - expected_size, fd) < 0) { - exit(1); - } - } - close(fd); - break; - - case MODE_DOWNLOAD: - if (((file.idVendor != 0xffff && file.idVendor != runtime_vendor) || - (file.idProduct != 0xffff && file.idProduct != runtime_product)) && - ((file.idVendor != 0xffff && file.idVendor != dfu_root->vendor) || - (file.idProduct != 0xffff && file.idProduct != dfu_root->product))) { - errx(EX_IOERR, "Error: File ID %04x:%04x does " - "not match device (%04x:%04x or %04x:%04x)", - file.idVendor, file.idProduct, - runtime_vendor, runtime_product, - dfu_root->vendor, dfu_root->product); - } - if (dfuse_device || dfuse_options || file.bcdDFU == 0x11a) { - if (dfuse_do_dnload(dfu_root, transfer_size, &file, - dfuse_options) < 0) - exit(1); - } else { - if (dfuload_do_dnload(dfu_root, transfer_size, &file) < 0) - exit(1); - } - break; - case MODE_DETACH: - if (dfu_detach(dfu_root->dev_handle, dfu_root->interface, 1000) < 0) { - warnx("can't detach"); - } - break; - default: - errx(EX_IOERR, "Unsupported mode: %u", mode); - break; - } - - if (final_reset) { - if (dfu_detach(dfu_root->dev_handle, dfu_root->interface, 1000) < 0) { - /* Even if detach failed, just carry on to leave the - device in a known state */ - warnx("can't detach"); - } - printf("Resetting USB to switch back to runtime mode\n"); - ret = libusb_reset_device(dfu_root->dev_handle); - if (ret < 0 && ret != LIBUSB_ERROR_NOT_FOUND) { - errx(EX_IOERR, "error resetting after download"); - } - } - - libusb_close(dfu_root->dev_handle); - dfu_root->dev_handle = NULL; - libusb_exit(ctx); - - return (0); -} diff --git a/macosx/src/dfu-util/src/portable.h b/macosx/src/dfu-util/src/portable.h deleted file mode 100644 index cf8d5df38..000000000 --- a/macosx/src/dfu-util/src/portable.h +++ /dev/null @@ -1,72 +0,0 @@ - -#ifndef PORTABLE_H -#define PORTABLE_H - -#ifdef HAVE_CONFIG_H -# include "config.h" -#else -# define PACKAGE "dfu-util" -# define PACKAGE_VERSION "0.8-msvc" -# define PACKAGE_STRING "dfu-util 0.8-msvc" -# define PACKAGE_BUGREPORT "dfu-util@lists.gnumonks.org" -#endif /* HAVE_CONFIG_H */ - -#ifdef HAVE_FTRUNCATE -# include -#else -# include -#endif /* HAVE_FTRUNCATE */ - -#ifdef HAVE_NANOSLEEP -# include -# define milli_sleep(msec) do {\ - if (msec) {\ - struct timespec nanosleepDelay = { (msec) / 1000, ((msec) % 1000) * 1000000 };\ - nanosleep(&nanosleepDelay, NULL);\ - } } while (0) -#elif defined HAVE_WINDOWS_H -# define milli_sleep(msec) do {\ - if (msec) {\ - Sleep(msec);\ - } } while (0) -#else -# error "Can't get no sleep! Please report" -#endif /* HAVE_NANOSLEEP */ - -#ifdef HAVE_ERR -# include -#else -# include -# include -# define warnx(...) do {\ - fprintf(stderr, __VA_ARGS__);\ - fprintf(stderr, "\n"); } while (0) -# define errx(eval, ...) do {\ - warnx(__VA_ARGS__);\ - exit(eval); } while (0) -# define warn(...) do {\ - fprintf(stderr, "%s: ", strerror(errno));\ - warnx(__VA_ARGS__); } while (0) -# define err(eval, ...) do {\ - warn(__VA_ARGS__);\ - exit(eval); } while (0) -#endif /* HAVE_ERR */ - -#ifdef HAVE_SYSEXITS_H -# include -#else -# define EX_OK 0 /* successful termination */ -# define EX_USAGE 64 /* command line usage error */ -# define EX_SOFTWARE 70 /* internal software error */ -# define EX_IOERR 74 /* input/output error */ -#endif /* HAVE_SYSEXITS_H */ - -#ifndef O_BINARY -# define O_BINARY 0 -#endif - -#ifndef off_t -# define off_t long int -#endif - -#endif /* PORTABLE_H */ diff --git a/macosx/src/dfu-util/src/prefix.c b/macosx/src/dfu-util/src/prefix.c deleted file mode 100644 index be8e3faf3..000000000 --- a/macosx/src/dfu-util/src/prefix.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * dfu-prefix - * - * Copyright 2011-2012 Stefan Schmidt - * Copyright 2013 Hans Petter Selasky - * Copyright 2014 Uwe Bonnes - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu_file.h" - -enum mode { - MODE_NONE, - MODE_ADD, - MODE_DEL, - MODE_CHECK -}; - -int verbose; - -static void help(void) -{ - fprintf(stderr, "Usage: dfu-prefix [options] ...\n" - " -h --help\t\t\tPrint this help message\n" - " -V --version\t\t\tPrint the version number\n" - " -c --check \t\tCheck DFU prefix of \n" - " -D --delete \t\tDelete DFU prefix from \n" - " -a --add \t\tAdd DFU prefix to \n" - "In combination with -a:\n" - ); - fprintf(stderr, " -s --stellaris-address
Add TI Stellaris address prefix to \n" - "In combination with -D or -c:\n" - " -T --stellaris\t\tAct on TI Stellaris address prefix of \n" - "In combination with -a or -D or -c:\n" - " -L --lpc-prefix\t\tUse NXP LPC DFU prefix format\n" - ); - exit(EX_USAGE); -} - -static void print_version(void) -{ - printf("dfu-prefix (%s) %s\n\n", PACKAGE, PACKAGE_VERSION); - printf("Copyright 2011-2012 Stefan Schmidt, 2014 Uwe Bonnes\n" - "This program is Free Software and has ABSOLUTELY NO WARRANTY\n" - "Please report bugs to %s\n\n", PACKAGE_BUGREPORT); - -} - -static struct option opts[] = { - { "help", 0, 0, 'h' }, - { "version", 0, 0, 'V' }, - { "check", 1, 0, 'c' }, - { "add", 1, 0, 'a' }, - { "delete", 1, 0, 'D' }, - { "stellaris-address", 1, 0, 's' }, - { "stellaris", 0, 0, 'T' }, - { "LPC", 0, 0, 'L' }, -}; -int main(int argc, char **argv) -{ - struct dfu_file file; - enum mode mode = MODE_NONE; - enum prefix_type type = ZERO_PREFIX; - uint32_t lmdfu_flash_address = 0; - char *end; - - /* make sure all prints are flushed */ - setvbuf(stdout, NULL, _IONBF, 0); - - print_version(); - - memset(&file, 0, sizeof(file)); - - while (1) { - int c, option_index = 0; - c = getopt_long(argc, argv, "hVc:a:D:p:v:d:s:TL", opts, - &option_index); - if (c == -1) - break; - - switch (c) { - case 'h': - help(); - break; - case 'V': - exit(0); - break; - case 'D': - file.name = optarg; - mode = MODE_DEL; - break; - case 'c': - file.name = optarg; - mode = MODE_CHECK; - break; - case 'a': - file.name = optarg; - mode = MODE_ADD; - break; - case 's': - lmdfu_flash_address = strtoul(optarg, &end, 0); - if (*end) { - errx(EX_IOERR, "Invalid lmdfu " - "address: %s", optarg); - } - /* fall-through */ - case 'T': - type = LMDFU_PREFIX; - break; - case 'L': - type = LPCDFU_UNENCRYPTED_PREFIX; - break; - default: - help(); - break; - } - } - - if (!file.name) { - fprintf(stderr, "You need to specify a filename\n"); - help(); - } - - switch(mode) { - case MODE_ADD: - if (type == ZERO_PREFIX) - errx(EX_IOERR, "Prefix type must be specified"); - dfu_load_file(&file, MAYBE_SUFFIX, NO_PREFIX); - file.lmdfu_address = lmdfu_flash_address; - file.prefix_type = type; - printf("Adding prefix to file\n"); - dfu_store_file(&file, file.size.suffix != 0, 1); - break; - - case MODE_CHECK: - dfu_load_file(&file, MAYBE_SUFFIX, MAYBE_PREFIX); - show_suffix_and_prefix(&file); - if (type > ZERO_PREFIX && file.prefix_type != type) - errx(EX_IOERR, "No prefix of requested type"); - break; - - case MODE_DEL: - dfu_load_file(&file, MAYBE_SUFFIX, NEEDS_PREFIX); - if (type > ZERO_PREFIX && file.prefix_type != type) - errx(EX_IOERR, "No prefix of requested type"); - printf("Removing prefix from file\n"); - /* if there was a suffix, rewrite it */ - dfu_store_file(&file, file.size.suffix != 0, 0); - break; - - default: - help(); - break; - } - return (0); -} diff --git a/macosx/src/dfu-util/src/quirks.c b/macosx/src/dfu-util/src/quirks.c deleted file mode 100644 index de394a615..000000000 --- a/macosx/src/dfu-util/src/quirks.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Simple quirk system for dfu-util - * - * Copyright 2010-2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include "quirks.h" - -uint16_t get_quirks(uint16_t vendor, uint16_t product, uint16_t bcdDevice) -{ - uint16_t quirks = 0; - - /* Device returns bogus bwPollTimeout values */ - if ((vendor == VENDOR_OPENMOKO || vendor == VENDOR_FIC) && - product >= PRODUCT_FREERUNNER_FIRST && - product <= PRODUCT_FREERUNNER_LAST) - quirks |= QUIRK_POLLTIMEOUT; - - if (vendor == VENDOR_VOTI && - product == PRODUCT_OPENPCD) - quirks |= QUIRK_POLLTIMEOUT; - - /* Reports wrong DFU version in DFU descriptor */ - if (vendor == VENDOR_LEAFLABS && - product == PRODUCT_MAPLE3 && - bcdDevice == 0x0200) - quirks |= QUIRK_FORCE_DFU11; - - /* old devices(bcdDevice == 0) return bogus bwPollTimeout values */ - if (vendor == VENDOR_SIEMENS && - (product == PRODUCT_PXM40 || product == PRODUCT_PXM50) && - bcdDevice == 0) - quirks |= QUIRK_POLLTIMEOUT; - - /* M-Audio Transit returns bogus bwPollTimeout values */ - if (vendor == VENDOR_MIDIMAN && - product == PRODUCT_TRANSIT) - quirks |= QUIRK_POLLTIMEOUT; - - return (quirks); -} diff --git a/macosx/src/dfu-util/src/quirks.h b/macosx/src/dfu-util/src/quirks.h deleted file mode 100644 index 0e4b3ec58..000000000 --- a/macosx/src/dfu-util/src/quirks.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef DFU_QUIRKS_H -#define DFU_QUIRKS_H - -#define VENDOR_OPENMOKO 0x1d50 /* Openmoko Freerunner / GTA02 */ -#define VENDOR_FIC 0x1457 /* Openmoko Freerunner / GTA02 */ -#define VENDOR_VOTI 0x16c0 /* OpenPCD Reader */ -#define VENDOR_LEAFLABS 0x1eaf /* Maple */ -#define VENDOR_SIEMENS 0x0908 /* Siemens AG */ -#define VENDOR_MIDIMAN 0x0763 /* Midiman */ - -#define PRODUCT_FREERUNNER_FIRST 0x5117 -#define PRODUCT_FREERUNNER_LAST 0x5126 -#define PRODUCT_OPENPCD 0x076b -#define PRODUCT_MAPLE3 0x0003 /* rev 3 and 5 */ -#define PRODUCT_PXM40 0x02c4 /* Siemens AG, PXM 40 */ -#define PRODUCT_PXM50 0x02c5 /* Siemens AG, PXM 50 */ -#define PRODUCT_TRANSIT 0x2806 /* M-Audio Transit (Midiman) */ - -#define QUIRK_POLLTIMEOUT (1<<0) -#define QUIRK_FORCE_DFU11 (1<<1) - -/* Fallback value, works for OpenMoko */ -#define DEFAULT_POLLTIMEOUT 5 - -uint16_t get_quirks(uint16_t vendor, uint16_t product, uint16_t bcdDevice); - -#endif /* DFU_QUIRKS_H */ diff --git a/macosx/src/dfu-util/src/suffix.c b/macosx/src/dfu-util/src/suffix.c deleted file mode 100644 index 0df248f51..000000000 --- a/macosx/src/dfu-util/src/suffix.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * dfu-suffix - * - * Copyright 2011-2012 Stefan Schmidt - * Copyright 2013 Hans Petter Selasky - * Copyright 2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu_file.h" - -enum mode { - MODE_NONE, - MODE_ADD, - MODE_DEL, - MODE_CHECK -}; - -int verbose; - -static void help(void) -{ - fprintf(stderr, "Usage: dfu-suffix [options] ...\n" - " -h --help\t\t\tPrint this help message\n" - " -V --version\t\t\tPrint the version number\n" - " -c --check \t\tCheck DFU suffix of \n" - " -a --add \t\tAdd DFU suffix to \n" - " -D --delete \t\tDelete DFU suffix from \n" - " -p --pid \t\tAdd product ID into DFU suffix in \n" - " -v --vid \t\tAdd vendor ID into DFU suffix in \n" - " -d --did \t\tAdd device ID into DFU suffix in \n" - " -S --spec \t\tAdd DFU specification ID into DFU suffix in \n" - ); - exit(EX_USAGE); -} - -static void print_version(void) -{ - printf("dfu-suffix (%s) %s\n\n", PACKAGE, PACKAGE_VERSION); - printf("Copyright 2011-2012 Stefan Schmidt, 2013-2014 Tormod Volden\n" - "This program is Free Software and has ABSOLUTELY NO WARRANTY\n" - "Please report bugs to %s\n\n", PACKAGE_BUGREPORT); - -} - -static struct option opts[] = { - { "help", 0, 0, 'h' }, - { "version", 0, 0, 'V' }, - { "check", 1, 0, 'c' }, - { "add", 1, 0, 'a' }, - { "delete", 1, 0, 'D' }, - { "pid", 1, 0, 'p' }, - { "vid", 1, 0, 'v' }, - { "did", 1, 0, 'd' }, - { "spec", 1, 0, 'S' }, -}; - -int main(int argc, char **argv) -{ - struct dfu_file file; - int pid, vid, did, spec; - enum mode mode = MODE_NONE; - - /* make sure all prints are flushed */ - setvbuf(stdout, NULL, _IONBF, 0); - - print_version(); - - pid = vid = did = 0xffff; - spec = 0x0100; /* Default to bcdDFU version 1.0 */ - memset(&file, 0, sizeof(file)); - - while (1) { - int c, option_index = 0; - c = getopt_long(argc, argv, "hVc:a:D:p:v:d:S:s:T", opts, - &option_index); - if (c == -1) - break; - - switch (c) { - case 'h': - help(); - break; - case 'V': - exit(0); - break; - case 'D': - file.name = optarg; - mode = MODE_DEL; - break; - case 'p': - pid = strtol(optarg, NULL, 16); - break; - case 'v': - vid = strtol(optarg, NULL, 16); - break; - case 'd': - did = strtol(optarg, NULL, 16); - break; - case 'S': - spec = strtol(optarg, NULL, 16); - break; - case 'c': - file.name = optarg; - mode = MODE_CHECK; - break; - case 'a': - file.name = optarg; - mode = MODE_ADD; - break; - default: - help(); - break; - } - } - - if (!file.name) { - fprintf(stderr, "You need to specify a filename\n"); - help(); - } - - if (spec != 0x0100 && spec != 0x011a) { - fprintf(stderr, "Only DFU specification 0x0100 and 0x011a supported\n"); - help(); - } - - switch(mode) { - case MODE_ADD: - dfu_load_file(&file, NO_SUFFIX, MAYBE_PREFIX); - file.idVendor = vid; - file.idProduct = pid; - file.bcdDevice = did; - file.bcdDFU = spec; - /* always write suffix, rewrite prefix if there was one */ - dfu_store_file(&file, 1, file.size.prefix != 0); - printf("Suffix successfully added to file\n"); - break; - - case MODE_CHECK: - dfu_load_file(&file, NEEDS_SUFFIX, MAYBE_PREFIX); - show_suffix_and_prefix(&file); - break; - - case MODE_DEL: - dfu_load_file(&file, NEEDS_SUFFIX, MAYBE_PREFIX); - dfu_store_file(&file, 0, file.size.prefix != 0); - if (file.size.suffix) /* had a suffix */ - printf("Suffix successfully removed from file\n"); - break; - - default: - help(); - break; - } - return (0); -} diff --git a/macosx/src/dfu-util/src/usb_dfu.h b/macosx/src/dfu-util/src/usb_dfu.h deleted file mode 100644 index 660bedcbf..000000000 --- a/macosx/src/dfu-util/src/usb_dfu.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef USB_DFU_H -#define USB_DFU_H -/* USB Device Firmware Update Implementation for OpenPCD - * (C) 2006 by Harald Welte - * - * Protocol definitions for USB DFU - * - * This ought to be compliant to the USB DFU Spec 1.0 as available from - * http://www.usb.org/developers/devclass_docs/usbdfu10.pdf - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include - -#define USB_DT_DFU 0x21 - -#ifdef _MSC_VER -# pragma pack(push) -# pragma pack(1) -#endif /* _MSC_VER */ -struct usb_dfu_func_descriptor { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bmAttributes; -#define USB_DFU_CAN_DOWNLOAD (1 << 0) -#define USB_DFU_CAN_UPLOAD (1 << 1) -#define USB_DFU_MANIFEST_TOL (1 << 2) -#define USB_DFU_WILL_DETACH (1 << 3) - uint16_t wDetachTimeOut; - uint16_t wTransferSize; - uint16_t bcdDFUVersion; -#ifdef _MSC_VER -}; -# pragma pack(pop) -#elif defined __GNUC__ -} __attribute__ ((packed)); -#else - #warning "No way to pack struct on this compiler? This will break!" -#endif /* _MSC_VER */ - -#define USB_DT_DFU_SIZE 9 - -#define USB_TYPE_DFU (LIBUSB_REQUEST_TYPE_CLASS|LIBUSB_RECIPIENT_INTERFACE) - -/* DFU class-specific requests (Section 3, DFU Rev 1.1) */ -#define USB_REQ_DFU_DETACH 0x00 -#define USB_REQ_DFU_DNLOAD 0x01 -#define USB_REQ_DFU_UPLOAD 0x02 -#define USB_REQ_DFU_GETSTATUS 0x03 -#define USB_REQ_DFU_CLRSTATUS 0x04 -#define USB_REQ_DFU_GETSTATE 0x05 -#define USB_REQ_DFU_ABORT 0x06 - -/* DFU_GETSTATUS bStatus values (Section 6.1.2, DFU Rev 1.1) */ -#define DFU_STATUS_OK 0x00 -#define DFU_STATUS_errTARGET 0x01 -#define DFU_STATUS_errFILE 0x02 -#define DFU_STATUS_errWRITE 0x03 -#define DFU_STATUS_errERASE 0x04 -#define DFU_STATUS_errCHECK_ERASED 0x05 -#define DFU_STATUS_errPROG 0x06 -#define DFU_STATUS_errVERIFY 0x07 -#define DFU_STATUS_errADDRESS 0x08 -#define DFU_STATUS_errNOTDONE 0x09 -#define DFU_STATUS_errFIRMWARE 0x0a -#define DFU_STATUS_errVENDOR 0x0b -#define DFU_STATUS_errUSBR 0x0c -#define DFU_STATUS_errPOR 0x0d -#define DFU_STATUS_errUNKNOWN 0x0e -#define DFU_STATUS_errSTALLEDPKT 0x0f - -enum dfu_state { - DFU_STATE_appIDLE = 0, - DFU_STATE_appDETACH = 1, - DFU_STATE_dfuIDLE = 2, - DFU_STATE_dfuDNLOAD_SYNC = 3, - DFU_STATE_dfuDNBUSY = 4, - DFU_STATE_dfuDNLOAD_IDLE = 5, - DFU_STATE_dfuMANIFEST_SYNC = 6, - DFU_STATE_dfuMANIFEST = 7, - DFU_STATE_dfuMANIFEST_WAIT_RST = 8, - DFU_STATE_dfuUPLOAD_IDLE = 9, - DFU_STATE_dfuERROR = 10 -}; - -#endif /* USB_DFU_H */ diff --git a/macosx/src/dfu-util/www/build.html b/macosx/src/dfu-util/www/build.html deleted file mode 100644 index f3036e40c..000000000 --- a/macosx/src/dfu-util/www/build.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - Building dfu-util from source - - - - - - - - - -
-

How to build dfu-util from source

- -

Prerequisites for building from git

-

Mac OS X

-

-First install MacPorts (and if you are on 10.6 or older, the Java Developer Package) and then run: -

-
-	sudo port install libusb-devel git-core
-
- -

FreeBSD

-
-	sudo pkg_add -r git pkgconf
-
- -

Ubuntu and Debian and derivatives

-
-	sudo apt-get build-dep dfu-util
-	sudo apt-get install libusb-1.0-0-dev
-
- -

Get the source code and build it

-

-The first time you will have to clone the git repository: -

-
-	git clone git://gitorious.org/dfu-util/dfu-util.git
-	cd dfu-util
-
-

-If you later want to update to latest git version, just run this: -

-
-	make maintainer-clean
-	git pull
-
-

-To build the source: -

-
-	./autogen.sh
-	./configure  # on most systems
-	make
-
- -

-If you are building on Mac OS X, replace the ./configure command with: -

-
-	./configure --libdir=/opt/local/lib --includedir=/opt/local/include  # on MacOSX only
-
- -

-Your dfu-util binary will be inside the src folder. Use it from there, or install it to /usr/local/bin by running "sudo make install". -

- -

Cross-building for Windows

- -

-Windows binaries can be built in a MinGW -environment, on a Windows computer or cross-hosted in another OS. -To build it on a Debian or Ubuntu host, first install build dependencies: -

-
-	sudo apt-get build-dep libusb-1.0-0 dfu-util
-	sudo apt-get install mingw32
-
- -

-The below example builds dfu-util 0.8 and libusb 1.0.19 from unpacked release -tarballs. If you instead build from git, you will have to run "./autogen.sh" -before running the "./configure" steps. -

- -
-mkdir -p build
-cd libusb-1.0.19
-PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig ./configure \
-    --host=i586-mingw32msvc --prefix=$PWD/../build
-# WINVER workaround needed for 1.0.19 only
-make CFLAGS="-DWINVER=0x0501"
-make install
-cd ..
-
-cd dfu-util-0.8
-PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig ./configure \
-    --host=i586-mingw32msvc --prefix=$PWD/../build
-make
-make install
-cd ..
-
-The build files will now be in build/bin. -

- -

Building on Windows using MinGW

-This assumes using release tarballs or having run ./autogen.sh on -the git sources. -
-cd libusb-1.0.19
-./configure --prefix=$HOME
-# WINVER workaround needed for 1.0.19 only
-# MKDIR_P setting should not really be needed...
-make CFLAGS="-DWINVER=0x0501" MKDIR_P="mkdir -p"
-make install
-cd ..
-
-cd dfu-util-0.8
-./configure USB_CFLAGS="-I$HOME/include/libusb-1.0" \
-            USB_LIBS="-L $HOME/lib -lusb-1.0" PKG_CONFIG=true
-make
-make install
-cd ..
-
-To link libusb statically into dfu-util.exe use instead of "make": -
-make LDFLAGS=-static
-
-The built executables (and DLL) will now be under $HOME/bin. - -

-[Back to dfu-util main page] -

- -
- - diff --git a/macosx/src/dfu-util/www/dfu-util.1.html b/macosx/src/dfu-util/www/dfu-util.1.html deleted file mode 100644 index 62ca40b5d..000000000 --- a/macosx/src/dfu-util/www/dfu-util.1.html +++ /dev/null @@ -1,411 +0,0 @@ - - -Man page of DFU-UTIL - - -

DFU-UTIL(1)

- -  -

NAME

- -dfu-util - Device firmware update (DFU) USB programmer -  -

SYNOPSIS

- - -
-
-dfu-util - --l - -[-v] - -[-d - -vid:pid[,vid:pid]] - -[-p - -path] - -[-c - -configuration] - -[-i - -interface] - -[-a - -alt-intf] - -[-S - -serial[,serial]] - - -
-dfu-util - -[-v] - -[-d - -vid:pid[,vid:pid]] - -[-p - -path] - -[-c - -configuration] - -[-i - -interface] - -[-a - -alt-intf] - -[-S - -serial[,serial]] - -[-t - -size] - -[-Z - -size] - -[-s - -address] - -[-R] - -[-D|-U - -file] - - -
-dfu-util - -[-hV] - -
-  -

DESCRIPTION

- -dfu-util - -is a program that implements the host (computer) side of the USB DFU -(Universal Serial Bus Device Firmware Upgrade) protocol. -

-dfu-util communicates with devices that implement the device side of the -USB DFU protocol, and is often used to upgrade the firmware of such -devices. -  -

OPTIONS

- -
-
-l, --list - -
-List the currently attached DFU capable USB devices. -
-d, --device [Run-Time VENDOR]:[Run-Time PRODUCT][,[DFU Mode VENDOR]:[DFU Mode PRODUCT]] - -
-
-Specify run-time and/or DFU mode vendor and/or product IDs of the DFU device -to work with. VENDOR and PRODUCT are hexadecimal numbers (no prefix -needed), "*" (match any), or "-" (match nothing). By default, any DFU capable -device in either run-time or DFU mode will be considered. -

-If you only have one standards-compliant DFU device attached to your computer, -this parameter is optional. However, as soon as you have multiple DFU devices -connected, dfu-util will detect this and abort, asking you to specify which -device to use. -

-If only run-time IDs are specified (e.g. "--device 1457:51ab"), then in -addition to the specified run-time IDs, any DFU mode devices will also be -considered. This is beneficial to allow a DFU capable device to be found -again after a switch to DFU mode, since the vendor and/or product ID of a -device usually changes in DFU mode. -

-If only DFU mode IDs are specified (e.g. "--device ,951:26"), then all -run-time devices will be ignored, making it easy to target a specific device in -DFU mode. -

-If both run-time and DFU mode IDs are specified (e.g. "--device -1457:51ab,:2bc"), then unspecified DFU mode components will use the run-time -value specified. -

-Examples: -

-
--device 1457:51ab,951:26 - -
-
- -Work with a device in run-time mode with -vendor ID 0x1457 and product ID 0x51ab, or in DFU mode with vendor ID 0x0951 -and product ID 0x0026 -

-

--device 1457:51ab,:2bc - -
-
- -Work with a device in run-time mode with vendor ID 0x1457 and product ID -0x51ab, or in DFU mode with vendor ID 0x1457 and product ID 0x02bc -

-

--device 1457:51ab - -
-
- -Work with a device in run-time mode with vendor ID 0x1457 and product ID -0x51ab, or in DFU mode with any vendor and product ID -

-

--device ,951:26 - -
-
- -Work with a device in DFU mode with vendor ID 0x0951 and product ID 0x0026 -

-

--device *,- - -
-
- -Work with any device in run-time mode, and ignore any device in DFU mode -

-

--device , - -
-
- -Ignore any device in run-time mode, and Work with any device in DFU mode -
-
- -
-p, --path BUS-PORT. ... .PORT - -
-Specify the path to the DFU device. -
-c, --cfg CONFIG-NR - -
-Specify the configuration of the DFU device. Note that this is only used for matching, the configuration is not set by dfu-util. -
-i, --intf INTF-NR - -
-Specify the DFU interface number. -
-a, --alt ALT - -
-Specify the altsetting of the DFU interface by name or by number. -
-S, --serial [Run-Time SERIAL][,[DFU Mode SERIAL]] - -
-Specify the run-time and DFU mode serial numbers used to further restrict -device matches. If multiple, identical DFU devices are simultaneously -connected to a system then vendor and product ID will be insufficient for -targeting a single device. In this situation, it may be possible to use this -parameter to specify a serial number which also must match. -

-If only a single serial number is specified, then the same serial number is -used in both run-time and DFU mode. An empty serial number will match any -serial number in the corresponding mode. -

-t, --transfer-size SIZE - -
-Specify the number of bytes per USB transfer. The optimal value is -usually determined automatically so this option is rarely useful. If -you need to use this option for a device, please report it as a bug. -
-Z, --upload-size SIZE - -
-Specify the expected upload size, in bytes. -
-U, --upload FILE - -
-Read firmware from device into -FILE. - -
-D, --download FILE - -
-Write firmware from -FILE - -into device. -
-R, --reset - -
-Issue USB reset signalling after upload or download has finished. -
-s, --dfuse-address address - -
-Specify target address for raw binary download/upload on DfuSe devices. Do -not - -use this for downloading DfuSe (.dfu) files. Modifiers can be added -to the address, separated by a colon, to perform special DfuSE commands such -as "leave" DFU mode, "unprotect" and "mass-erase" flash memory. -
-v, --verbose - -
-Print more information about dfu-util's operation. A second --v - -will turn on verbose logging of USB requests. Repeat this option to further -increase verbosity. -
-h, --help - -
-Show a help text and exit. -
-V, --version - -
-Show version information and exit. -
-  -

EXAMPLES

- -  -

Using dfu-util in the OpenMoko project

- -(with the Neo1973 hardware) -

- -Flashing the rootfs: -
- - $ dfu-util -a rootfs -R -D /path/to/openmoko-devel-image.jffs2 - -

- -Flashing the kernel: -
- - $ dfu-util -a kernel -R -D /path/to/uImage - -

- -Flashing the bootloader: -
- - $ dfu-util -a u-boot -R -D /path/to/u-boot.bin - -

- -Copying a kernel into RAM: -
- - $ dfu-util -a 0 -R -D /path/to/uImage - -

-Once this has finished, the kernel will be available at the default load -address of 0x32000000 in Neo1973 RAM. -Note: - -You cannot transfer more than 2MB of data into RAM using this method. -

-  -

Using dfu-util with a DfuSe device

- -

- -Flashing a -.dfu - -(special DfuSe format) file to the device: -
- - $ dfu-util -a 0 -D /path/to/dfuse-image.dfu - -

- -Reading out 1 KB of flash starting at address 0x8000000: -
- - $ dfu-util -a 0 -s 0x08000000:1024 -U newfile.bin - -

- -Flashing a binary file to address 0x8004000 of device memory and -ask the device to leave DFU mode: -
- - $ dfu-util -a 0 -s 0x08004000:leave -D /path/to/image.bin - - -  -

BUGS

- -Please report any bugs to the dfu-util mailing list at -dfu-util@lists.gnumonks.org. - -Please use the ---verbose option (repeated as necessary) to provide more - -information in your bug report. -  -

SEE ALSO

- -The dfu-util home page is -http://dfu-util.gnumonks.org - -  -

HISTORY

- -dfu-util was originally written for the OpenMoko project by -Weston Schmidt <weston_schmidt@yahoo.com> and -Harald Welte <hwelte@hmw-consulting.de>. Over time, nearly complete -support of DFU 1.0, DFU 1.1 and DfuSe ("1.1a") has been added. -  -

LICENCE

- -dfu-util - -is covered by the GNU General Public License (GPL), version 2 or later. -  -

COPYRIGHT

- -This manual page was originally written by Uwe Hermann <uwe@hermann-uwe.de>, -and is now part of the dfu-util project. -

- -


- 

Index

-
-
NAME
-
SYNOPSIS
-
DESCRIPTION
-
OPTIONS
-
EXAMPLES
-
-
Using dfu-util in the OpenMoko project
-
Using dfu-util with a DfuSe device
-
-
BUGS
-
SEE ALSO
-
HISTORY
-
LICENCE
-
COPYRIGHT
-
-
-This document was created by man2html, -using the doc/dfu-util.1 manual page from dfu-util 0.8.
-Time: 14:40:57 GMT, September 13, 2014 - - diff --git a/macosx/src/dfu-util/www/dfuse.html b/macosx/src/dfu-util/www/dfuse.html deleted file mode 100644 index 35e4ffa9f..000000000 --- a/macosx/src/dfu-util/www/dfuse.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - DfuSe and dfu-util - - - - - - - - - -
-

Using dfu-util with DfuSe devices

-

DfuSe

-

- DfuSe (DFU with ST Microsystems extensions) is a protocol based on - DFU 1.1. However, in expanding the functionality of the DFU protocol, - ST Microsystems broke all compatibility with the DFU 1.1 standard. - DfuSe devices report the DFU version as "1.1a". -

-

- DfuSe can be used to download firmware and other data - from a host computer to a conforming device (or upload in the - opposite direction) over USB similar to standard DFU. -

-

- The main difference from standard DFU is that the target address in - the device (flash) memory is specified by the host, so that a - download can be performed to parts of the device memory. The host - program is also responsible for erasing flash pages before they - are written to. -

-

.dfu files

-

- A special file format is defined by ST Microsystems to carry firmware - for DfuSe devices. The file contains target information such as address - and alternate interface information in addition to the binary data. - Several blocks of binary data can be combined in one .dfu file. -

-

Alternate interfaces

-

- Different memory locations of the device may have different - characteristics that the host program (dfu-util) has to take - into considerations, such as flash memory page size, read-only - versus read-write segments, the need to erase, and so on. - These parameters are reported by the device in the string - descriptors meant for describing the USB interfaces. - The host program decodes these strings to build a memory map of - the device. Different memory units or address spaces are listed - in separate alternate interface settings that must be selected - according to the memory unit to access. -

-

- Note that dfu-util leaves it to the user to select alternate - interface. When parsing a .dfu file it will skip file segments - not matching the selected alternate interface. Also, some - DfuSe device firmware implementations ignore the setting of - alternate interface and deduct the memory unit from the - address, since they have no address space overlap. -

-

DfuSe special commands

-

- DfuSe special commands are used by the host program during normal - downloads or uploads, such as SET_ADDRESS and ERASE_PAGE. Also - the normal DFU_DNLOAD and DFU_UPLOAD commands have special - implementations in DfuSe. - Many DfuSe devices also support commands to leave DFU mode, - read unprotect the flash memory or mass erase the flash memory. - dfu-util (from version 0.7) - supports adding "leave", "unprotect", or "mass-erase" - to the -s option argument to send such requests in combination - with a download request. These modifiers are separated with a colon. -

-

- Some DfuSe devices have their DfuSe bootloader running from flash - memory. Erasing the whole flash memory would therefore destroy - the DfuSe bootloader itself and practically brick the device - for most users. Any use of modifiers such as "unprotect" - and "mass-erase" therefore needs to be combined with the "force" - modifer. This is not included in the examples, to not encourage - ignorant users to copy and paste such instructions and shoot - themselves in the foot. -

-

- Devices based on for instance STM32F103 all run the bootloader - from flash, since there is no USB bootloader in ROM. -

-

- For instance STM32F107, STM32F2xx and STM32F4xx devices have a - DfuSe bootloader in ROM, so the flash can be erased while - keeping the device available for USB DFU transfers as long - as the device designers use this built-in bootloader and have - not implemented another DfuSe bootloader in flash that the user is - dependent upon. -

-

- Well-written bootloaders running from flash will report their - own memory region as read-only and not eraseable, but this does - not prevent dfu-util from sending a "unprotect" or "mass-erase" - request which overrides this, if the user insists. -

-

Example usage

-

- Flashing a .dfu (special DfuSe format) file to the device: -

-
-         $ dfu-util -a 0 -D /path/to/dfuse-image.dfu
-	
-

- Reading out 1 KB of flash starting at address 0x8000000: -

-
-         $ dfu-util -a 0 -s 0x08000000:1024 -U newfile.bin
-	
-

- Flashing a binary file to address 0x8004000 of device memory and ask - the device to leave DFU mode: -

-
-         $ dfu-util -a 0 -s 0x08004000:leave -D /path/to/image.bin
-	
-

- [Back to dfu-util main page] -

- -
- - diff --git a/macosx/src/dfu-util/www/index.html b/macosx/src/dfu-util/www/index.html deleted file mode 100644 index 108ddaf66..000000000 --- a/macosx/src/dfu-util/www/index.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - dfu-util Homepage - - - - - - - - - -
-

dfu-util - Device Firmware Upgrade Utilities

-

Description

-

- dfu-util is a host side implementation of the DFU 1.0 and DFU 1.1 specifications of the USB forum. - - DFU is intended to download and upload firmware to/from devices connected - over USB. It ranges from small devices like micro-controller boards - to mobile phones. Using dfu-util you can download firmware to your - DFU-enabled device or upload firmware from it. dfu-util has been - tested with the Openmoko Neo1973 and Freerunner and many other devices. -

-

- See the manual page for examples of use. -

-

Supported Devices

- -

Releases

-

- Releases of the dfu-util software can be found in the - releases folder. - The current release is 0.8. -

-

- We offer binaries for Microsoft Windows and some other platforms. - dfu-util uses libusb 1.0 to access your device, so - on Windows you have to register the device with the WinUSB driver - (alternatively libusb-win32 or libusbK), please see the libusbx wiki - for more details. -

-

- Mac OS X users can also get dfu-util from Homebrew with "brew install dfu-util" or from MacPorts. -

-

- Most Linux distributions ship dfu-util in binary packages for those - who do not want to compile dfu-util from source. - On Debian, Ubuntu, Fedora and Gentoo you can install it through the - normal software package tools. For other distributions -(namely OpenSuSe, Mandriva, and CentOS) Holger Freyther was kind enough to -provide binary packages through the Open Build Service. -

-

Development

-

- Development happens in a GIT repository. Browse it via the web -interface or clone it with: -

-
-	git clone git://gitorious.org/dfu-util/dfu-util.git
-	
-

- See our build instructions for how to - build the source on different platforms. -

-

License

-

- This software is licensed under the GPL version 2. -

-

Contact

-

- If you have questions about the development or use of dfu-util please - send an e-mail to our dedicated -mailing list for dfu-util. -

-

People

-

- dfu-util was originally written by - Harald Welte partially based on code from - dfu-programmer 0.4 and is currently maintained by Stefan Schmidt and - Tormod Volden. -

- -
- - diff --git a/macosx/src/dfu-util/www/simple.css b/macosx/src/dfu-util/www/simple.css deleted file mode 100644 index 98100bc5c..000000000 --- a/macosx/src/dfu-util/www/simple.css +++ /dev/null @@ -1,56 +0,0 @@ -body { - margin: 10px; - font-size: 0.82em; - background-color: #EEE; -} - -h1 { - clear: both; - padding: 0 0 12px 0; - margin: 0; - font-size: 2em; - font-weight: bold; -} - -h2 { - clear: both; - margin: 0; - font-size: 1.5em; - font-weight: normal; -} - -h3 { - clear: both; - margin: 15px 0 0 0; - font-size: 1.0em; - font-weight: bold; -} - -p { - line-height: 20px; - padding: 8px 0 8px 0; - margin: 0; - font-size: 1.1em; -} - -pre { - white-space: pre-wrap; - background-color: #CCC; - padding: 3px; -} - -a:hover { - background-color: #DDD; -} - -#middlebox { - width: 600px; - margin: 0px auto; - text-align: left; -} - -#footer { - height: 100px; - padding: 28px 3px 0 0; - margin: 20px 0 20px 0; -} diff --git a/linux/src/build_dfu-util.sh b/src/dfu-util/build_dfu-util.sh similarity index 96% rename from linux/src/build_dfu-util.sh rename to src/dfu-util/build_dfu-util.sh index 3563f576c..eb4895f1e 100644 --- a/linux/src/build_dfu-util.sh +++ b/src/dfu-util/build_dfu-util.sh @@ -5,7 +5,6 @@ sudo apt-get install build-essentials sudo apt-get install libusb-1.0-0-dev sudo apt-get install autoconf automake autotools-dev -cd dfu-util ./autogen.sh ./configure make diff --git a/win/src/build_dfu-util.sh b/win/src/build_dfu-util.sh deleted file mode 100644 index 3563f576c..000000000 --- a/win/src/build_dfu-util.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -sudo apt-get build-dep dfu-util -sudo apt-get install build-essentials -sudo apt-get install libusb-1.0-0-dev -sudo apt-get install autoconf automake autotools-dev - -cd dfu-util -./autogen.sh -./configure -make -cp src/dfu-util ../../linux/dfu-util -cp src/dfu-suffix ../../linux/dfu-util -cp src/dfu-prefix ../../linux/dfu-util - From b1c2d2c604ffe453ff737a6fabf50f2897eeaddd Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Wed, 29 Mar 2023 11:05:40 +0200 Subject: [PATCH 13/41] doc: update badge version Signed-off-by: Frederic Pillon --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 51a36527a..395d044b2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Arduino_Tools [![GitHub release](https://img.shields.io/github/release/stm32duino/Arduino_Tools.svg)](https://github.com/stm32duino/Arduino_Tools/releases/latest) -[![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Tools/2.1.1.svg)](https://github.com/stm32duino/Arduino_Tools/compare/2.1.1...master) +[![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Tools/2.2.0.svg)](https://github.com/stm32duino/Arduino_Tools/compare/2.2.0...master) Contains upload tools for STM32 based boards and some other usefull scripts. From c2b8d22eb56edf6ac1cad6aaa09a2c2d64befd1e Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Mon, 20 Mar 2023 11:51:06 +0100 Subject: [PATCH 14/41] feat(stm32CubeProg): add offset option Fixes #57 Signed-off-by: Frederic Pillon --- stm32CubeProg.sh | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/stm32CubeProg.sh b/stm32CubeProg.sh index e79ef71dd..65aef7b07 100644 --- a/stm32CubeProg.sh +++ b/stm32CubeProg.sh @@ -1,5 +1,6 @@ #!/bin/sh - set -o nounset # Treat unset variables as an error +# set -o xtrace # Print command traces before executing command. STM32CP_CLI= ADDRESS=0x8000000 @@ -13,7 +14,7 @@ OPTS="" usage() { echo "############################################################" echo "##" - echo "## $(basename "$0") [OPTIONS]" + echo "## $(basename "$0") [OPTIONS]" echo "##" echo "## protocol:" echo "## 0: SWD" @@ -22,6 +23,7 @@ usage() { echo "## Note: prefix it by 1 to erase all sectors." echo "## Ex: 10 erase all sectors using SWD interface." echo "## file_path: file path name to be downloaded: (bin, hex)" + echo "## offset: offset to add to $ADDRESS" echo "## Options:" echo "## For SWD and DFU: no mandatory options" echo "## For Serial: " @@ -92,7 +94,7 @@ case "${UNAME_OS}" in ;; esac -if [ $# -lt 2 ]; then +if [ $# -lt 3 ]; then echo "Not enough arguments!" usage 2 fi @@ -100,6 +102,9 @@ fi # Parse options PROTOCOL=$1 FILEPATH=$2 +OFFSET=$3 +ADDRESS=$(printf "0x%x" $((ADDRESS + OFFSET))) + # Protocol $1 # 1x: Erase all sectors if [ "$1" -ge 10 ]; then @@ -114,19 +119,19 @@ case $PROTOCOL in 0) PORT="SWD" MODE="mode=UR" - shift 2 + shift 3 ;; 1) - if [ $# -lt 3 ]; then + if [ $# -lt 4 ]; then usage 3 else - PORT=$3 - shift 3 + PORT=$4 + shift 4 fi ;; 2) PORT="USB1" - shift 2 + shift 3 ;; *) echo "Protocol unknown!" From 4f388d2aef59deb34504abf3e51e6e5b37e3b71e Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Mon, 20 Mar 2023 14:27:25 +0100 Subject: [PATCH 15/41] chore(stm32CubeProg): appply shell check and format Signed-off-by: Frederic Pillon --- stm32CubeProg.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/stm32CubeProg.sh b/stm32CubeProg.sh index 65aef7b07..f19dc5bbd 100644 --- a/stm32CubeProg.sh +++ b/stm32CubeProg.sh @@ -42,13 +42,13 @@ UNAME_OS="$(uname -s)" case "${UNAME_OS}" in Linux*) STM32CP_CLI=STM32_Programmer.sh - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + if ! command -v $STM32CP_CLI > /dev/null 2>&1; then export PATH="$HOME/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin":"$PATH" fi - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + if ! command -v $STM32CP_CLI > /dev/null 2>&1; then export PATH="/opt/stm32cubeprog/bin":"$PATH" fi - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + if ! command -v $STM32CP_CLI > /dev/null 2>&1; then echo "STM32CubeProgrammer not found ($STM32CP_CLI)." echo "Please install it or add '/bin' to your PATH environment:" echo "https://www.st.com/en/development-tools/stm32cubeprog.html" @@ -58,10 +58,10 @@ case "${UNAME_OS}" in ;; Darwin*) STM32CP_CLI=STM32_Programmer_CLI - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + if ! command -v $STM32CP_CLI > /dev/null 2>&1; then export PATH="/Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/Contents/MacOs/bin":"$PATH" fi - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + if ! command -v $STM32CP_CLI > /dev/null 2>&1; then echo "STM32CubeProgrammer not found ($STM32CP_CLI)." echo "Please install it or add '/bin' to your PATH environment:" echo "https://www.st.com/en/development-tools/stm32cubeprog.html" @@ -71,7 +71,7 @@ case "${UNAME_OS}" in ;; Windows*) STM32CP_CLI=STM32_Programmer_CLI.exe - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + if ! command -v $STM32CP_CLI > /dev/null 2>&1; then if [ -n "${PROGRAMFILES+x}" ]; then STM32CP86=${PROGRAMFILES}/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin export PATH="${STM32CP86}":"$PATH" @@ -80,7 +80,7 @@ case "${UNAME_OS}" in STM32CP=${PROGRAMW6432}/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin export PATH="${STM32CP}":"$PATH" fi - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + if ! command -v $STM32CP_CLI > /dev/null 2>&1; then echo "STM32CubeProgrammer not found ($STM32CP_CLI)." echo "Please install it or add '\bin' to your PATH environment:" echo "https://www.st.com/en/development-tools/stm32cubeprog.html" @@ -143,6 +143,6 @@ if [ $# -gt 0 ]; then OPTS="$*" fi -${STM32CP_CLI} -c port=${PORT} ${MODE} ${ERASE:+"-e all"} -q -d "${FILEPATH}" ${ADDRESS} "${OPTS}" +${STM32CP_CLI} -c port=${PORT} ${MODE} ${ERASE:+"-e all"} -q -d "${FILEPATH}" "${ADDRESS}" "${OPTS}" exit $? From c9b534370b460fd65c1369e693499b9ea450b2f2 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 4 Apr 2023 16:16:08 +0200 Subject: [PATCH 16/41] feat(stm32CubeProg): add start at specified address Signed-off-by: Frederic Pillon --- stm32CubeProg.sh | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/stm32CubeProg.sh b/stm32CubeProg.sh index f19dc5bbd..ed5e00c03 100644 --- a/stm32CubeProg.sh +++ b/stm32CubeProg.sh @@ -30,10 +30,8 @@ usage() { echo "## com_port: serial identifier (mandatory). Ex: /dev/ttyS0 or COM1" echo "##" echo "## Note: all trailing arguments will be passed to the $STM32CP_CLI" - echo "## They have to be valid commands for STM32 MCU" - echo "## Ex: -g: Run the code at the specified address" - echo "## -rst: Reset system" - echo "## -s: start automatically (optional)" + echo "## They have to be valid commands for STM32CubeProgrammer cli" + echo "## Ex: -rst: Reset system" echo "############################################################" exit "$1" } @@ -143,6 +141,6 @@ if [ $# -gt 0 ]; then OPTS="$*" fi -${STM32CP_CLI} -c port=${PORT} ${MODE} ${ERASE:+"-e all"} -q -d "${FILEPATH}" "${ADDRESS}" "${OPTS}" +${STM32CP_CLI} -c port=${PORT} ${MODE} ${ERASE:+"-e all"} -q -d "${FILEPATH}" "${ADDRESS}" -s "${ADDRESS}" "${OPTS}" exit $? From fdae1cc52c31f7f918136c8c0c52bb1797588fa3 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Wed, 5 Jul 2023 09:17:21 +0200 Subject: [PATCH 17/41] doc: update badge version Signed-off-by: Frederic Pillon --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 395d044b2..4bb2fcdb9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Arduino_Tools [![GitHub release](https://img.shields.io/github/release/stm32duino/Arduino_Tools.svg)](https://github.com/stm32duino/Arduino_Tools/releases/latest) -[![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Tools/2.2.0.svg)](https://github.com/stm32duino/Arduino_Tools/compare/2.2.0...master) +[![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Tools/2.2.1.svg)](https://github.com/stm32duino/Arduino_Tools/compare/2.2.1...master) Contains upload tools for STM32 based boards and some other usefull scripts. From 9ab8b3babb69f28aaf53caf8c254ac771386c49a Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Sat, 23 Mar 2024 12:07:18 +0100 Subject: [PATCH 18/41] chore: replace xcpy usage by busybox cp Signed-off-by: Frederic Pillon --- win/massStorageCopy.bat | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/win/massStorageCopy.bat b/win/massStorageCopy.bat index 1873f4da9..b8ce7a9b5 100644 --- a/win/massStorageCopy.bat +++ b/win/massStorageCopy.bat @@ -1,13 +1,5 @@ @echo off -rem Exit codes for xcopy -rem code | Description -rem 0 | Files were copied without error. -rem 1 | No files were found to copy. -rem 2 | The user pressed CTRL+C to terminate xcopy. -rem 4 | Initialization error occurred. There is not enough memory or disk space, or you entered an invalid drive name or invalid syntax on the command line. -rem 5 | Disk write error occurred. - set SOURCE=%2 set SRC_PARSE=%SOURCE:/=\% set TARGET=%4 @@ -43,7 +35,7 @@ setlocal enabledelayedexpansion for /F "skip=1 tokens=*" %%a in ('WMIC LOGICALDISK where "volumename like '%~1'" get deviceid 2^>NUL') do if not defined id set id=%%a call set "deviceid=%%id: =%%" if not "%deviceid%" == "" ( - XCOPY %SRC_PARSE% %deviceid% /Y /Q + %~dp0busybox.exe cp -f %SRC_PARSE% %deviceid% if !errorlevel! == 0 (echo Upload complete on %1 ^(%deviceid%^)) exit !errorlevel!) goto :eof From 13bbffad9c7688e27102eefbf1496ef91a199522 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 19 Mar 2024 14:49:28 +0100 Subject: [PATCH 19/41] chore: remove useless bmp_upload.bat Signed-off-by: Frederic Pillon --- win/bmp_upload.bat | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 win/bmp_upload.bat diff --git a/win/bmp_upload.bat b/win/bmp_upload.bat deleted file mode 100644 index 47cb445b4..000000000 --- a/win/bmp_upload.bat +++ /dev/null @@ -1,11 +0,0 @@ -rem: @echo off -rem: Note %~dp0 get path of this batch file -rem: Need to change drive if My Documents is on a drive other than C: -set driverLetter=%~dp0 -set driverLetter=%driverLetter:~0,2% -%driverLetter% -cd %~dp0 -rem: the two line below are needed to fix path issues with incorrect slashes before the bin file name -set str=%4 -set str=%str:/=\% -%1arm-none-eabi-gdb.exe -b %2 -ex "set debug remote 0" -ex "set target-async off" -ex "set remotetimeout 60" -ex "set confirm off" -ex "set height 0" -ex %3 -ex "monitor swdp_scan" -ex "attach 1" -ex "x/wx 0x8000004" -ex "monitor erase_mass" -ex "echo 0x8000004 expect 0xffffffff after erase\n" -ex "x/wx 0x8000004" -ex "file %str%" -ex "load" -ex "x/i *0x8000004" -ex "kill" -ex "tbreak main" -ex "run" -ex "detach" -ex "echo \n\n\n%6 uploaded!\n" -ex "quit" From 7713c876529be81c27998d4a741676fa08ee4d99 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 19 Mar 2024 15:41:35 +0100 Subject: [PATCH 20/41] chore: clean up licence Signed-off-by: Frederic Pillon --- LICENCE.md | 1 - 1 file changed, 1 deletion(-) diff --git a/LICENCE.md b/LICENCE.md index 7c005d888..6e92b637d 100644 --- a/LICENCE.md +++ b/LICENCE.md @@ -3,7 +3,6 @@ This files includes licensing information for parts of this repository. [GPLv2](#gplv2) is used for: * [busybox-w32](https://frippery.org/busybox/) * [dfu-util](http://dfu-util.sourceforge.net/) (also available [here](src/dfu-util/COPYING)) -* maple_loader * upload-reset [GPLv3](#gplv3) is used for: From 094df0b5ea5f3541d201c2eaa21a8d68049abaa7 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 19 Mar 2024 15:35:34 +0100 Subject: [PATCH 21/41] chore: update to hid-flash 64-bit Signed-off-by: Frederic Pillon --- linux/hid-flash | Bin 42728 -> 46216 bytes win/hid-flash.exe | Bin 73352 -> 277295 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/linux/hid-flash b/linux/hid-flash index 324cc30272e76018a3d00aeeaa528cce4b8f865e..c2e8b0dae49c34635eaab770646a591f79efab04 100755 GIT binary patch literal 46216 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 aIzi{Fc^YPQ*)>LV=XVu1&7t66#s31JH<%d! literal 42728 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 Vb!nI!Fa4MPNof@2CCFpN{{nX7Zu0;D diff --git a/win/hid-flash.exe b/win/hid-flash.exe index 8cf36188b5cb0e92c6d5aae23bd320ecc44628f3..62a33739ad210faadd96a33b060419b864272cf5 100644 GIT binary patch literal 277295 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 Lbci%fPD}k?bDt_b literal 73352 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 v Date: Fri, 22 Mar 2024 14:34:29 +0100 Subject: [PATCH 22/41] feat(hid-bl): add linux dev rule Signed-off-by: Frederic Pillon --- linux/99-stm32_hid_bl.rules | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 linux/99-stm32_hid_bl.rules diff --git a/linux/99-stm32_hid_bl.rules b/linux/99-stm32_hid_bl.rules new file mode 100644 index 000000000..cf69d496a --- /dev/null +++ b/linux/99-stm32_hid_bl.rules @@ -0,0 +1,2 @@ +# STM32_HID_bootloader +ATTRS{idProduct}=="beba", ATTRS{idVendor}=="1209", MODE:="666" From bbfcfa1103b39cece01b09a98aaf69921c637fa9 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Fri, 22 Mar 2024 10:18:29 +0100 Subject: [PATCH 23/41] fix(upload_reset): remove warnings raised at build time Signed-off-by: Frederic Pillon --- src/upload_reset/unix/upload_reset.c | 73 +++++++++++++++------------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/src/upload_reset/unix/upload_reset.c b/src/upload_reset/unix/upload_reset.c index 975ef258d..8c22cc3ad 100644 --- a/src/upload_reset/unix/upload_reset.c +++ b/src/upload_reset/unix/upload_reset.c @@ -118,44 +118,47 @@ int setDTR(unsigned short level) * Maple and Maple mini boards */ -main(int argc, char *argv[]) +int main(int argc, char *argv[]) { - + int ret = 0; if (argc<2 || argc >3) { printf("Usage upload-reset \n\r"); - return; - } - - if (openserial(argv[1])) - { - // Send magic sequence of DTR and RTS followed by the magic word "1EAF" - setRTS(false); - setDTR(false); - setDTR(true); - - usleep(50000L); - - setDTR(false); - setRTS(true); - setDTR(true); - - usleep(50000L); - - setDTR(false); - - usleep(50000L); - - write(fd,"1EAF",4); - - closeserial(); - if (argc==3) - { - usleep(atol(argv[2])*1000L); - } - } - else - { - printf("Failed to open serial device.\n\r"); + ret = 1; } + else { + if (openserial(argv[1])) + { + // Send magic sequence of DTR and RTS followed by the magic word "1EAF" + setRTS(false); + setDTR(false); + setDTR(true); + + usleep(50000L); + + setDTR(false); + setRTS(true); + setDTR(true); + + usleep(50000L); + + setDTR(false); + + usleep(50000L); + + write(fd,"1EAF",4); + + closeserial(); + if (argc==3) + { + usleep(atol(argv[2])*1000L); + } + } + else + { + printf("Failed to open serial device.\n\r"); + ret = 2; + } + } + return ret; } From a6f372ae997824858c8e094bc95471d6726d4156 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Fri, 22 Mar 2024 10:19:43 +0100 Subject: [PATCH 24/41] feat: create upload_reset binary for linux (64-bit) Signed-off-by: Frederic Pillon --- linux/upload_reset | Bin 7946 -> 16728 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/linux/upload_reset b/linux/upload_reset index 26985b857674d0c8d4999d53999a80f988591b96..4fbe3c16f1bb7a7c109cbd24f9f26bc5ea78d8ed 100755 GIT binary patch literal 16728 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 literal 7946 zcmeHMdvKK16~CKZV1*C^M2v!UtFdASmINXb)Y^n(!=nLW5>Us-$7Xkv-Ll!u?0$=h z1sdF-#E>atJGGt8SXNu6oxv%zOebTR8k+E`{6Q_XPD=-z#?GeDX=*8AeQbZfd%v4} ztmx?fy*p>m{oQl!xvz5{-@V`THPkyC4xvMVa0;RWJ6-Nd@U63yq*8dqbz*_|f|w_! zB8jrf9_WBP$UvHcG#AJTY5{K9;c}Da0Fx*~vLrAekeBr4Od&|jFN&4ieZ3IwAG+M6 zRmgM(#BwPw04ssK1Ts<vsidB<5%P7Dpqki=)9s(MT-SJ#Ezo*=}t^_LWC?kR;Py{@P!M7`F!$I}v6h);NKL zApT+=uFbR({Gvy z5s3%Ps7NKFp-?B1+oGvtSoqC&R0N{&WJtt2LouYcTk3|vB55^Y8Xf*fOgxc@m?0Dt z=<*wWGt?C^0ops_F-yr1D;rj?s5O>&E4)i5;*}GzajIATrKL>nD%~|>e zL-N+hb@Zrxh%>Du62a_pil1A!SmFY47?|M$%%Q2sQMlLTo(2akCWo_?ki#KM$x-Zl zayXuc9FAK?K23-PPhatu>*`l37AjDmLz zC+7*#pZ*}1%k3O8r(|D1?b0LeM}}oR`Io!fgXPmGCBFkHqYqFdH;hEHQg2+(|5eEB^6#-&^U? z@y3>>a4~#6y!Tm``+<$&=lZY?ehUhh+VqeG6 zV@dogQKkpEkJpvC_bSc_A^Kcp*~X7@IVmI<1~@q^b3D}VbNBfUg)&@V`+S!whLGFE z)wJJth`KAG`x33n-03U1)O1;$vBhvowCd%j(YfznCg`GFESfpjBBxD12b&ow^9^Qx zL>=GZ%uggA%IueXBy&LW6PZJjpUMnMemZkl@-vws$=}S3NPaeRLh|#OQ<9HnPD`H6 zoRR!u=1s}R`+Y+*1@_ZE-_UWNoZ1t$Wm8$(bC_7H?KIiC3oTM%V8dWvOBp+Kq9dn$ zc$MBlbO9`g>{9$;tZvkpJ^(yz5Zxp$Op#Xm*Io)OoynfY{N0WMtwC6TL1^pqjap@1 z(q-O&otJeBSaq8N<6UsHEgtruwLH6&c4S_PBU`tVb#wasSkAkA%^FlVpU=y>{KaeABE zv3)B3o!e)j^bxAhg!zQV%dWc-!?knh`raX=>!H~N$JFsTm^z4akh0TM zyb&vEwiw2=&OepD)M>EA|ES_p|NMU^^MbCO3}rE|sQ47DTqs0+ijgy026PhZ!-fYdavPhocSCi@@P-?(9bBB>A1x~% z_(dUFl0EWXE;o>NBYM}dBOev)ylmd7)~)`!vZ}s?WmuNnh*olW%6;coR7@XtEPpq3 zE(~QJpG9~KoHgFK?h(x22 zWGE1i1(WwrpD8MQHT6Q&;}{eQdd#?oM;nha<56b3&~nUk-pkDl+q~$xlFLQGx1ou9 zz<&mQ0K5{TeH#2V@Nw`~_-8RZs}nv`4t^dy3O)|r1CG9t!SQ61aBOuu<`ueJyO8cd z>U>Zk%0Z_IQRJ>KDqM5@4Aa#mzIyY$UtUsn8|BrYx6$!Sz(q}wduPFlnNwm%VMXQN zgyeT2-$@%FnxshKOg1d`|-WWZ?m&c;Yg*OtzCz%&tX83OdfG8gHn||R9 zg^jj^zawOXgUG3o%3=5u34gcBq2pf91Sys{K!u{D_#-ax#gBNQ`r zhkXW4f8#jQPvo5n0DVCR${213;d4yt$-55-Jit28M;R(WT5lKplWT36l&C+gR|j|* zzQuCs*ZVDd^lt|0k=B9e+tj1KpMoCOd-^|^)S=&R1kvZI$N6y<5zY%8sLSv;h`vod z`t^&*bQ|KjT&9yYgE$u$=X@A}UNz$OaskDYAnsSx<9y=2K!?@#*aqS>Nb7O_6+*yy zNj+ z$M8Lnw#W78QFOZAJ1N)Y@~fG8Y;Py@I-xg&xDHxx9}={lybD7kTeK3m);na=>&4-$ zmwL8#XuV%U51;jNjOE=OzU{RP$rJJ4A`X$%zoKQ*f78`#iZ*da{~7 z3d30tI8PL2&%yo#=BQwtt^L#~Z&=m&fay+a#ik!CtY)s>f1TE;fPSgu7%T?*AA(b! z3gCwmxRlA#pU9npr<2Lx#OcI7ZZ7e!99yi*cVOjUj&W=6EeIOi`I@EkD!&T|wo^}i3U`@@0$7^J`otj}@8dti^AKzm#l_5$-&Mut2MS9q8|+z`SFlC(lNE zYALsZ2iyQYkN#u*XBW&ADPTQ59^C5p*z|dZdoBpt;p_~%hz9ccfpJp4``mRDX@2I|j6!`|QJa`U@~<=L1-$E??C+bz9AMt7^1F`qO4Sm^?7{Gs;$i%z$3w$+9so6b#sehh+rrYYL6sw zGB(T(11}G;P*PkY$uNR(qdgjL<#)arPb3Y0s!QO&*%=L)p`dr!-OI~i`5HziuU`V8N?Iy6PK zOUJJ=6%_Q&VXTtQ?bq7)-J)5xq6GSUVo~q^@~ioe(|v< z$#)-hErN$2^`H}y$9t;=d2dRSc`Max(quxp^$ulEQBO_w6kO-v!e{bL$}Y3ND@~^J zB?+TE*)Vn4gtV(3o}iM98)1Jeh|b|{&!mNNiLF-Vy`6pRjmw@*K6lv@_*Q1ewgKZ1 z3wRsG-5TPyP9yvTs)_F;D@neg8Edu}P1Xdcjrx;Gc)wv_Y_(5u(62e<6EAaDRY4Xk I$I+hrKXKN%tN;K2 From 0cbc4fc7c38fae1959db20b092df34dfdb3b1dae Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 19 Mar 2024 14:22:27 +0100 Subject: [PATCH 25/41] chore: update busybox binary to 64 bits version Version FRP-5301-gda71f7c57 Signed-off-by: Frederic Pillon --- win/README.md | 2 +- win/busybox.exe | Bin 597518 -> 659968 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/win/README.md b/win/README.md index 6c95b0ecb..b7f799e7d 100644 --- a/win/README.md +++ b/win/README.md @@ -4,6 +4,6 @@ - `run_arduino_gen.sh` - `stm32CubeProg.sh` -Currently FRP-4264-gc79f13025, downloaded from [busybox-w32]. +Version FRP-5301-gda71f7c57 (64-bit), downloaded from [busybox-w32]. [busybox-w32]: https://frippery.org/busybox/ diff --git a/win/busybox.exe b/win/busybox.exe index c21bd2c8d13ec45ee8dc6e3f8cfb0c34b96f0914..537b7f948fb8350c8bf62ef2571f71dff3cb687d 100644 GIT binary patch literal 659968 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�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\UI8yo@-Nr-sXn)z=og=4JUBPH~W_ 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�+ztl@Y( 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 u79ooymEmrSOV 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%0D4Fk}`UT9LU5czj;V*crZkWq$7Gz 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 LX)yBt0tEgC^>=4j literal 597518 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:$j6K57CyH<0v7_9-*D0;SUdQ_ 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

Uw}@E>$y-7 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⋘nzq|r=Qc3%`U%%W-m@Qi;Fc^+@f-P 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 From e3a27c08b301e7ff8792d3b2a4c711431a42d212 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Thu, 28 Mar 2024 08:51:40 +0100 Subject: [PATCH 26/41] refactor(stm32CubeProg): use getopt and extend options Added options: Serial: rts, dtr (optional) DFU: vid, pid (mandatory) Signed-off-by: Frederic Pillon --- stm32CubeProg.sh | 240 ++++++++++++++++++++++++++++++----------------- 1 file changed, 152 insertions(+), 88 deletions(-) diff --git a/stm32CubeProg.sh b/stm32CubeProg.sh index ed5e00c03..403d1a425 100644 --- a/stm32CubeProg.sh +++ b/stm32CubeProg.sh @@ -1,75 +1,143 @@ #!/bin/sh - set -o nounset # Treat unset variables as an error -# set -o xtrace # Print command traces before executing command. +# set -o xtrace # Print command traces before executing command. STM32CP_CLI= +INTERFACE= +PORT= +FILEPATH= ADDRESS=0x8000000 -ERASE="" -MODE="" -PORT="" -OPTS="" +OFFSET=0x0 +# Optional +ERASE= +# Optional for Serial +RTS= +DTR= +# Mandatory for DFU +VID= +PID= ############################################################################### ## Help function usage() { - echo "############################################################" - echo "##" - echo "## $(basename "$0") [OPTIONS]" - echo "##" - echo "## protocol:" - echo "## 0: SWD" - echo "## 1: Serial" - echo "## 2: DFU" - echo "## Note: prefix it by 1 to erase all sectors." - echo "## Ex: 10 erase all sectors using SWD interface." - echo "## file_path: file path name to be downloaded: (bin, hex)" - echo "## offset: offset to add to $ADDRESS" - echo "## Options:" - echo "## For SWD and DFU: no mandatory options" - echo "## For Serial: " - echo "## com_port: serial identifier (mandatory). Ex: /dev/ttyS0 or COM1" - echo "##" - echo "## Note: all trailing arguments will be passed to the $STM32CP_CLI" - echo "## They have to be valid commands for STM32CubeProgrammer cli" - echo "## Ex: -rst: Reset system" - echo "############################################################" + echo "Usage: $(basename "$0") [OPTIONS]... + + Mandatory options: + -i, --interface <'swd'/'dfu'/'serial'> interface identifier: 'swd', 'dfu' or 'serial' + -f, --file file path to be downloaded: bin or hex + Optional options: + -e, --erase erase all sectors before flashing + -o, --offset offset from flash base ($ADDRESS) where flashing should start + + Specific options for Serial protocol: + Mandatory: + -c, --com serial identifier, ex: COM1 or /dev/ttyS0,... + Optional: + -r, --rts polarity of RTS signal ('low' by default) + -d, --dtr polarity of DTR signal + + Specific options for DFU protocol: + Mandatory: + -v, --vid vendor id, ex: 0x0483 + -p, --pid product id, ex: 0xdf11 + +" >&2 exit "$1" } +aborting() { + echo "STM32CubeProgrammer not found ($STM32CP_CLI). + Please install it or add '/bin' to your PATH environment: + https://www.st.com/en/development-tools/stm32cubeprog.html + Aborting!" >&2 + exit 1 +} + +# parse command line arguments +# options may be followed by one colon to indicate they have a required arg +if ! options=$(getopt -a -o hi:ef:o:c:r:d:v:p: --long help,interface:,erase,file:,offset:,com:,rts:,dtr:,vid:,pid: -- "$@"); then + echo "Terminating..." >&2 + exit 1 +fi + +eval set -- "$options" + +while true; do + case "$1" in + -h | --help | -\?) + usage 0 + ;; + -i | --interface) + INTERFACE=$(echo "$2" | tr '[:upper:]' '[:lower:]') + echo "Selected interface: $INTERFACE" + shift 2 + ;; + -e | --erase) + ERASE="--erase all" + shift 1 + ;; + -f | --file) + FILEPATH=$2 + shift 2 + ;; + -o | --offset) + OFFSET=$2 + ADDRESS=$(printf "0x%x" $((ADDRESS + OFFSET))) + shift 2 + ;; + -c | --com) + PORT=$2 + shift 2 + ;; + -r | --rts) + RTS=$(echo "rts=$2" | tr '[:upper:]' '[:lower:]') + shift 2 + ;; + -d | --dtr) + DTR=$(echo "dtr=$2" | tr '[:upper:]' '[:lower:]') + shift 2 + ;; + -v | --vid) + VID=$2 + shift 2 + ;; + -p | --pid) + PID=$2 + shift 2 + ;; + --) + shift + break + ;; + esac +done +# Check STM32CubeProgrammer cli availability, fallback to dfu-util if protocol dfu UNAME_OS="$(uname -s)" case "${UNAME_OS}" in Linux*) STM32CP_CLI=STM32_Programmer.sh - if ! command -v $STM32CP_CLI > /dev/null 2>&1; then + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then export PATH="$HOME/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin":"$PATH" fi - if ! command -v $STM32CP_CLI > /dev/null 2>&1; then + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then export PATH="/opt/stm32cubeprog/bin":"$PATH" fi - if ! command -v $STM32CP_CLI > /dev/null 2>&1; then - echo "STM32CubeProgrammer not found ($STM32CP_CLI)." - echo "Please install it or add '/bin' to your PATH environment:" - echo "https://www.st.com/en/development-tools/stm32cubeprog.html" - echo "Aborting!" - exit 1 + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + aborting fi ;; Darwin*) STM32CP_CLI=STM32_Programmer_CLI - if ! command -v $STM32CP_CLI > /dev/null 2>&1; then + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then export PATH="/Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/Contents/MacOs/bin":"$PATH" fi - if ! command -v $STM32CP_CLI > /dev/null 2>&1; then - echo "STM32CubeProgrammer not found ($STM32CP_CLI)." - echo "Please install it or add '/bin' to your PATH environment:" - echo "https://www.st.com/en/development-tools/stm32cubeprog.html" - echo "Aborting!" - exit 1 + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + aborting fi ;; Windows*) STM32CP_CLI=STM32_Programmer_CLI.exe - if ! command -v $STM32CP_CLI > /dev/null 2>&1; then + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then if [ -n "${PROGRAMFILES+x}" ]; then STM32CP86=${PROGRAMFILES}/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin export PATH="${STM32CP86}":"$PATH" @@ -78,69 +146,65 @@ case "${UNAME_OS}" in STM32CP=${PROGRAMW6432}/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin export PATH="${STM32CP}":"$PATH" fi - if ! command -v $STM32CP_CLI > /dev/null 2>&1; then - echo "STM32CubeProgrammer not found ($STM32CP_CLI)." - echo "Please install it or add '\bin' to your PATH environment:" - echo "https://www.st.com/en/development-tools/stm32cubeprog.html" - echo "Aborting!" + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + aborting fi fi ;; *) - echo "Unknown host OS: ${UNAME_OS}." + echo "Unknown host OS: ${UNAME_OS}." >&2 exit 1 ;; esac -if [ $# -lt 3 ]; then - echo "Not enough arguments!" - usage 2 +# Check mandatory options +if [ -z "${INTERFACE}" ]; then + echo "Error missing interface!" >&2 + usage 1 fi - -# Parse options -PROTOCOL=$1 -FILEPATH=$2 -OFFSET=$3 -ADDRESS=$(printf "0x%x" $((ADDRESS + OFFSET))) - -# Protocol $1 -# 1x: Erase all sectors -if [ "$1" -ge 10 ]; then - ERASE="yes" - PROTOCOL=$(($1 - 10)) +if [ -z "${FILEPATH}" ]; then + echo "Error missing file argmument!" >&2 + usage 1 fi -# Protocol $1 -# 0: SWD -# 1: Serial -# 2: DFU -case $PROTOCOL in - 0) - PORT="SWD" - MODE="mode=UR" - shift 3 +if [ ! -r "${FILEPATH}" ]; then + echo "Error ${FILEPATH} does not exist!" >&2 + usage 1 +fi + +case "${INTERFACE}" in + swd) + ${STM32CP_CLI} --connect port=SWD mode=UR "${ERASE}" --quietMode --download "${FILEPATH}" "${ADDRESS}" --start "${ADDRESS}" ;; - 1) - if [ $# -lt 4 ]; then - usage 3 - else - PORT=$4 - shift 4 + dfu) + if [ -z "${VID}" ] || [ -z "${PID}" ]; then + echo "Missing mandatory arguments for DFU mode (VID/PID)!" >&2 + exit 1 fi + ${STM32CP_CLI} --connect port=usb1 VID="${VID}" PID="${PID}" "${ERASE}" --quietMode --download "${FILEPATH}" "${ADDRESS}" --start "${ADDRESS}" ;; - 2) - PORT="USB1" - shift 3 + serial) + if [ -z "${PORT}" ]; then + echo "Missing mandatory arguments for serial mode: serial identifier!" >&2 + exit 1 + fi + if [ -n "${RTS}" ]; then + if [ "${RTS}" != "rts=low" ] && [ "${RTS}" != "rts=high" ]; then + echo "Wrong rts value waiting high or low instead of ${RTS}" >&2 + exit 1 + fi + fi + if [ -n "${DTR}" ]; then + if [ "${DTR}" != "dtr=low" ] && [ "${DTR}" != "dtr=high" ]; then + echo "Wrong dtr value waiting high or low instead of ${DTR}" >&2 + exit 1 + fi + fi + ${STM32CP_CLI} --connect port="${PORT}" "${RTS}" "${DTR}" "${ERASE}" --quietMode --download "${FILEPATH}" "${ADDRESS}" --start "${ADDRESS}" ;; *) - echo "Protocol unknown!" + echo "Protocol unknown!" >&2 usage 4 ;; esac -if [ $# -gt 0 ]; then - OPTS="$*" -fi - -${STM32CP_CLI} -c port=${PORT} ${MODE} ${ERASE:+"-e all"} -q -d "${FILEPATH}" "${ADDRESS}" -s "${ADDRESS}" "${OPTS}" - exit $? From f0c3abe3b7dbf7a0286088d57c1951659c9a6d7f Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 26 Mar 2024 10:46:07 +0100 Subject: [PATCH 27/41] chore(maple_upload): remove useless part Signed-off-by: Frederic Pillon --- maple_upload.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/maple_upload.sh b/maple_upload.sh index 2b10603a9..c391a0af8 100755 --- a/maple_upload.sh +++ b/maple_upload.sh @@ -52,11 +52,7 @@ fi COUNTER=5 while - if [ $# -eq 5 ]; then - "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" "--dfuse-address $5" -R - else - "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" -R - fi + "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" -R ret=$? do if [ $ret -eq 0 ]; then From b84d4ff2a3f70f412e0ea877377d1a0a28681268 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Fri, 22 Mar 2024 17:36:19 +0100 Subject: [PATCH 28/41] feat(maple_upload): replace usbID by usb vid and pid Signed-off-by: Frederic Pillon --- maple_upload.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/maple_upload.sh b/maple_upload.sh index c391a0af8..98fee0d81 100755 --- a/maple_upload.sh +++ b/maple_upload.sh @@ -2,13 +2,14 @@ set -e -if [ $# -lt 4 ]; then - echo "Usage: $0 " >&2 +if [ $# -lt 5 ]; then + echo "Usage: $0 " >&2 exit 1 fi altID="$2" -usbID="$3" -binfile="$4" +usbVID=${3#"0x"} +usbPID=${4#"0x"} +binfile="$5" EXT="" UNAME_OS="$(uname -s)" @@ -52,7 +53,7 @@ fi COUNTER=5 while - "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" -R + "${DIR}/dfu-util.sh" -d "${usbVID}:${usbPID}" -a "${altID}" -D "${binfile}" -R ret=$? do if [ $ret -eq 0 ]; then From 75e067fe69ba6f38d44f64a7d1cfef143eb1531e Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Wed, 27 Mar 2024 13:46:00 +0100 Subject: [PATCH 29/41] fix(maple_upload): review output redirection Signed-off-by: Frederic Pillon --- maple_upload.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/maple_upload.sh b/maple_upload.sh index 98fee0d81..0cc71aea2 100755 --- a/maple_upload.sh +++ b/maple_upload.sh @@ -70,13 +70,13 @@ do fi done -printf "Waiting for %s serial..." "${dummy_port_fullpath}" >&2 +printf "Waiting for %s serial..." "${dummy_port_fullpath}" COUNTER=40 if [ ${OS_DIR} = "win" ]; then while [ $COUNTER -gt 0 ]; do if ! "${DIR}/${OS_DIR}/check_port${EXT}" "${dummy_port_fullpath}"; then COUNTER=$((COUNTER - 1)) - printf "." >&2 + printf "." sleep 0.1 else break @@ -86,7 +86,7 @@ if [ ${OS_DIR} = "win" ]; then else while [ ! -r "${dummy_port_fullpath}" ] && [ $COUNTER -gt 0 ]; do COUNTER=$((COUNTER - 1)) - printf "." >&2 + printf "." sleep 0.1 done fi @@ -95,5 +95,5 @@ if [ $COUNTER -eq -0 ]; then echo " Timed out." >&2 exit 1 else - echo " Done." >&2 + echo " Done." fi From ed7bc74942222a4994d9a7f333209d1da56ea39e Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Wed, 27 Mar 2024 13:46:47 +0100 Subject: [PATCH 30/41] fix(maple_upload): add a delay after upload else logs are not properly displayed (mixed). Signed-off-by: Frederic Pillon --- maple_upload.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/maple_upload.sh b/maple_upload.sh index 0cc71aea2..98a66f5dd 100755 --- a/maple_upload.sh +++ b/maple_upload.sh @@ -70,6 +70,8 @@ do fi done +sleep 1 + printf "Waiting for %s serial..." "${dummy_port_fullpath}" COUNTER=40 if [ ${OS_DIR} = "win" ]; then From c49f625e15beccffc3aca8f64730113e8b9420d4 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Fri, 28 Jul 2023 15:55:05 +0200 Subject: [PATCH 31/41] chore(dfu-util): remove source Signed-off-by: Frederic Pillon --- src/dfu-util/AUTHORS | 30 - src/dfu-util/COPYING | 340 --------- src/dfu-util/ChangeLog | 93 --- src/dfu-util/DEVICES.txt | 20 - src/dfu-util/Makefile.am | 3 - src/dfu-util/README | 20 - src/dfu-util/TODO | 14 - src/dfu-util/autogen.sh | 2 - src/dfu-util/build_dfu-util.sh | 14 - src/dfu-util/configure.ac | 41 - src/dfu-util/device-logs/README | 77 -- src/dfu-util/device-logs/dsonano.lsusb | 60 -- src/dfu-util/device-logs/lpclink.log | 59 -- src/dfu-util/device-logs/lpclink.lsusb | 58 -- src/dfu-util/device-logs/lpclink2.log | 59 -- src/dfu-util/device-logs/lpclink2.lsusb | 203 ----- src/dfu-util/device-logs/opc-20.lsusb | 60 -- .../openmoko-freerunner-dfumode.lsusb | 109 --- .../device-logs/openmoko-freerunner.lsusb | 179 ----- .../device-logs/openmoko-neo1973.lsusb | 182 ----- src/dfu-util/device-logs/openpcd.lsusb | 60 -- .../device-logs/qi-hardware-atusb.lsusb | 59 -- src/dfu-util/device-logs/simtrace.lsusb | 70 -- src/dfu-util/device-logs/sparkcore.lsusb | 60 -- .../device-logs/stm32f107.bin-download | 48 -- src/dfu-util/device-logs/stm32f107.lsusb | 60 -- .../device-logs/stm32f4discovery.bin-download | 36 - .../device-logs/stm32f4discovery.lsusb | 80 -- src/dfu-util/device-logs/tdk-bluetooth.lsusb | 269 ------- src/dfu-util/dfuse-pack.py | 121 --- src/dfu-util/doc/40-dfuse.rules | 4 - src/dfu-util/doc/Makefile.am | 2 - src/dfu-util/doc/SPEC-differences.txt | 21 - src/dfu-util/doc/dfu-util.1 | 248 ------- src/dfu-util/msvc/README_msvc.txt | 10 - src/dfu-util/msvc/dfu-suffix_2010.vcxproj | 100 --- src/dfu-util/msvc/dfu-util_2010.sln | 54 -- src/dfu-util/msvc/dfu-util_2010.vcxproj | 120 --- src/dfu-util/src/Makefile.am | 28 - src/dfu-util/src/dfu.c | 357 --------- src/dfu-util/src/dfu.h | 133 ---- src/dfu-util/src/dfu_file.c | 444 ----------- src/dfu-util/src/dfu_file.h | 60 -- src/dfu-util/src/dfu_load.c | 196 ----- src/dfu-util/src/dfu_load.h | 7 - src/dfu-util/src/dfu_util.c | 346 --------- src/dfu-util/src/dfu_util.h | 36 - src/dfu-util/src/dfuse.c | 652 ---------------- src/dfu-util/src/dfuse.h | 35 - src/dfu-util/src/dfuse_mem.c | 198 ----- src/dfu-util/src/dfuse_mem.h | 44 -- src/dfu-util/src/main.c | 699 ------------------ src/dfu-util/src/portable.h | 72 -- src/dfu-util/src/prefix.c | 176 ----- src/dfu-util/src/quirks.c | 56 -- src/dfu-util/src/quirks.h | 27 - src/dfu-util/src/suffix.c | 176 ----- src/dfu-util/src/usb_dfu.h | 99 --- src/dfu-util/www/build.html | 147 ---- src/dfu-util/www/dfu-util.1.html | 411 ---------- src/dfu-util/www/dfuse.html | 135 ---- src/dfu-util/www/index.html | 119 --- src/dfu-util/www/simple.css | 56 -- 63 files changed, 7754 deletions(-) delete mode 100644 src/dfu-util/AUTHORS delete mode 100644 src/dfu-util/COPYING delete mode 100644 src/dfu-util/ChangeLog delete mode 100644 src/dfu-util/DEVICES.txt delete mode 100644 src/dfu-util/Makefile.am delete mode 100644 src/dfu-util/README delete mode 100644 src/dfu-util/TODO delete mode 100644 src/dfu-util/autogen.sh delete mode 100644 src/dfu-util/build_dfu-util.sh delete mode 100644 src/dfu-util/configure.ac delete mode 100644 src/dfu-util/device-logs/README delete mode 100644 src/dfu-util/device-logs/dsonano.lsusb delete mode 100644 src/dfu-util/device-logs/lpclink.log delete mode 100644 src/dfu-util/device-logs/lpclink.lsusb delete mode 100644 src/dfu-util/device-logs/lpclink2.log delete mode 100644 src/dfu-util/device-logs/lpclink2.lsusb delete mode 100644 src/dfu-util/device-logs/opc-20.lsusb delete mode 100644 src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb delete mode 100644 src/dfu-util/device-logs/openmoko-freerunner.lsusb delete mode 100644 src/dfu-util/device-logs/openmoko-neo1973.lsusb delete mode 100644 src/dfu-util/device-logs/openpcd.lsusb delete mode 100644 src/dfu-util/device-logs/qi-hardware-atusb.lsusb delete mode 100644 src/dfu-util/device-logs/simtrace.lsusb delete mode 100644 src/dfu-util/device-logs/sparkcore.lsusb delete mode 100644 src/dfu-util/device-logs/stm32f107.bin-download delete mode 100644 src/dfu-util/device-logs/stm32f107.lsusb delete mode 100644 src/dfu-util/device-logs/stm32f4discovery.bin-download delete mode 100644 src/dfu-util/device-logs/stm32f4discovery.lsusb delete mode 100644 src/dfu-util/device-logs/tdk-bluetooth.lsusb delete mode 100644 src/dfu-util/dfuse-pack.py delete mode 100644 src/dfu-util/doc/40-dfuse.rules delete mode 100644 src/dfu-util/doc/Makefile.am delete mode 100644 src/dfu-util/doc/SPEC-differences.txt delete mode 100644 src/dfu-util/doc/dfu-util.1 delete mode 100644 src/dfu-util/msvc/README_msvc.txt delete mode 100644 src/dfu-util/msvc/dfu-suffix_2010.vcxproj delete mode 100644 src/dfu-util/msvc/dfu-util_2010.sln delete mode 100644 src/dfu-util/msvc/dfu-util_2010.vcxproj delete mode 100644 src/dfu-util/src/Makefile.am delete mode 100644 src/dfu-util/src/dfu.c delete mode 100644 src/dfu-util/src/dfu.h delete mode 100644 src/dfu-util/src/dfu_file.c delete mode 100644 src/dfu-util/src/dfu_file.h delete mode 100644 src/dfu-util/src/dfu_load.c delete mode 100644 src/dfu-util/src/dfu_load.h delete mode 100644 src/dfu-util/src/dfu_util.c delete mode 100644 src/dfu-util/src/dfu_util.h delete mode 100644 src/dfu-util/src/dfuse.c delete mode 100644 src/dfu-util/src/dfuse.h delete mode 100644 src/dfu-util/src/dfuse_mem.c delete mode 100644 src/dfu-util/src/dfuse_mem.h delete mode 100644 src/dfu-util/src/main.c delete mode 100644 src/dfu-util/src/portable.h delete mode 100644 src/dfu-util/src/prefix.c delete mode 100644 src/dfu-util/src/quirks.c delete mode 100644 src/dfu-util/src/quirks.h delete mode 100644 src/dfu-util/src/suffix.c delete mode 100644 src/dfu-util/src/usb_dfu.h delete mode 100644 src/dfu-util/www/build.html delete mode 100644 src/dfu-util/www/dfu-util.1.html delete mode 100644 src/dfu-util/www/dfuse.html delete mode 100644 src/dfu-util/www/index.html delete mode 100644 src/dfu-util/www/simple.css diff --git a/src/dfu-util/AUTHORS b/src/dfu-util/AUTHORS deleted file mode 100644 index 1b36c739c..000000000 --- a/src/dfu-util/AUTHORS +++ /dev/null @@ -1,30 +0,0 @@ -Authors ordered by first contribution. - -Harald Welte -Werner Almesberger -Michael Lauer -Jim Huang -Stefan Schmidt -Daniel Willmann -Mike Frysinger -Uwe Hermann -C. Scott Ananian -Bernard Blackham -Holger Freyther -Marc Singer -James Perkins -Tommi Keisala -Pascal Schweizer -Bradley Scott -Uwe Bonnes -Andrey Smirnov -Jussi Timperi -Hans Petter Selasky -Bo Shen -Henrique de Almeida Mendonca -Bernd Krumboeck -Dennis Meier -Veli-Pekka Peltola -Dave Hylands -Michael Grzeschik -Paul Fertser diff --git a/src/dfu-util/COPYING b/src/dfu-util/COPYING deleted file mode 100644 index d60c31a97..000000000 --- a/src/dfu-util/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) 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 -this service 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 make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. 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. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -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 -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the 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 a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE 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. - - 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 -convey 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision 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, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This 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 Library General -Public License instead of this License. diff --git a/src/dfu-util/ChangeLog b/src/dfu-util/ChangeLog deleted file mode 100644 index 37f1addba..000000000 --- a/src/dfu-util/ChangeLog +++ /dev/null @@ -1,93 +0,0 @@ -0.8: - o New, separate dfu-prefix tool (Uwe Bonnes) - o Allow filtering on serial number (Uwe Bonnes) - o Improved VID/PID/serial filtering (Bradley Scott) - o Support reading firmware from stdin (Tormod Volden) - o Warn if missing DFU suffix (Tormod Volden) - o Improved progress bar (Hans Petter Selasky) - o Fix dfuse leave option (Uwe Bonnes) - o Major code rework (Hans Petter Selasky) - o MS Visual Studio build support (Henrique Mendonca) - o dfuse-pack.py tool for .dfu files (Antonio Galeo) - o Many other fixes from many people - -2014-09-13: Tormod Volden - -0.7: - o Support for TI Stellaris devices (Tommi Keisala) - o Fix libusb detection on MacOSX (Marc Singer) - o Fix libusb detection on FreeBSD (Tormod Volden) - o Improved DfuSe support (Tormod Volden) - o Support all special commands (leave, unprotect, mass-erase) - o Arbitrary upload lengths - o "force" option for various possible (dangerous) overrides - -2012-10-07: Tormod Volden - -0.6: - o Add detach mode (Stefan Schmidt) - o Check return value on all libusb calls (Tormod Volden) - o Fix segmentation fault with -s option (Tormod Volden) - o Add DFU suffix manipulation tool (Stefan Schmidt) - o Port to Windows: (Tormod Volden, some parts based on work from Satz - Klauer) - o Port file handling to stdio streams - o Sleep() macros - o C99 types - o Pack structs - o Detect DfuSe device correctly on big-endian architectures (Tormod - Volden) - o Add dfuse progress indication on download (Tormod Volden) - o Cleanup: gcc pedantic, gcc extension, ... (Tormod Volden) - o Rely on page size from functional descriptor. Please report if you get - an error about it. (Tormod Volden) - o Add quirk for Maple since it reports wrong DFU version (Tormod Volden) - -2012-04-22: Stefan Schmidt - -0.5: - o DfuSe extension support for ST devices (Tormod Volden) - o Add initial support for bitWillDetach flag from DFU 1.1 (Tormod - Volden) - o Internal cleanup and some manual page fixes (Tormod Volden) - -2011-11-02: Stefan Schmidt - -0.4: - o Rework to use libusb-1.0 (Stefan Schmidt) - o DFU suffix support (Tormod Volden, Stefan Schmidt) - o Sspeed up DFU downloads directly into memory (Bernard Blackham) - o More flexible -d vid:pid parsing (Tormod Volden) - o Many bug fixes and cleanups - -2011-07-20: Stefan Schmidt - -0.3: - o quirks: Add OpenOCD to the poll timeout quirk table. - -2010-12-22: Stefan Schmidt - -0.2: - o Fix some typos on the website and the README (Antonio Ospite, Uwe - Hermann) - o Remove build rule for a static binary. We can use autotools for this. - (Mike Frysinger) - o Fix infinite loop in download error path (C. Scott Ananian) - o Break out to show the 'finished' in upload (C. Scott Ananian) - o Add GPLv2+ headers (Harald Welte) - o Remove dead code (commands.[ch]) remnescent of dfu-programmer (Harald - Welte) - o Simple quirk system with Openmoko quirk for missing bwPollTimeout (Tormod Volden) - o New default (1024) and clamping of transfer size (Tormod Volden) - o Verify sending of completion packet (Tormod Volden) - o Look for DFU functional descriptor among all descriptors (Tormod - Volden) - o Print out in which direction we are transferring data - o Abort in upload if the file already exists - -2010-11-17 Stefan Schmidt - -0.1: - Initial release - -2010-05-23 Stefan Schmidt diff --git a/src/dfu-util/DEVICES.txt b/src/dfu-util/DEVICES.txt deleted file mode 100644 index bdd9f1f2e..000000000 --- a/src/dfu-util/DEVICES.txt +++ /dev/null @@ -1,20 +0,0 @@ -List of supported software and hardware products: - -Software user (bootloader, etc) -------------------------------- -- Sam7DFU: http://www.openpcd.org/Sam7dfu -- U-boot: DFU patches -- Barebox: http://www.barebox.org/ -- Leaflabs: http://code.google.com/p/leaflabs/ -- Blackmagic DFU - -Products using DFU ------------------- -- OpenPCD (sam7dfu) -- Openmoko Neo 1973 and Freerunner (u-boot with DFU patches) -- Leaflabs Maple -- ATUSB from Qi Hardware -- STM32F105/7, STM32F2/F3/F4 in System Bootloader -- Blackmagic debug probe -- NXP LPC31xx/LPC43XX, e.g. LPC-Link and LPC-Link2, need binaries - with LPC prefix and encoding (LPC-Link) diff --git a/src/dfu-util/Makefile.am b/src/dfu-util/Makefile.am deleted file mode 100644 index 641dda58a..000000000 --- a/src/dfu-util/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -SUBDIRS = src doc - -EXTRA_DIST = autogen.sh TODO DEVICES.txt dfuse-pack.py diff --git a/src/dfu-util/README b/src/dfu-util/README deleted file mode 100644 index 0f8f2621a..000000000 --- a/src/dfu-util/README +++ /dev/null @@ -1,20 +0,0 @@ -Dfu-util - Device Firmware Upgrade Utilities - -Dfu-util is the host side implementation of the DFU 1.0 [1] and DFU 1.1 [2] -specification of the USB forum. - -DFU is intended to download and upload firmware to devices connected over -USB. It ranges from small devices like micro-controller boards up to mobile -phones. With dfu-util you are able to download firmware to your device or -upload firmware from it. - -dfu-util has been tested with Openmoko Neo1973 and Freerunner and many -other devices. - -[1] DFU 1.0 spec: http://www.usb.org/developers/devclass_docs/usbdfu10.pdf -[2] DFU 1.1 spec: http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf - -The official website is: - - http://dfu-util.gnumonks.org/ - diff --git a/src/dfu-util/TODO b/src/dfu-util/TODO deleted file mode 100644 index 900c30c29..000000000 --- a/src/dfu-util/TODO +++ /dev/null @@ -1,14 +0,0 @@ -DfuSe: -- Do erase and write in two separate passes when downloading -- Skip "Set Address" command when downloading contiguous blocks -- Implement "Get Commands" command - -Devices: -- Research iPhone/iPod/iPad support - Heavily modified dfu-util fork here: - https://github.com/planetbeing/xpwn/tree/master/dfu-util -- Test against Niftylights - -Non-Code: -- Logo -- Re-License as LGPL for usage as library? diff --git a/src/dfu-util/autogen.sh b/src/dfu-util/autogen.sh deleted file mode 100644 index e67aed39a..000000000 --- a/src/dfu-util/autogen.sh +++ /dev/null @@ -1,2 +0,0 @@ -#! /bin/sh -autoreconf -v -i diff --git a/src/dfu-util/build_dfu-util.sh b/src/dfu-util/build_dfu-util.sh deleted file mode 100644 index eb4895f1e..000000000 --- a/src/dfu-util/build_dfu-util.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -sudo apt-get build-dep dfu-util -sudo apt-get install build-essentials -sudo apt-get install libusb-1.0-0-dev -sudo apt-get install autoconf automake autotools-dev - -./autogen.sh -./configure -make -cp src/dfu-util ../../linux/dfu-util -cp src/dfu-suffix ../../linux/dfu-util -cp src/dfu-prefix ../../linux/dfu-util - diff --git a/src/dfu-util/configure.ac b/src/dfu-util/configure.ac deleted file mode 100644 index 86221143f..000000000 --- a/src/dfu-util/configure.ac +++ /dev/null @@ -1,41 +0,0 @@ -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -AC_PREREQ(2.59) -AC_INIT([dfu-util],[0.8],[dfu-util@lists.gnumonks.org],,[http://dfu-util.gnumonks.org]) -AC_CONFIG_AUX_DIR(m4) -AM_INIT_AUTOMAKE([foreign]) -AC_CONFIG_HEADERS([config.h]) - -# Test for new silent rules and enable only if they are available -m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) - -# Checks for programs. -AC_PROG_CC - -# Checks for libraries. -# On FreeBSD the libusb-1.0 is called libusb and resides in system location -AC_CHECK_LIB([usb], [libusb_init],, [native_libusb=no],) -AS_IF([test x$native_libusb = xno], [ - PKG_CHECK_MODULES([USB], [libusb-1.0 >= 1.0.0],, - AC_MSG_ERROR([*** Required libusb-1.0 >= 1.0.0 not installed ***])) -]) -AC_CHECK_LIB([usbpath],[usb_path2devnum],,,-lusb) - -LIBS="$LIBS $USB_LIBS" -CFLAGS="$CFLAGS $USB_CFLAGS" - -# Checks for header files. -AC_HEADER_STDC -AC_CHECK_HEADERS([usbpath.h windows.h sysexits.h]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_SIZE_T - -# Checks for library functions. -AC_FUNC_MEMCMP -AC_CHECK_FUNCS([ftruncate getpagesize nanosleep err]) - -AC_CONFIG_FILES(Makefile src/Makefile doc/Makefile) -AC_OUTPUT diff --git a/src/dfu-util/device-logs/README b/src/dfu-util/device-logs/README deleted file mode 100644 index 00d3d1a96..000000000 --- a/src/dfu-util/device-logs/README +++ /dev/null @@ -1,77 +0,0 @@ -Device: -------- -qi-hardware-atusb: -- Qi Hardware ben-wpan -- DFU implementation: - http://projects.qi-hardware.com/index.php/p/ben-wpan/source/tree/master/atusb/fw/usb -- Tester: Stefan Schmidt - -openpcd: -- OpenPCD RFID reader -- DFU implementation: SAM7DFU - http://www.openpcd.org/Sam7dfu, git://git.gnumonks.org/openpcd.git -- Tester: Stefan Schmidt - -simtrace: -- Sysmocom SimTrace -- DFU implementation: SAM7DFU - http://www.openpcd.org/Sam7dfu, git://git.gnumonks.org/openpcd.git -- Tester: Stefan Schmidt - -openmoko-freerunner: -- Openmoko Freerunner -- DFU implementation: Old U-Boot - http://git.openmoko.org/?p=u-boot.git;a=shortlog;h=refs/heads/mokopatches -- Tester: Stefan Schmidt - -openmoko-neo1973: -- Openmoko Neo1073 -- DFU implementation: Old U-Boot - http://git.openmoko.org/?p=u-boot.git;a=shortlog;h=refs/heads/mokopatches -- Tester: Stefan Schmidt - -tdk-bluetooth: -- TDK Corp. Bluetooth Adapter -- DFU implementation: closed soure -- Only upload has been tested -- Tester: Stefan Schmidt - -stm32f107: -- STM32 microcontrollers with built-in (ROM) DFU loader -- DFU implementation: Closed source but probably similar to the one - in their USB device libraries. Some relevant application notes: - http://www.st.com -> AN3156 and AN2606 -- Tested by Uwe Bonnes - -stm32f4discovery: -- STM32 microcontroller board with built-in (ROM) DFU loader -- DFU implementation: Closed source, probably similar to stm32f107. -- Tested by Joe Rothweiler - -dso-nano: -- DSO Nano pocket oscilloscope -- DFU implementation: Based on ST Microelectronics USB FS Library 1.0 - http://dsonano.googlecode.com/files/DS0201_OpenSource.rar -- Tester: Tormod Volden - -opc-20: -- Custom devices based on STM32F1xx -- DFU implementation: ST Microelectronics USB FS Device Library 3.1.0 - http://www.st.com -> um0424.zip -- Tester: Tormod Volden - -lpc-link, lpclink2: -- NXP LPCXpresso debug adapters -- Proprietary DFU implementation, uses special download files with - LPC prefix and encoding of the target firmware code -- Tested by Uwe Bonnes - -Adding the lsusb output and a download log of your device here helps -us to avoid regressions for hardware we cannot test while working on -the code. To extract the lsusb output use this command: -sudo lsusb -v -d $USBID > $DEVICE.lsusb -Prepare a description snippet as above, and send it to us. A log -(copy-paste of the command window) of a firmware download is also -nice, please use the double verbose option -v -v and include the -command line in the log file. - diff --git a/src/dfu-util/device-logs/dsonano.lsusb b/src/dfu-util/device-logs/dsonano.lsusb deleted file mode 100644 index 140a7bc6c..000000000 --- a/src/dfu-util/device-logs/dsonano.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 002 Device 004: ID 0483:df11 SGS Thomson Microelectronics -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0483 SGS Thomson Microelectronics - idProduct 0xdf11 - bcdDevice 1.1a - iManufacturer 1 STMicroelectronics - iProduct 2 STM32 DFU - iSerial 3 001 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 64mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 0 - iInterface 4 @Internal Flash /0x08000000/12*001Ka,116*001Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 0 - iInterface 5 @SPI Flash : M25P64/0x00000000/64*064Kg,64*064Kg - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 1024 bytes - bcdDFUVersion 1.1a -Device Status: 0x0000 - (Bus Powered) diff --git a/src/dfu-util/device-logs/lpclink.log b/src/dfu-util/device-logs/lpclink.log deleted file mode 100644 index 7de4dd3e6..000000000 --- a/src/dfu-util/device-logs/lpclink.log +++ /dev/null @@ -1,59 +0,0 @@ -(The on-board LPC3154 has some encryption key set and LPCXpressoWIN.enc -is encrypted.) - -$ lsusb | grep NXP -Bus 003 Device 011: ID 0471:df55 Philips (or NXP) LPCXpresso LPC-Link - -$ dfu-util -v -v -v -R -D /opt/lpc/lpcxpresso/bin/LPCXpressoWIN.enc - -dfu-util 0.7 - -Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc. -Copyright 2010-2012 Tormod Volden and Stefan Schmidt -This program is Free Software and has ABSOLUTELY NO WARRANTY -Please report bugs to dfu-util@lists.gnumonks.org - -dfu-util: Invalid DFU suffix signature -dfu-util: A valid DFU suffix will be required in a future dfu-util release!!! -Deducing device DFU version from functional descriptor length -Opening DFU capable USB device... -ID 0471:df55 -Run-time device DFU version 0100 -Claiming USB DFU Runtime Interface... -Determining device status: -state = dfuIDLE, status = 0 -dfu-util: WARNING: Runtime device already in DFU state ?!? -Claiming USB DFU Interface... -Setting Alternate Setting #0 ... -Determining device status: -state = dfuIDLE, status = 0 -dfuIDLE, continuing -DFU mode device DFU version 0100 -Device returned transfer size 2048 -Copying data from PC to DFU device -Download [ ] 0% 0 bytes -Download [= ] 6% 2048 bytes -Download [=== ] 13% 4096 bytes -Download [==== ] 19% 6144 bytes -Download [====== ] 26% 8192 bytes -Download [======== ] 32% 10240 bytes -Download [========= ] 39% 12288 bytes -Download [=========== ] 45% 14336 bytes -Download [============= ] 52% 16384 bytes -Download [============== ] 59% 18432 bytes -Download [================ ] 65% 20480 bytes -Download [================== ] 72% 22528 bytes -Download [=================== ] 78% 24576 bytes -Download [===================== ] 85% 26624 bytes -Download [====================== ] 91% 28672 bytes -Download [======================== ] 98% 29192 bytes -Download [=========================] 100% 29192 bytes -Download done. -Sent a total of 29192 bytes -state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present -Done! -dfu-util: can't detach -Resetting USB to switch back to runtime mode - -$ lsusb | grep NXP -Bus 003 Device 012: ID 1fc9:0009 NXP Semiconductors diff --git a/src/dfu-util/device-logs/lpclink.lsusb b/src/dfu-util/device-logs/lpclink.lsusb deleted file mode 100644 index 867b2a2c5..000000000 --- a/src/dfu-util/device-logs/lpclink.lsusb +++ /dev/null @@ -1,58 +0,0 @@ - -Bus 003 Device 008: ID 0471:df55 Philips (or NXP) LPCXpresso LPC-Link -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 2.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0471 Philips (or NXP) - idProduct 0xdf55 LPCXpresso LPC-Link - bcdDevice 0.01 - iManufacturer 0 - iProduct 0 - iSerial 0 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 25 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 0 - iInterface 0 - Device Firmware Upgrade Interface Descriptor: - bLength 7 - bDescriptorType 33 - bmAttributes 1 - Will Not Detach - Manifestation Intolerant - Upload Unsupported - Download Supported - wDetachTimeout 65535 milliseconds - wTransferSize 2048 bytes -Device Qualifier (for other device speed): - bLength 10 - bDescriptorType 6 - bcdUSB 2.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - bNumConfigurations 1 -Device Status: 0x0000 - (Bus Powered) diff --git a/src/dfu-util/device-logs/lpclink2.log b/src/dfu-util/device-logs/lpclink2.log deleted file mode 100644 index 4681eff7d..000000000 --- a/src/dfu-util/device-logs/lpclink2.log +++ /dev/null @@ -1,59 +0,0 @@ -$ lsusb | grep NXP -Bus 003 Device 013: ID 1fc9:000c NXP Semiconductors - -$ dfu-util -D ~/devel/dfu-util/firmware.bin.qthdr - -dfu-util 0.7 - -Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc. -Copyright 2010-2012 Tormod Volden and Stefan Schmidt -This program is Free Software and has ABSOLUTELY NO WARRANTY -Please report bugs to dfu-util@lists.gnumonks.org - -dfu-util: Invalid DFU suffix signature -dfu-util: A valid DFU suffix will be required in a future dfu-util release!!! -Possible unencryptes NXP LPC DFU prefix with the following properties -Payload length: 39 kiByte -Opening DFU capable USB device... -ID 1fc9:000c -Run-time device DFU version 0100 -Claiming USB DFU Runtime Interface... -Determining device status: -state = dfuIDLE, status = 0 -dfu-util: WARNING: Runtime device already in DFU state ?!? -Claiming USB DFU Interface... -Setting Alternate Setting #0 ... -Determining device status: -state = dfuIDLE, status = 0 -dfuIDLE, continuing -DFU mode device DFU version 0100 -Device returned transfer size 2048 -Copying data from PC to DFU device -Download [ ] 0% 0 bytes -Download [= ] 4% 2048 bytes -Download [== ] 9% 4096 bytes -Download [=== ] 14% 6144 bytes -Download [==== ] 19% 8192 bytes -Download [====== ] 24% 10240 bytes -Download [======= ] 28% 12288 bytes -Download [======== ] 33% 14336 bytes -Download [========= ] 38% 16384 bytes -Download [========== ] 43% 18432 bytes -Download [============ ] 48% 20480 bytes -Download [============= ] 53% 22528 bytes -Download [============== ] 57% 24576 bytes -Download [=============== ] 62% 26624 bytes -Download [================ ] 67% 28672 bytes -Download [================== ] 72% 30720 bytes -Download [=================== ] 77% 32768 bytes -Download [==================== ] 82% 34816 bytes -Download [===================== ] 86% 36864 bytes -Download [====================== ] 91% 38912 bytes -Download [======================== ] 96% 40356 bytes -Download [=========================] 100% 40356 bytes -Download done. -Sent a total of 40356 bytes -dfu-util: unable to read DFU status - -$ lsusb | grep NXP -Bus 003 Device 014: ID 1fc9:0018 NXP Semiconductors diff --git a/src/dfu-util/device-logs/lpclink2.lsusb b/src/dfu-util/device-logs/lpclink2.lsusb deleted file mode 100644 index b833fca77..000000000 --- a/src/dfu-util/device-logs/lpclink2.lsusb +++ /dev/null @@ -1,203 +0,0 @@ - -Bus 003 Device 007: ID 0c72:000c PEAK System PCAN-USB -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 16 - idVendor 0x0c72 PEAK System - idProduct 0x000c PCAN-USB - bcdDevice 1c.ff - iManufacturer 0 - iProduct 3 VER1:PEAK -VER2:02.8.01 -DAT :06.05.2004 -TIME:09:35:37 - ... - iSerial 0 - bNumConfigurations 3 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 46 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 200mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 4 - bInterfaceClass 0 (Defined at Interface level) - bInterfaceSubClass 0 - bInterfaceProtocol 0 - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 20 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x01 EP 1 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 20 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x82 EP 2 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 46 - bNumInterfaces 1 - bConfigurationValue 2 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 394mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 4 - bInterfaceClass 0 (Defined at Interface level) - bInterfaceSubClass 0 - bInterfaceProtocol 0 - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 20 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x01 EP 1 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 20 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x82 EP 2 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 46 - bNumInterfaces 1 - bConfigurationValue 3 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 200mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 4 - bInterfaceClass 0 (Defined at Interface level) - bInterfaceSubClass 0 - bInterfaceProtocol 0 - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x01 EP 1 OUT - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x82 EP 2 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 -Device Status: 0x0001 - Self Powered diff --git a/src/dfu-util/device-logs/opc-20.lsusb b/src/dfu-util/device-logs/opc-20.lsusb deleted file mode 100644 index 580df90e5..000000000 --- a/src/dfu-util/device-logs/opc-20.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 001 Device 004: ID 0483:df11 SGS Thomson Microelectronics -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0483 SGS Thomson Microelectronics - idProduct 0xdf11 - bcdDevice 2.00 - iManufacturer 1 STMicroelectronics - iProduct 2 STM32 DFU - iSerial 3 ÿÿÿÿÿÿÿÿÿÿÿÿ - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0xc0 - Self Powered - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 @Internal Flash /0x08000000/12*001Ka,116*001Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 @SPI Flash : M25P64/0x00000000/128*64Kg - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 1024 bytes - bcdDFUVersion 1a.01 -Device Status: 0x0001 - Self Powered diff --git a/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb b/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb deleted file mode 100644 index 4c0abfb06..000000000 --- a/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb +++ /dev/null @@ -1,109 +0,0 @@ -Bus 003 Device 017: ID 1d50:5119 OpenMoko, Inc. GTA01/GTA02 U-Boot Bootloader -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 16 - idVendor 0x1d50 OpenMoko, Inc. - idProduct 0x5119 GTA01/GTA02 U-Boot Bootloader - bcdDevice 0.00 - iManufacturer 1 OpenMoko, Inc - iProduct 2 Neo1973 Bootloader U-Boot 1.3.2-moko12 - iSerial 3 0000000 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 81 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 7 USB Device Firmware Upgrade - bmAttributes 0x80 - (Bus Powered) - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 8 RAM 0x32000000 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 9 u-boot - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 2 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 10 u-boot_env - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 3 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 11 kernel - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 4 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 12 splash - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 5 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 13 factory - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 6 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 14 rootfs - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 7 - Will Not Detach - Manifestation Tolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 4096 bytes - bcdDFUVersion 1.00 -Device Status: 0x0a00 - (Bus Powered) diff --git a/src/dfu-util/device-logs/openmoko-freerunner.lsusb b/src/dfu-util/device-logs/openmoko-freerunner.lsusb deleted file mode 100644 index 835708dd8..000000000 --- a/src/dfu-util/device-logs/openmoko-freerunner.lsusb +++ /dev/null @@ -1,179 +0,0 @@ -Bus 005 Device 033: ID 1d50:5119 OpenMoko, Inc. GTA01/GTA02 U-Boot Bootloader -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.10 - bDeviceClass 2 Communications - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 16 - idVendor 0x1d50 OpenMoko, Inc. - idProduct 0x5119 GTA01/GTA02 U-Boot Bootloader - bcdDevice 0.00 - iManufacturer 1 OpenMoko, Inc - iProduct 2 Neo1973 Bootloader U-Boot 1.3.2-moko12 - iSerial 3 0000000 - bNumConfigurations 2 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 85 - bNumInterfaces 3 - bConfigurationValue 1 - iConfiguration 4 TTY via USB - bmAttributes 0x80 - (Bus Powered) - MaxPower 500mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 2 Communications - bInterfaceSubClass 2 Abstract (modem) - bInterfaceProtocol 1 AT-commands (v.25ter) - iInterface 6 Control Interface - CDC Header: - bcdCDC 0.6e - CDC Call Management: - bmCapabilities 0x00 - bDataInterface 1 - CDC ACM: - bmCapabilities 0x00 - CDC Union: - bMasterInterface 0 - bSlaveInterface 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 10 CDC Data - bInterfaceSubClass 0 Unused - bInterfaceProtocol 0 - iInterface 5 Bulk Data Interface - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 2 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 1 - iInterface 7 USB Device Firmware Upgrade - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 7 - Will Not Detach - Manifestation Tolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 4096 bytes - bcdDFUVersion 1.00 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 67 - bNumInterfaces 2 - bConfigurationValue 2 - iConfiguration 4 TTY via USB - bmAttributes 0x80 - (Bus Powered) - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 2 Communications - bInterfaceSubClass 2 Abstract (modem) - bInterfaceProtocol 1 AT-commands (v.25ter) - iInterface 6 Control Interface - CDC Header: - bcdCDC 0.6e - CDC Call Management: - bmCapabilities 0x00 - bDataInterface 1 - CDC ACM: - bmCapabilities 0x00 - CDC Union: - bMasterInterface 0 - bSlaveInterface 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 10 CDC Data - bInterfaceSubClass 0 Unused - bInterfaceProtocol 0 - iInterface 5 Bulk Data Interface - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 -Device Status: 0x9a00 - (Bus Powered) diff --git a/src/dfu-util/device-logs/openmoko-neo1973.lsusb b/src/dfu-util/device-logs/openmoko-neo1973.lsusb deleted file mode 100644 index 07789506a..000000000 --- a/src/dfu-util/device-logs/openmoko-neo1973.lsusb +++ /dev/null @@ -1,182 +0,0 @@ - -Bus 006 Device 020: ID 1457:5119 First International Computer, Inc. OpenMoko Neo1973 u-boot cdc_acm serial port -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.10 - bDeviceClass 2 Communications - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 16 - idVendor 0x1457 First International Computer, Inc. - idProduct 0x5119 OpenMoko Neo1973 u-boot cdc_acm serial port - bcdDevice 0.00 - iManufacturer 1 - iProduct 2 - iSerial 3 - bNumConfigurations 2 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 85 - bNumInterfaces 3 - bConfigurationValue 1 - iConfiguration 4 - bmAttributes 0x80 - (Bus Powered) - MaxPower 500mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 2 Communications - bInterfaceSubClass 2 Abstract (modem) - bInterfaceProtocol 1 AT-commands (v.25ter) - iInterface 6 - CDC Header: - bcdCDC 0.6e - CDC Call Management: - bmCapabilities 0x00 - bDataInterface 1 - CDC ACM: - bmCapabilities 0x00 - CDC Union: - bMasterInterface 0 - bSlaveInterface 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 10 CDC Data - bInterfaceSubClass 0 Unused - bInterfaceProtocol 0 - iInterface 5 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 2 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 1 - iInterface 7 - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 7 - Will Not Detach - Manifestation Tolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 4096 bytes - bcdDFUVersion 1.00 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 67 - bNumInterfaces 2 - bConfigurationValue 2 - iConfiguration 4 - bmAttributes 0x80 - (Bus Powered) - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 2 Communications - bInterfaceSubClass 2 Abstract (modem) - bInterfaceProtocol 1 AT-commands (v.25ter) - iInterface 6 - CDC Header: - bcdCDC 0.6e - CDC Call Management: - bmCapabilities 0x00 - bDataInterface 1 - CDC ACM: - bmCapabilities 0x00 - CDC Union: - bMasterInterface 0 - bSlaveInterface 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 10 CDC Data - bInterfaceSubClass 0 Unused - bInterfaceProtocol 0 - iInterface 5 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 255 -Device Status: 0x0006 - (Bus Powered) - Remote Wakeup Enabled - Test Mode diff --git a/src/dfu-util/device-logs/openpcd.lsusb b/src/dfu-util/device-logs/openpcd.lsusb deleted file mode 100644 index f6255a943..000000000 --- a/src/dfu-util/device-logs/openpcd.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 006 Device 016: ID 16c0:076b VOTI OpenPCD 13.56MHz RFID Reader -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 8 - idVendor 0x16c0 VOTI - idProduct 0x076b OpenPCD 13.56MHz RFID Reader - bcdDevice 0.00 - iManufacturer 1 - iProduct 2 OpenPCD RFID Simulator - DFU Mode - iSerial 0 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 200mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 0 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 0 - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 3 - Will Not Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 256 bytes - bcdDFUVersion 1.00 -Device Status: 0x0000 - (Bus Powered) diff --git a/src/dfu-util/device-logs/qi-hardware-atusb.lsusb b/src/dfu-util/device-logs/qi-hardware-atusb.lsusb deleted file mode 100644 index bfc1701e1..000000000 --- a/src/dfu-util/device-logs/qi-hardware-atusb.lsusb +++ /dev/null @@ -1,59 +0,0 @@ - -Bus 006 Device 013: ID 20b7:1540 Qi Hardware ben-wpan, AT86RF230-based -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 2.00 - bDeviceClass 255 Vendor Specific Class - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x20b7 Qi Hardware - idProduct 0x1540 ben-wpan, AT86RF230-based - bcdDevice 0.01 - iManufacturer 0 - iProduct 0 - iSerial 1 4630333438371508231a - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 34 - bNumInterfaces 2 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 40mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 1 - bInterfaceClass 255 Vendor Specific Class - bInterfaceSubClass 0 - bInterfaceProtocol 0 - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 0 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 1 - iInterface 0 -Device Status: 0x0000 - (Bus Powered) diff --git a/src/dfu-util/device-logs/simtrace.lsusb b/src/dfu-util/device-logs/simtrace.lsusb deleted file mode 100644 index 578ddf0e1..000000000 --- a/src/dfu-util/device-logs/simtrace.lsusb +++ /dev/null @@ -1,70 +0,0 @@ - -Bus 006 Device 017: ID 16c0:0762 VOTI -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 8 - idVendor 0x16c0 VOTI - idProduct 0x0762 - bcdDevice 0.00 - iManufacturer 1 sysmocom - systems for mobile communications GmbH - iProduct 2 SimTrace SIM Sniffer - DFU Mode - iSerial 0 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 45 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 3 SimTrace DFU Configuration - bmAttributes 0x80 - (Bus Powered) - MaxPower 200mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 SimTrace DFU Interface - Application Partition - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 SimTrace DFU Interface - Bootloader Partition - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 2 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 6 SimTrace DFU Interface - RAM - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 3 - Will Not Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 65280 milliseconds - wTransferSize 256 bytes - bcdDFUVersion 1.00 -Device Status: 0x0000 - (Bus Powered) diff --git a/src/dfu-util/device-logs/sparkcore.lsusb b/src/dfu-util/device-logs/sparkcore.lsusb deleted file mode 100644 index b6029ffa5..000000000 --- a/src/dfu-util/device-logs/sparkcore.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 001 Device 008: ID 1d50:607f OpenMoko, Inc. -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x1d50 OpenMoko, Inc. - idProduct 0x607f - bcdDevice 2.00 - iManufacturer 1 Spark Devices - iProduct 2 CORE DFU - iSerial 3 8D80527B5055 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0xc0 - Self Powered - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 @Internal Flash /0x08000000/20*001Ka,108*001Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 @SPI Flash : SST25x/0x00000000/512*04Kg - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 1024 bytes - bcdDFUVersion 1.1a -Device Status: 0x0001 - Self Powered diff --git a/src/dfu-util/device-logs/stm32f107.bin-download b/src/dfu-util/device-logs/stm32f107.bin-download deleted file mode 100644 index 45b714f83..000000000 --- a/src/dfu-util/device-logs/stm32f107.bin-download +++ /dev/null @@ -1,48 +0,0 @@ -> src/dfu-util --intf 0 --alt 0 -v -v -v -s 0x8000000 -D test3 -dfu-util 0.4 - -(C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc. -(C) 2010-2011 Tormod Volden (DfuSe support) -This program is Free Software and has ABSOLUTELY NO WARRANTY - -dfu-util does currently only support DFU version 1.0 - -Opening DFU USB device... ID 0483:df11 -Run-time device DFU version 011a -Found DFU: [0483:df11] devnum=0, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/128*002Kg" -Claiming USB DFU Interface... -Setting Alternate Setting #0 ... -Determining device status: state = dfuIDLE, status = 0 -dfuIDLE, continuing -DFU mode device DFU version 011a -Device returned transfer size 2048 -No valid DFU suffix signature -Warning: File has no DFU suffix -DfuSe interface name: "Internal Flash " -Memory segment at 0x08000000 128 x 2048 = 262144 (rew) -Uploading to address = 0x08000000, size = 16384 -Erasing page size 2048 at address 0x08000000, page starting at 0x08000000 - Download from image offset 00000000 to memory 08000000-080007ff, size 2048 - Setting address pointer to 0x08000000 -Erasing page size 2048 at address 0x08000800, page starting at 0x08000800 - Download from image offset 00000800 to memory 08000800-08000fff, size 2048 - Setting address pointer to 0x08000800 -Erasing page size 2048 at address 0x08001000, page starting at 0x08001000 - Download from image offset 00001000 to memory 08001000-080017ff, size 2048 - Setting address pointer to 0x08001000 -Erasing page size 2048 at address 0x08001800, page starting at 0x08001800 - Download from image offset 00001800 to memory 08001800-08001fff, size 2048 - Setting address pointer to 0x08001800 -Erasing page size 2048 at address 0x08002000, page starting at 0x08002000 - Download from image offset 00002000 to memory 08002000-080027ff, size 2048 - Setting address pointer to 0x08002000 -Erasing page size 2048 at address 0x08002800, page starting at 0x08002800 - Download from image offset 00002800 to memory 08002800-08002fff, size 2048 - Setting address pointer to 0x08002800 -Erasing page size 2048 at address 0x08003000, page starting at 0x08003000 - Download from image offset 00003000 to memory 08003000-080037ff, size 2048 - Setting address pointer to 0x08003000 -Erasing page size 2048 at address 0x08003800, page starting at 0x08003800 - Download from image offset 00003800 to memory 08003800-08003fff, size 2048 - Setting address pointer to 0x08003800 - diff --git a/src/dfu-util/device-logs/stm32f107.lsusb b/src/dfu-util/device-logs/stm32f107.lsusb deleted file mode 100644 index 14b45cda0..000000000 --- a/src/dfu-util/device-logs/stm32f107.lsusb +++ /dev/null @@ -1,60 +0,0 @@ - -Bus 001 Device 028: ID 0483:df11 SGS Thomson Microelectronics STM Device in DFU Mode -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0483 SGS Thomson Microelectronics - idProduct 0xdf11 STM Device in DFU Mode - bcdDevice 20.00 - iManufacturer 1 STMicroelectronics - iProduct 2 STM32 0x418 DFU Bootloader - iSerial 3 STM32 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 36 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0xc0 - Self Powered - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 @Internal Flash /0x08000000/128*002Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 @Option Bytes /0x1FFFF800/01*016 g - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 2048 bytes - bcdDFUVersion 1.1a -Device Status: 0x0000 - (Bus Powered) diff --git a/src/dfu-util/device-logs/stm32f4discovery.bin-download b/src/dfu-util/device-logs/stm32f4discovery.bin-download deleted file mode 100644 index 96e172216..000000000 --- a/src/dfu-util/device-logs/stm32f4discovery.bin-download +++ /dev/null @@ -1,36 +0,0 @@ -dfu-util --device 0483:df11 --alt 0 \ - --dfuse-address 0x08000000 \ - -v -v -v \ - --download arm/iotoggle.bin -No valid DFU suffix signature -Warning: File has no DFU suffix -dfu-util 0.5 - -(C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc. -(C) 2010-2011 Tormod Volden (DfuSe support) -This program is Free Software and has ABSOLUTELY NO WARRANTY - -dfu-util does currently only support DFU version 1.0 - -Filter on vendor = 0x0483 product = 0xdf11 -Opening DFU capable USB device... ID 0483:df11 -Run-time device DFU version 011a -Found DFU: [0483:df11] devnum=0, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/04*016Kg,01*064Kg,07*128Kg" -Claiming USB DFU Interface... -Setting Alternate Setting #0 ... -Determining device status: state = dfuERROR, status = 10 -dfuERROR, clearing status -Determining device status: state = dfuIDLE, status = 0 -dfuIDLE, continuing -DFU mode device DFU version 011a -Device returned transfer size 2048 -DfuSe interface name: "Internal Flash " -Memory segment at 0x08000000 4 x 16384 = 65536 (rew) -Memory segment at 0x08010000 1 x 65536 = 65536 (rew) -Memory segment at 0x08020000 7 x 131072 = 917504 (rew) -Uploading to address = 0x08000000, size = 2308 -Erasing page size 16384 at address 0x08000000, page starting at 0x08000000 - Download from image offset 00000000 to memory 08000000-080007ff, size 2048 - Setting address pointer to 0x08000000 - Download from image offset 00000800 to memory 08000800-08000903, size 260 - Setting address pointer to 0x08000800 diff --git a/src/dfu-util/device-logs/stm32f4discovery.lsusb b/src/dfu-util/device-logs/stm32f4discovery.lsusb deleted file mode 100644 index 0b870de91..000000000 --- a/src/dfu-util/device-logs/stm32f4discovery.lsusb +++ /dev/null @@ -1,80 +0,0 @@ - -Bus 001 Device 010: ID 0483:df11 SGS Thomson Microelectronics STM Device in DFU Mode -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 1.00 - bDeviceClass 0 (Defined at Interface level) - bDeviceSubClass 0 - bDeviceProtocol 0 - bMaxPacketSize0 64 - idVendor 0x0483 SGS Thomson Microelectronics - idProduct 0xdf11 STM Device in DFU Mode - bcdDevice 21.00 - iManufacturer 1 STMicroelectronics - iProduct 2 STM32 BOOTLOADER - iSerial 3 315A28A0B956 - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 54 - bNumInterfaces 1 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0xc0 - Self Powered - MaxPower 100mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 4 @Internal Flash /0x08000000/04*016Kg,01*064Kg,07*128Kg - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 1 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 5 @Option Bytes /0x1FFFC000/01*016 g - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 2 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 6 @OTP Memory /0x1FFF7800/01*512 g,01*016 g - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 3 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 2 - iInterface 7 @Device Feature/0xFFFF0000/01*004 g - Device Firmware Upgrade Interface Descriptor: - bLength 9 - bDescriptorType 33 - bmAttributes 11 - Will Detach - Manifestation Intolerant - Upload Supported - Download Supported - wDetachTimeout 255 milliseconds - wTransferSize 2048 bytes - bcdDFUVersion 1.1a -Device Status: 0x0001 - Self Powered diff --git a/src/dfu-util/device-logs/tdk-bluetooth.lsusb b/src/dfu-util/device-logs/tdk-bluetooth.lsusb deleted file mode 100644 index c0cfaceb6..000000000 --- a/src/dfu-util/device-logs/tdk-bluetooth.lsusb +++ /dev/null @@ -1,269 +0,0 @@ - -Bus 006 Device 014: ID 04bf:0320 TDK Corp. Bluetooth Adapter -Device Descriptor: - bLength 18 - bDescriptorType 1 - bcdUSB 2.00 - bDeviceClass 224 Wireless - bDeviceSubClass 1 Radio Frequency - bDeviceProtocol 1 Bluetooth - bMaxPacketSize0 64 - idVendor 0x04bf TDK Corp. - idProduct 0x0320 Bluetooth Adapter - bcdDevice 26.52 - iManufacturer 1 Ezurio - iProduct 2 Turbo Bluetooth Adapter - iSerial 3 008098D4FFBD - bNumConfigurations 1 - Configuration Descriptor: - bLength 9 - bDescriptorType 2 - wTotalLength 193 - bNumInterfaces 3 - bConfigurationValue 1 - iConfiguration 0 - bmAttributes 0x80 - (Bus Powered) - MaxPower 64mA - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 0 - bAlternateSetting 0 - bNumEndpoints 3 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x81 EP 1 IN - bmAttributes 3 - Transfer Type Interrupt - Synch Type None - Usage Type Data - wMaxPacketSize 0x0010 1x 16 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x02 EP 2 OUT - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x82 EP 2 IN - bmAttributes 2 - Transfer Type Bulk - Synch Type None - Usage Type Data - wMaxPacketSize 0x0040 1x 64 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 0 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0000 1x 0 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0000 1x 0 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 1 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0009 1x 9 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0009 1x 9 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 2 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0011 1x 17 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0011 1x 17 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 3 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0019 1x 25 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0019 1x 25 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 4 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0021 1x 33 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0021 1x 33 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 1 - bAlternateSetting 5 - bNumEndpoints 2 - bInterfaceClass 224 Wireless - bInterfaceSubClass 1 Radio Frequency - bInterfaceProtocol 1 Bluetooth - iInterface 0 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x03 EP 3 OUT - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0031 1x 49 bytes - bInterval 1 - Endpoint Descriptor: - bLength 7 - bDescriptorType 5 - bEndpointAddress 0x83 EP 3 IN - bmAttributes 1 - Transfer Type Isochronous - Synch Type None - Usage Type Data - wMaxPacketSize 0x0031 1x 49 bytes - bInterval 1 - Interface Descriptor: - bLength 9 - bDescriptorType 4 - bInterfaceNumber 2 - bAlternateSetting 0 - bNumEndpoints 0 - bInterfaceClass 254 Application Specific Interface - bInterfaceSubClass 1 Device Firmware Update - bInterfaceProtocol 0 - iInterface 0 - Device Firmware Upgrade Interface Descriptor: - bLength 7 - bDescriptorType 33 - bmAttributes 7 - Will Not Detach - Manifestation Tolerant - Upload Supported - Download Supported - wDetachTimeout 5000 milliseconds - wTransferSize 1023 bytes -Device Status: 0x0000 - (Bus Powered) diff --git a/src/dfu-util/dfuse-pack.py b/src/dfu-util/dfuse-pack.py deleted file mode 100644 index 875cc5c6e..000000000 --- a/src/dfu-util/dfuse-pack.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/python - -# Written by Antonio Galea - 2010/11/18 -# Distributed under Gnu LGPL 3.0 -# see http://www.gnu.org/licenses/lgpl-3.0.txt - -import sys,struct,zlib,os -from optparse import OptionParser - -DEFAULT_DEVICE="0x0483:0xdf11" - -def named(tuple,names): - return dict(zip(names.split(),tuple)) -def consume(fmt,data,names): - n = struct.calcsize(fmt) - return named(struct.unpack(fmt,data[:n]),names),data[n:] -def cstring(string): - return string.split('\0',1)[0] -def compute_crc(data): - return 0xFFFFFFFF & -zlib.crc32(data) -1 - -def parse(file,dump_images=False): - print 'File: "%s"' % file - data = open(file,'rb').read() - crc = compute_crc(data[:-4]) - prefix, data = consume('<5sBIB',data,'signature version size targets') - print '%(signature)s v%(version)d, image size: %(size)d, targets: %(targets)d' % prefix - for t in range(prefix['targets']): - tprefix, data = consume('<6sBI255s2I',data,'signature altsetting named name size elements') - tprefix['num'] = t - if tprefix['named']: - tprefix['name'] = cstring(tprefix['name']) - else: - tprefix['name'] = '' - print '%(signature)s %(num)d, alt setting: %(altsetting)s, name: "%(name)s", size: %(size)d, elements: %(elements)d' % tprefix - tsize = tprefix['size'] - target, data = data[:tsize], data[tsize:] - for e in range(tprefix['elements']): - eprefix, target = consume('<2I',target,'address size') - eprefix['num'] = e - print ' %(num)d, address: 0x%(address)08x, size: %(size)d' % eprefix - esize = eprefix['size'] - image, target = target[:esize], target[esize:] - if dump_images: - out = '%s.target%d.image%d.bin' % (file,t,e) - open(out,'wb').write(image) - print ' DUMPED IMAGE TO "%s"' % out - if len(target): - print "target %d: PARSE ERROR" % t - suffix = named(struct.unpack('<4H3sBI',data[:16]),'device product vendor dfu ufd len crc') - print 'usb: %(vendor)04x:%(product)04x, device: 0x%(device)04x, dfu: 0x%(dfu)04x, %(ufd)s, %(len)d, 0x%(crc)08x' % suffix - if crc != suffix['crc']: - print "CRC ERROR: computed crc32 is 0x%08x" % crc - data = data[16:] - if data: - print "PARSE ERROR" - -def build(file,targets,device=DEFAULT_DEVICE): - data = '' - for t,target in enumerate(targets): - tdata = '' - for image in target: - tdata += struct.pack('<2I',image['address'],len(image['data']))+image['data'] - tdata = struct.pack('<6sBI255s2I','Target',0,1,'ST...',len(tdata),len(target)) + tdata - data += tdata - data = struct.pack('<5sBIB','DfuSe',1,len(data)+11,len(targets)) + data - v,d=map(lambda x: int(x,0) & 0xFFFF, device.split(':',1)) - data += struct.pack('<4H3sB',0,d,v,0x011a,'UFD',16) - crc = compute_crc(data) - data += struct.pack(' and -Harald Welte . Over time, nearly complete -support of DFU 1.0, DFU 1.1 and DfuSe ("1.1a") has been added. -.SH LICENCE -.B dfu-util -is covered by the GNU General Public License (GPL), version 2 or later. -.SH COPYRIGHT -This manual page was originally written by Uwe Hermann , -and is now part of the dfu-util project. diff --git a/src/dfu-util/msvc/README_msvc.txt b/src/dfu-util/msvc/README_msvc.txt deleted file mode 100644 index 6e68ec6ff..000000000 --- a/src/dfu-util/msvc/README_msvc.txt +++ /dev/null @@ -1,10 +0,0 @@ -# (C) Roger Meier -# (C) Pascal Schweizer -# msvc folder is GPL-2.0+, LGPL-2.1+, BSD-3-Clause or MIT license(SPDX) - -Building dfu-util native on Windows with Visual Studio - -3rd party dependencies: -- libusbx ( git clone https://github.com/libusbx/libusbx.git ) - - getopt (part of libusbx: libusbx/examples/getopt) - diff --git a/src/dfu-util/msvc/dfu-suffix_2010.vcxproj b/src/dfu-util/msvc/dfu-suffix_2010.vcxproj deleted file mode 100644 index 0c316c2e5..000000000 --- a/src/dfu-util/msvc/dfu-suffix_2010.vcxproj +++ /dev/null @@ -1,100 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA} - dfusuffix - dfu-suffix - - - - Application - true - MultiByte - - - Application - false - true - MultiByte - - - - - - - - - - - - - $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\dll;$(LibraryPath) - $(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib - $(ExecutablePath) - - - $(ExecutablePath) - $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\dll;$(LibraryPath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - - - - Level3 - Disabled - HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - - - true - - - - - Level3 - MaxSpeed - true - true - HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - true - - - - - - - - - - - - - {a2169bc8-cf99-40bf-83f3-b0e38f7067bd} - - - {349ee8f9-7d25-4909-aaf5-ff3fade72187} - - - - - - \ No newline at end of file diff --git a/src/dfu-util/msvc/dfu-util_2010.sln b/src/dfu-util/msvc/dfu-util_2010.sln deleted file mode 100644 index ef797239b..000000000 --- a/src/dfu-util/msvc/dfu-util_2010.sln +++ /dev/null @@ -1,54 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dfu-util", "dfu-util_2010.vcxproj", "{0E071A60-7EF2-4427-BAA8-9143CACB5BCB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{C4F8746D-B27E-4806-95E5-2052174E923B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dfu-suffix", "dfu-suffix_2010.vcxproj", "{8F7600A2-3B37-4956-B39B-A1D43EF29EDA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "getopt_2010", "..\..\libusbx\msvc\getopt_2010.vcxproj", "{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (static)", "..\..\libusbx\msvc\libusb_static_2010.vcxproj", "{349EE8F9-7D25-4909-AAF5-FF3FADE72187}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Debug|Win32.ActiveCfg = Debug|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Debug|Win32.Build.0 = Debug|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Debug|x64.ActiveCfg = Debug|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Release|Win32.ActiveCfg = Release|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Release|Win32.Build.0 = Release|Win32 - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Release|x64.ActiveCfg = Release|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Debug|Win32.ActiveCfg = Debug|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Debug|Win32.Build.0 = Debug|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Debug|x64.ActiveCfg = Debug|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Release|Win32.ActiveCfg = Release|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Release|Win32.Build.0 = Release|Win32 - {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Release|x64.ActiveCfg = Release|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.ActiveCfg = Debug|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.Build.0 = Debug|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.ActiveCfg = Debug|x64 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.Build.0 = Debug|x64 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.ActiveCfg = Release|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.Build.0 = Release|Win32 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.ActiveCfg = Release|x64 - {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.Build.0 = Release|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.Build.0 = Debug|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.Build.0 = Debug|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.Build.0 = Release|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/src/dfu-util/msvc/dfu-util_2010.vcxproj b/src/dfu-util/msvc/dfu-util_2010.vcxproj deleted file mode 100644 index 17a8bee1b..000000000 --- a/src/dfu-util/msvc/dfu-util_2010.vcxproj +++ /dev/null @@ -1,120 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {0E071A60-7EF2-4427-BAA8-9143CACB5BCB} - dfuutil - dfu-util - - - - Application - true - MultiByte - - - Application - false - true - MultiByte - - - - - - - - - - - - - $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\getopt\$(Configuration);$(LibraryPath) - $(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib - $(ExecutablePath) - - - $(ExecutablePath) - $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) - $(SolutionDir)..\$(Platform)\getopt\$(Configuration);$(LibraryPath) - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - - - - Level3 - Disabled - HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - - - true - - - - - - - - - Level3 - MaxSpeed - true - true - HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - true - - - copy $(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0.dll $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ - - - - - - - - - - - - - - - - - - - - - - - - - - {a2169bc8-cf99-40bf-83f3-b0e38f7067bd} - - - {349ee8f9-7d25-4909-aaf5-ff3fade72187} - - - - - - \ No newline at end of file diff --git a/src/dfu-util/src/Makefile.am b/src/dfu-util/src/Makefile.am deleted file mode 100644 index 70179c411..000000000 --- a/src/dfu-util/src/Makefile.am +++ /dev/null @@ -1,28 +0,0 @@ -AM_CFLAGS = -Wall -Wextra - -bin_PROGRAMS = dfu-util dfu-suffix dfu-prefix -dfu_util_SOURCES = main.c \ - portable.h \ - dfu_load.c \ - dfu_load.h \ - dfu_util.c \ - dfu_util.h \ - dfuse.c \ - dfuse.h \ - dfuse_mem.c \ - dfuse_mem.h \ - dfu.c \ - dfu.h \ - usb_dfu.h \ - dfu_file.c \ - dfu_file.h \ - quirks.c \ - quirks.h - -dfu_suffix_SOURCES = suffix.c \ - dfu_file.h \ - dfu_file.c - -dfu_prefix_SOURCES = prefix.c \ - dfu_file.h \ - dfu_file.c diff --git a/src/dfu-util/src/dfu.c b/src/dfu-util/src/dfu.c deleted file mode 100644 index 14d7673d1..000000000 --- a/src/dfu-util/src/dfu.c +++ /dev/null @@ -1,357 +0,0 @@ -/* - * Low-level DFU communication routines, originally taken from - * $Id: dfu.c,v 1.3 2006/06/20 06:28:04 schmidtw Exp $ - * (part of dfu-programmer). - * - * Copyright 2005-2006 Weston Schmidt - * Copyright 2011-2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include - -#include - -#include "portable.h" -#include "dfu.h" -#include "quirks.h" - -static int dfu_timeout = 5000; /* 5 seconds - default */ - -/* - * DFU_DETACH Request (DFU Spec 1.0, Section 5.1) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * timeout - the timeout in ms the USB device should wait for a pending - * USB reset before giving up and terminating the operation - * - * returns 0 or < 0 on error - */ -int dfu_detach( libusb_device_handle *device, - const unsigned short interface, - const unsigned short timeout ) -{ - return libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_DETACH, - /* wValue */ timeout, - /* wIndex */ interface, - /* Data */ NULL, - /* wLength */ 0, - dfu_timeout ); -} - - -/* - * DFU_DNLOAD Request (DFU Spec 1.0, Section 6.1.1) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * length - the total number of bytes to transfer to the USB - * device - must be less than wTransferSize - * data - the data to transfer - * - * returns the number of bytes written or < 0 on error - */ -int dfu_download( libusb_device_handle *device, - const unsigned short interface, - const unsigned short length, - const unsigned short transaction, - unsigned char* data ) -{ - int status; - - status = libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_DNLOAD, - /* wValue */ transaction, - /* wIndex */ interface, - /* Data */ data, - /* wLength */ length, - dfu_timeout ); - return status; -} - - -/* - * DFU_UPLOAD Request (DFU Spec 1.0, Section 6.2) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * length - the maximum number of bytes to receive from the USB - * device - must be less than wTransferSize - * data - the buffer to put the received data in - * - * returns the number of bytes received or < 0 on error - */ -int dfu_upload( libusb_device_handle *device, - const unsigned short interface, - const unsigned short length, - const unsigned short transaction, - unsigned char* data ) -{ - int status; - - status = libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_UPLOAD, - /* wValue */ transaction, - /* wIndex */ interface, - /* Data */ data, - /* wLength */ length, - dfu_timeout ); - return status; -} - - -/* - * DFU_GETSTATUS Request (DFU Spec 1.0, Section 6.1.2) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * status - the data structure to be populated with the results - * - * return the number of bytes read in or < 0 on an error - */ -int dfu_get_status( struct dfu_if *dif, struct dfu_status *status ) -{ - unsigned char buffer[6]; - int result; - - /* Initialize the status data structure */ - status->bStatus = DFU_STATUS_ERROR_UNKNOWN; - status->bwPollTimeout = 0; - status->bState = STATE_DFU_ERROR; - status->iString = 0; - - result = libusb_control_transfer( dif->dev_handle, - /* bmRequestType */ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_GETSTATUS, - /* wValue */ 0, - /* wIndex */ dif->interface, - /* Data */ buffer, - /* wLength */ 6, - dfu_timeout ); - - if( 6 == result ) { - status->bStatus = buffer[0]; - if (dif->quirks & QUIRK_POLLTIMEOUT) - status->bwPollTimeout = DEFAULT_POLLTIMEOUT; - else - status->bwPollTimeout = ((0xff & buffer[3]) << 16) | - ((0xff & buffer[2]) << 8) | - (0xff & buffer[1]); - status->bState = buffer[4]; - status->iString = buffer[5]; - } - - return result; -} - - -/* - * DFU_CLRSTATUS Request (DFU Spec 1.0, Section 6.1.3) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * - * return 0 or < 0 on an error - */ -int dfu_clear_status( libusb_device_handle *device, - const unsigned short interface ) -{ - return libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT| LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_CLRSTATUS, - /* wValue */ 0, - /* wIndex */ interface, - /* Data */ NULL, - /* wLength */ 0, - dfu_timeout ); -} - - -/* - * DFU_GETSTATE Request (DFU Spec 1.0, Section 6.1.5) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * length - the maximum number of bytes to receive from the USB - * device - must be less than wTransferSize - * data - the buffer to put the received data in - * - * returns the state or < 0 on error - */ -int dfu_get_state( libusb_device_handle *device, - const unsigned short interface ) -{ - int result; - unsigned char buffer[1]; - - result = libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_GETSTATE, - /* wValue */ 0, - /* wIndex */ interface, - /* Data */ buffer, - /* wLength */ 1, - dfu_timeout ); - - /* Return the error if there is one. */ - if (result < 1) - return -1; - - /* Return the state. */ - return buffer[0]; -} - - -/* - * DFU_ABORT Request (DFU Spec 1.0, Section 6.1.4) - * - * device - the usb_dev_handle to communicate with - * interface - the interface to communicate with - * - * returns 0 or < 0 on an error - */ -int dfu_abort( libusb_device_handle *device, - const unsigned short interface ) -{ - return libusb_control_transfer( device, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_ABORT, - /* wValue */ 0, - /* wIndex */ interface, - /* Data */ NULL, - /* wLength */ 0, - dfu_timeout ); -} - - -const char* dfu_state_to_string( int state ) -{ - const char *message; - - switch (state) { - case STATE_APP_IDLE: - message = "appIDLE"; - break; - case STATE_APP_DETACH: - message = "appDETACH"; - break; - case STATE_DFU_IDLE: - message = "dfuIDLE"; - break; - case STATE_DFU_DOWNLOAD_SYNC: - message = "dfuDNLOAD-SYNC"; - break; - case STATE_DFU_DOWNLOAD_BUSY: - message = "dfuDNBUSY"; - break; - case STATE_DFU_DOWNLOAD_IDLE: - message = "dfuDNLOAD-IDLE"; - break; - case STATE_DFU_MANIFEST_SYNC: - message = "dfuMANIFEST-SYNC"; - break; - case STATE_DFU_MANIFEST: - message = "dfuMANIFEST"; - break; - case STATE_DFU_MANIFEST_WAIT_RESET: - message = "dfuMANIFEST-WAIT-RESET"; - break; - case STATE_DFU_UPLOAD_IDLE: - message = "dfuUPLOAD-IDLE"; - break; - case STATE_DFU_ERROR: - message = "dfuERROR"; - break; - default: - message = NULL; - break; - } - - return message; -} - -/* Chapter 6.1.2 */ -static const char *dfu_status_names[] = { - /* DFU_STATUS_OK */ - "No error condition is present", - /* DFU_STATUS_errTARGET */ - "File is not targeted for use by this device", - /* DFU_STATUS_errFILE */ - "File is for this device but fails some vendor-specific test", - /* DFU_STATUS_errWRITE */ - "Device is unable to write memory", - /* DFU_STATUS_errERASE */ - "Memory erase function failed", - /* DFU_STATUS_errCHECK_ERASED */ - "Memory erase check failed", - /* DFU_STATUS_errPROG */ - "Program memory function failed", - /* DFU_STATUS_errVERIFY */ - "Programmed memory failed verification", - /* DFU_STATUS_errADDRESS */ - "Cannot program memory due to received address that is out of range", - /* DFU_STATUS_errNOTDONE */ - "Received DFU_DNLOAD with wLength = 0, but device does not think that it has all data yet", - /* DFU_STATUS_errFIRMWARE */ - "Device's firmware is corrupt. It cannot return to run-time (non-DFU) operations", - /* DFU_STATUS_errVENDOR */ - "iString indicates a vendor specific error", - /* DFU_STATUS_errUSBR */ - "Device detected unexpected USB reset signalling", - /* DFU_STATUS_errPOR */ - "Device detected unexpected power on reset", - /* DFU_STATUS_errUNKNOWN */ - "Something went wrong, but the device does not know what it was", - /* DFU_STATUS_errSTALLEDPKT */ - "Device stalled an unexpected request" -}; - - -const char *dfu_status_to_string(int status) -{ - if (status > DFU_STATUS_errSTALLEDPKT) - return "INVALID"; - return dfu_status_names[status]; -} - -int dfu_abort_to_idle(struct dfu_if *dif) -{ - int ret; - struct dfu_status dst; - - ret = dfu_abort(dif->dev_handle, dif->interface); - if (ret < 0) { - errx(EX_IOERR, "Error sending dfu abort request"); - exit(1); - } - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - errx(EX_IOERR, "Error during abort get_status"); - exit(1); - } - if (dst.bState != DFU_STATE_dfuIDLE) { - errx(EX_IOERR, "Failed to enter idle state on abort"); - exit(1); - } - milli_sleep(dst.bwPollTimeout); - return ret; -} diff --git a/src/dfu-util/src/dfu.h b/src/dfu-util/src/dfu.h deleted file mode 100644 index 8e3caeb7b..000000000 --- a/src/dfu-util/src/dfu.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * dfu-programmer - * - * $Id: dfu.h,v 1.2 2005/09/25 01:27:42 schmidtw Exp $ - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef DFU_H -#define DFU_H - -#include -#include "usb_dfu.h" - -/* DFU states */ -#define STATE_APP_IDLE 0x00 -#define STATE_APP_DETACH 0x01 -#define STATE_DFU_IDLE 0x02 -#define STATE_DFU_DOWNLOAD_SYNC 0x03 -#define STATE_DFU_DOWNLOAD_BUSY 0x04 -#define STATE_DFU_DOWNLOAD_IDLE 0x05 -#define STATE_DFU_MANIFEST_SYNC 0x06 -#define STATE_DFU_MANIFEST 0x07 -#define STATE_DFU_MANIFEST_WAIT_RESET 0x08 -#define STATE_DFU_UPLOAD_IDLE 0x09 -#define STATE_DFU_ERROR 0x0a - - -/* DFU status */ -#define DFU_STATUS_OK 0x00 -#define DFU_STATUS_ERROR_TARGET 0x01 -#define DFU_STATUS_ERROR_FILE 0x02 -#define DFU_STATUS_ERROR_WRITE 0x03 -#define DFU_STATUS_ERROR_ERASE 0x04 -#define DFU_STATUS_ERROR_CHECK_ERASED 0x05 -#define DFU_STATUS_ERROR_PROG 0x06 -#define DFU_STATUS_ERROR_VERIFY 0x07 -#define DFU_STATUS_ERROR_ADDRESS 0x08 -#define DFU_STATUS_ERROR_NOTDONE 0x09 -#define DFU_STATUS_ERROR_FIRMWARE 0x0a -#define DFU_STATUS_ERROR_VENDOR 0x0b -#define DFU_STATUS_ERROR_USBR 0x0c -#define DFU_STATUS_ERROR_POR 0x0d -#define DFU_STATUS_ERROR_UNKNOWN 0x0e -#define DFU_STATUS_ERROR_STALLEDPKT 0x0f - -/* DFU commands */ -#define DFU_DETACH 0 -#define DFU_DNLOAD 1 -#define DFU_UPLOAD 2 -#define DFU_GETSTATUS 3 -#define DFU_CLRSTATUS 4 -#define DFU_GETSTATE 5 -#define DFU_ABORT 6 - -/* DFU interface */ -#define DFU_IFF_DFU 0x0001 /* DFU Mode, (not Runtime) */ - -/* This is based off of DFU_GETSTATUS - * - * 1 unsigned byte bStatus - * 3 unsigned byte bwPollTimeout - * 1 unsigned byte bState - * 1 unsigned byte iString -*/ - -struct dfu_status { - unsigned char bStatus; - unsigned int bwPollTimeout; - unsigned char bState; - unsigned char iString; -}; - -struct dfu_if { - struct usb_dfu_func_descriptor func_dfu; - uint16_t quirks; - uint16_t busnum; - uint16_t devnum; - uint16_t vendor; - uint16_t product; - uint16_t bcdDevice; - uint8_t configuration; - uint8_t interface; - uint8_t altsetting; - uint8_t flags; - uint8_t bMaxPacketSize0; - char *alt_name; - char *serial_name; - libusb_device *dev; - libusb_device_handle *dev_handle; - struct dfu_if *next; -}; - -int dfu_detach( libusb_device_handle *device, - const unsigned short interface, - const unsigned short timeout ); -int dfu_download( libusb_device_handle *device, - const unsigned short interface, - const unsigned short length, - const unsigned short transaction, - unsigned char* data ); -int dfu_upload( libusb_device_handle *device, - const unsigned short interface, - const unsigned short length, - const unsigned short transaction, - unsigned char* data ); -int dfu_get_status( struct dfu_if *dif, - struct dfu_status *status ); -int dfu_clear_status( libusb_device_handle *device, - const unsigned short interface ); -int dfu_get_state( libusb_device_handle *device, - const unsigned short interface ); -int dfu_abort( libusb_device_handle *device, - const unsigned short interface ); -int dfu_abort_to_idle( struct dfu_if *dif); - -const char *dfu_state_to_string( int state ); - -const char *dfu_status_to_string( int status ); - -#endif /* DFU_H */ diff --git a/src/dfu-util/src/dfu_file.c b/src/dfu-util/src/dfu_file.c deleted file mode 100644 index 7c897d4f6..000000000 --- a/src/dfu-util/src/dfu_file.c +++ /dev/null @@ -1,444 +0,0 @@ -/* - * Load or store DFU files including suffix and prefix - * - * Copyright 2014 Tormod Volden - * Copyright 2012 Stefan Schmidt - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu_file.h" - -#define DFU_SUFFIX_LENGTH 16 -#define LMDFU_PREFIX_LENGTH 8 -#define LPCDFU_PREFIX_LENGTH 16 -#define PROGRESS_BAR_WIDTH 25 -#define STDIN_CHUNK_SIZE 65536 - -static const unsigned long crc32_table[] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, - 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, - 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, - 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, - 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, - 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, - 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, - 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, - 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, - 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, - 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, - 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, - 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, - 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, - 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, - 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, - 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, - 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}; - -static uint32_t crc32_byte(uint32_t accum, uint8_t delta) -{ - return crc32_table[(accum ^ delta) & 0xff] ^ (accum >> 8); -} - -static int probe_prefix(struct dfu_file *file) -{ - uint8_t *prefix = file->firmware; - - if (file->size.total < LMDFU_PREFIX_LENGTH) - return 1; - if ((prefix[0] == 0x01) && (prefix[1] == 0x00)) { - file->prefix_type = LMDFU_PREFIX; - file->size.prefix = LMDFU_PREFIX_LENGTH; - file->lmdfu_address = 1024 * ((prefix[3] << 8) | prefix[2]); - } - else if (((prefix[0] & 0x3f) == 0x1a) && ((prefix[1] & 0x3f)== 0x3f)) { - file->prefix_type = LPCDFU_UNENCRYPTED_PREFIX; - file->size.prefix = LPCDFU_PREFIX_LENGTH; - } - - if (file->size.prefix + file->size.suffix > file->size.total) - return 1; - return 0; -} - -void dfu_progress_bar(const char *desc, unsigned long long curr, - unsigned long long max) -{ - static char buf[PROGRESS_BAR_WIDTH + 1]; - static unsigned long long last_progress = -1; - static time_t last_time; - time_t curr_time = time(NULL); - unsigned long long progress; - unsigned long long x; - - /* check for not known maximum */ - if (max < curr) - max = curr + 1; - /* make none out of none give zero */ - if (max == 0 && curr == 0) - max = 1; - - /* compute completion */ - progress = (PROGRESS_BAR_WIDTH * curr) / max; - if (progress > PROGRESS_BAR_WIDTH) - progress = PROGRESS_BAR_WIDTH; - if (progress == last_progress && - curr_time == last_time) - return; - last_progress = progress; - last_time = curr_time; - - for (x = 0; x != PROGRESS_BAR_WIDTH; x++) { - if (x < progress) - buf[x] = '='; - else - buf[x] = ' '; - } - buf[x] = 0; - - printf("\r%s\t[%s] %3lld%% %12lld bytes", desc, buf, - (100ULL * curr) / max, curr); - - if (progress == PROGRESS_BAR_WIDTH) - printf("\n%s done.\n", desc); -} - -void *dfu_malloc(size_t size) -{ - void *ptr = malloc(size); - if (ptr == NULL) - errx(EX_SOFTWARE, "Cannot allocate memory of size %d bytes", (int)size); - return (ptr); -} - -uint32_t dfu_file_write_crc(int f, uint32_t crc, const void *buf, int size) -{ - int x; - - /* compute CRC */ - for (x = 0; x != size; x++) - crc = crc32_byte(crc, ((uint8_t *)buf)[x]); - - /* write data */ - if (write(f, buf, size) != size) - err(EX_IOERR, "Could not write %d bytes to file %d", size, f); - - return (crc); -} - -void dfu_load_file(struct dfu_file *file, enum suffix_req check_suffix, enum prefix_req check_prefix) -{ - off_t offset; - int f; - int i; - int res; - - file->size.prefix = 0; - file->size.suffix = 0; - - /* default values, if no valid suffix is found */ - file->bcdDFU = 0; - file->idVendor = 0xffff; /* wildcard value */ - file->idProduct = 0xffff; /* wildcard value */ - file->bcdDevice = 0xffff; /* wildcard value */ - - /* default values, if no valid prefix is found */ - file->lmdfu_address = 0; - - free(file->firmware); - - if (!strcmp(file->name, "-")) { - int read_bytes; - -#ifdef WIN32 - _setmode( _fileno( stdin ), _O_BINARY ); -#endif - file->firmware = (uint8_t*) dfu_malloc(STDIN_CHUNK_SIZE); - read_bytes = fread(file->firmware, 1, STDIN_CHUNK_SIZE, stdin); - file->size.total = read_bytes; - while (read_bytes == STDIN_CHUNK_SIZE) { - file->firmware = (uint8_t*) realloc(file->firmware, file->size.total + STDIN_CHUNK_SIZE); - if (!file->firmware) - err(EX_IOERR, "Could not allocate firmware buffer"); - read_bytes = fread(file->firmware + file->size.total, 1, STDIN_CHUNK_SIZE, stdin); - file->size.total += read_bytes; - } - if (verbose) - printf("Read %i bytes from stdin\n", file->size.total); - /* Never require suffix when reading from stdin */ - check_suffix = MAYBE_SUFFIX; - } else { - f = open(file->name, O_RDONLY | O_BINARY); - if (f < 0) - err(EX_IOERR, "Could not open file %s for reading", file->name); - - offset = lseek(f, 0, SEEK_END); - - if ((int)offset < 0 || (int)offset != offset) - err(EX_IOERR, "File size is too big"); - - if (lseek(f, 0, SEEK_SET) != 0) - err(EX_IOERR, "Could not seek to beginning"); - - file->size.total = offset; - file->firmware = dfu_malloc(file->size.total); - - if (read(f, file->firmware, file->size.total) != file->size.total) { - err(EX_IOERR, "Could not read %d bytes from %s", - file->size.total, file->name); - } - close(f); - } - - /* Check for possible DFU file suffix by trying to parse one */ - { - uint32_t crc = 0xffffffff; - const uint8_t *dfusuffix; - int missing_suffix = 0; - const char *reason; - - if (file->size.total < DFU_SUFFIX_LENGTH) { - reason = "File too short for DFU suffix"; - missing_suffix = 1; - goto checked; - } - - dfusuffix = file->firmware + file->size.total - - DFU_SUFFIX_LENGTH; - - for (i = 0; i < file->size.total - 4; i++) - crc = crc32_byte(crc, file->firmware[i]); - - if (dfusuffix[10] != 'D' || - dfusuffix[9] != 'F' || - dfusuffix[8] != 'U') { - reason = "Invalid DFU suffix signature"; - missing_suffix = 1; - goto checked; - } - - file->dwCRC = (dfusuffix[15] << 24) + - (dfusuffix[14] << 16) + - (dfusuffix[13] << 8) + - dfusuffix[12]; - - if (file->dwCRC != crc) { - reason = "DFU suffix CRC does not match"; - missing_suffix = 1; - goto checked; - } - - /* At this point we believe we have a DFU suffix - so we require further checks to succeed */ - - file->bcdDFU = (dfusuffix[7] << 8) + dfusuffix[6]; - - if (verbose) - printf("DFU suffix version %x\n", file->bcdDFU); - - file->size.suffix = dfusuffix[11]; - - if (file->size.suffix < DFU_SUFFIX_LENGTH) { - errx(EX_IOERR, "Unsupported DFU suffix length %d", - file->size.suffix); - } - - if (file->size.suffix > file->size.total) { - errx(EX_IOERR, "Invalid DFU suffix length %d", - file->size.suffix); - } - - file->idVendor = (dfusuffix[5] << 8) + dfusuffix[4]; - file->idProduct = (dfusuffix[3] << 8) + dfusuffix[2]; - file->bcdDevice = (dfusuffix[1] << 8) + dfusuffix[0]; - -checked: - if (missing_suffix) { - if (check_suffix == NEEDS_SUFFIX) { - warnx("%s", reason); - errx(EX_IOERR, "Valid DFU suffix needed"); - } else if (check_suffix == MAYBE_SUFFIX) { - warnx("%s", reason); - warnx("A valid DFU suffix will be required in " - "a future dfu-util release!!!"); - } - } else { - if (check_suffix == NO_SUFFIX) { - errx(EX_SOFTWARE, "Please remove existing DFU suffix before adding a new one.\n"); - } - } - } - res = probe_prefix(file); - if ((res || file->size.prefix == 0) && check_prefix == NEEDS_PREFIX) - errx(EX_IOERR, "Valid DFU prefix needed"); - if (file->size.prefix && check_prefix == NO_PREFIX) - errx(EX_IOERR, "A prefix already exists, please delete it first"); - if (file->size.prefix && verbose) { - uint8_t *data = file->firmware; - if (file->prefix_type == LMDFU_PREFIX) - printf("Possible TI Stellaris DFU prefix with " - "the following properties\n" - "Address: 0x%08x\n" - "Payload length: %d\n", - file->lmdfu_address, - data[4] | (data[5] << 8) | - (data[6] << 16) | (data[7] << 14)); - else if (file->prefix_type == LPCDFU_UNENCRYPTED_PREFIX) - printf("Possible unencrypted NXP LPC DFU prefix with " - "the following properties\n" - "Payload length: %d kiByte\n", - data[2] >>1 | (data[3] << 7) ); - else - errx(EX_IOERR, "Unknown DFU prefix type"); - } -} - -void dfu_store_file(struct dfu_file *file, int write_suffix, int write_prefix) -{ - uint32_t crc = 0xffffffff; - int f; - - f = open(file->name, O_WRONLY | O_BINARY | O_TRUNC | O_CREAT, 0666); - if (f < 0) - err(EX_IOERR, "Could not open file %s for writing", file->name); - - /* write prefix, if any */ - if (write_prefix) { - if (file->prefix_type == LMDFU_PREFIX) { - uint8_t lmdfu_prefix[LMDFU_PREFIX_LENGTH]; - uint32_t addr = file->lmdfu_address / 1024; - - /* lmdfu_dfu_prefix payload length excludes prefix and suffix */ - uint32_t len = file->size.total - - file->size.prefix - file->size.suffix; - - lmdfu_prefix[0] = 0x01; /* STELLARIS_DFU_PROG */ - lmdfu_prefix[1] = 0x00; /* Reserved */ - lmdfu_prefix[2] = (uint8_t)(addr & 0xff); - lmdfu_prefix[3] = (uint8_t)(addr >> 8); - lmdfu_prefix[4] = (uint8_t)(len & 0xff); - lmdfu_prefix[5] = (uint8_t)(len >> 8) & 0xff; - lmdfu_prefix[6] = (uint8_t)(len >> 16) & 0xff; - lmdfu_prefix[7] = (uint8_t)(len >> 24); - - crc = dfu_file_write_crc(f, crc, lmdfu_prefix, LMDFU_PREFIX_LENGTH); - } - if (file->prefix_type == LPCDFU_UNENCRYPTED_PREFIX) { - uint8_t lpcdfu_prefix[LPCDFU_PREFIX_LENGTH] = {0}; - int i; - - /* Payload is firmware and prefix rounded to 512 bytes */ - uint32_t len = (file->size.total - file->size.suffix + 511) /512; - - lpcdfu_prefix[0] = 0x1a; /* Unencypted*/ - lpcdfu_prefix[1] = 0x3f; /* Reserved */ - lpcdfu_prefix[2] = (uint8_t)(len & 0xff); - lpcdfu_prefix[3] = (uint8_t)((len >> 8) & 0xff); - for (i = 12; i < LPCDFU_PREFIX_LENGTH; i++) - lpcdfu_prefix[i] = 0xff; - - crc = dfu_file_write_crc(f, crc, lpcdfu_prefix, LPCDFU_PREFIX_LENGTH); - } - } - /* write firmware binary */ - crc = dfu_file_write_crc(f, crc, file->firmware + file->size.prefix, - file->size.total - file->size.prefix - file->size.suffix); - - /* write suffix, if any */ - if (write_suffix) { - uint8_t dfusuffix[DFU_SUFFIX_LENGTH]; - - dfusuffix[0] = file->bcdDevice & 0xff; - dfusuffix[1] = file->bcdDevice >> 8; - dfusuffix[2] = file->idProduct & 0xff; - dfusuffix[3] = file->idProduct >> 8; - dfusuffix[4] = file->idVendor & 0xff; - dfusuffix[5] = file->idVendor >> 8; - dfusuffix[6] = file->bcdDFU & 0xff; - dfusuffix[7] = file->bcdDFU >> 8; - dfusuffix[8] = 'U'; - dfusuffix[9] = 'F'; - dfusuffix[10] = 'D'; - dfusuffix[11] = DFU_SUFFIX_LENGTH; - - crc = dfu_file_write_crc(f, crc, dfusuffix, - DFU_SUFFIX_LENGTH - 4); - - dfusuffix[12] = crc; - dfusuffix[13] = crc >> 8; - dfusuffix[14] = crc >> 16; - dfusuffix[15] = crc >> 24; - - crc = dfu_file_write_crc(f, crc, dfusuffix + 12, 4); - } - close(f); -} - -void show_suffix_and_prefix(struct dfu_file *file) -{ - if (file->size.prefix == LMDFU_PREFIX_LENGTH) { - printf("The file %s contains a TI Stellaris DFU prefix with the following properties:\n", file->name); - printf("Address:\t0x%08x\n", file->lmdfu_address); - } else if (file->size.prefix == LPCDFU_PREFIX_LENGTH) { - uint8_t * prefix = file->firmware; - printf("The file %s contains a NXP unencrypted LPC DFU prefix with the following properties:\n", file->name); - printf("Size:\t%5d kiB\n", prefix[2]>>1|prefix[3]<<7); - } else if (file->size.prefix != 0) { - printf("The file %s contains an unknown prefix\n", file->name); - } - if (file->size.suffix > 0) { - printf("The file %s contains a DFU suffix with the following properties:\n", file->name); - printf("BCD device:\t0x%04X\n", file->bcdDevice); - printf("Product ID:\t0x%04X\n",file->idProduct); - printf("Vendor ID:\t0x%04X\n", file->idVendor); - printf("BCD DFU:\t0x%04X\n", file->bcdDFU); - printf("Length:\t\t%i\n", file->size.suffix); - printf("CRC:\t\t0x%08X\n", file->dwCRC); - } -} diff --git a/src/dfu-util/src/dfu_file.h b/src/dfu-util/src/dfu_file.h deleted file mode 100644 index abebd44f4..000000000 --- a/src/dfu-util/src/dfu_file.h +++ /dev/null @@ -1,60 +0,0 @@ - -#ifndef DFU_FILE_H -#define DFU_FILE_H - -#include - -struct dfu_file { - /* File name */ - const char *name; - /* Pointer to file loaded into memory */ - uint8_t *firmware; - /* Different sizes */ - struct { - int total; - int prefix; - int suffix; - } size; - /* From prefix fields */ - uint32_t lmdfu_address; - /* From prefix fields */ - uint32_t prefix_type; - - /* From DFU suffix fields */ - uint32_t dwCRC; - uint16_t bcdDFU; - uint16_t idVendor; - uint16_t idProduct; - uint16_t bcdDevice; -}; - -enum suffix_req { - NO_SUFFIX, - NEEDS_SUFFIX, - MAYBE_SUFFIX -}; - -enum prefix_req { - NO_PREFIX, - NEEDS_PREFIX, - MAYBE_PREFIX -}; - -enum prefix_type { - ZERO_PREFIX, - LMDFU_PREFIX, - LPCDFU_UNENCRYPTED_PREFIX -}; - -extern int verbose; - -void dfu_load_file(struct dfu_file *file, enum suffix_req check_suffix, enum prefix_req check_prefix); -void dfu_store_file(struct dfu_file *file, int write_suffix, int write_prefix); - -void dfu_progress_bar(const char *desc, unsigned long long curr, - unsigned long long max); -void *dfu_malloc(size_t size); -uint32_t dfu_file_write_crc(int f, uint32_t crc, const void *buf, int size); -void show_suffix_and_prefix(struct dfu_file *file); - -#endif /* DFU_FILE_H */ diff --git a/src/dfu-util/src/dfu_load.c b/src/dfu-util/src/dfu_load.c deleted file mode 100644 index 64f7009df..000000000 --- a/src/dfu-util/src/dfu_load.c +++ /dev/null @@ -1,196 +0,0 @@ -/* - * DFU transfer routines - * - * This is supposed to be a general DFU implementation, as specified in the - * USB DFU 1.0 and 1.1 specification. - * - * The code was originally intended to interface with a USB device running the - * "sam7dfu" firmware (see http://www.openpcd.org/) on an AT91SAM7 processor. - * - * Copyright 2007-2008 Harald Welte - * Copyright 2013 Hans Petter Selasky - * Copyright 2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include - -#include - -#include "portable.h" -#include "dfu.h" -#include "usb_dfu.h" -#include "dfu_file.h" -#include "dfu_load.h" -#include "quirks.h" - -int dfuload_do_upload(struct dfu_if *dif, int xfer_size, - int expected_size, int fd) -{ - int total_bytes = 0; - unsigned short transaction = 0; - unsigned char *buf; - int ret; - - buf = dfu_malloc(xfer_size); - - printf("Copying data from DFU device to PC\n"); - dfu_progress_bar("Upload", 0, 1); - - while (1) { - int rc; - rc = dfu_upload(dif->dev_handle, dif->interface, - xfer_size, transaction++, buf); - if (rc < 0) { - warnx("Error during upload"); - ret = rc; - goto out_free; - } - - dfu_file_write_crc(fd, 0, buf, rc); - total_bytes += rc; - - if (total_bytes < 0) - errx(EX_SOFTWARE, "Received too many bytes (wraparound)"); - - if (rc < xfer_size) { - /* last block, return */ - ret = total_bytes; - break; - } - dfu_progress_bar("Upload", total_bytes, expected_size); - } - ret = 0; - -out_free: - dfu_progress_bar("Upload", total_bytes, total_bytes); - if (total_bytes == 0) - printf("\nFailed.\n"); - free(buf); - if (verbose) - printf("Received a total of %i bytes\n", total_bytes); - if (expected_size != 0 && total_bytes != expected_size) - errx(EX_SOFTWARE, "Unexpected number of bytes uploaded from device"); - return ret; -} - -int dfuload_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file) -{ - int bytes_sent; - int expected_size; - unsigned char *buf; - unsigned short transaction = 0; - struct dfu_status dst; - int ret; - - printf("Copying data from PC to DFU device\n"); - - buf = file->firmware; - expected_size = file->size.total - file->size.suffix; - bytes_sent = 0; - - dfu_progress_bar("Download", 0, 1); - while (bytes_sent < expected_size) { - int bytes_left; - int chunk_size; - - bytes_left = expected_size - bytes_sent; - if (bytes_left < xfer_size) - chunk_size = bytes_left; - else - chunk_size = xfer_size; - - ret = dfu_download(dif->dev_handle, dif->interface, - chunk_size, transaction++, chunk_size ? buf : NULL); - if (ret < 0) { - warnx("Error during download"); - goto out; - } - bytes_sent += chunk_size; - buf += chunk_size; - - do { - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - errx(EX_IOERR, "Error during download get_status"); - goto out; - } - - if (dst.bState == DFU_STATE_dfuDNLOAD_IDLE || - dst.bState == DFU_STATE_dfuERROR) - break; - - /* Wait while device executes flashing */ - milli_sleep(dst.bwPollTimeout); - - } while (1); - if (dst.bStatus != DFU_STATUS_OK) { - printf(" failed!\n"); - printf("state(%u) = %s, status(%u) = %s\n", dst.bState, - dfu_state_to_string(dst.bState), dst.bStatus, - dfu_status_to_string(dst.bStatus)); - ret = -1; - goto out; - } - dfu_progress_bar("Download", bytes_sent, bytes_sent + bytes_left); - } - - /* send one zero sized download request to signalize end */ - ret = dfu_download(dif->dev_handle, dif->interface, - 0, transaction, NULL); - if (ret < 0) { - errx(EX_IOERR, "Error sending completion packet"); - goto out; - } - - dfu_progress_bar("Download", bytes_sent, bytes_sent); - - if (verbose) - printf("Sent a total of %i bytes\n", bytes_sent); - -get_status: - /* Transition to MANIFEST_SYNC state */ - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - warnx("unable to read DFU status after completion"); - goto out; - } - printf("state(%u) = %s, status(%u) = %s\n", dst.bState, - dfu_state_to_string(dst.bState), dst.bStatus, - dfu_status_to_string(dst.bStatus)); - - milli_sleep(dst.bwPollTimeout); - - /* FIXME: deal correctly with ManifestationTolerant=0 / WillDetach bits */ - switch (dst.bState) { - case DFU_STATE_dfuMANIFEST_SYNC: - case DFU_STATE_dfuMANIFEST: - /* some devices (e.g. TAS1020b) need some time before we - * can obtain the status */ - milli_sleep(1000); - goto get_status; - break; - case DFU_STATE_dfuIDLE: - break; - } - printf("Done!\n"); - -out: - return bytes_sent; -} diff --git a/src/dfu-util/src/dfu_load.h b/src/dfu-util/src/dfu_load.h deleted file mode 100644 index be23e9b4f..000000000 --- a/src/dfu-util/src/dfu_load.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef DFU_LOAD_H -#define DFU_LOAD_H - -int dfuload_do_upload(struct dfu_if *dif, int xfer_size, int expected_size, int fd); -int dfuload_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file); - -#endif /* DFU_LOAD_H */ diff --git a/src/dfu-util/src/dfu_util.c b/src/dfu-util/src/dfu_util.c deleted file mode 100644 index b94c7ccd3..000000000 --- a/src/dfu-util/src/dfu_util.c +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Functions for detecting DFU USB entities - * - * Written by Harald Welte - * Copyright 2007-2008 by OpenMoko, Inc. - * Copyright 2013 Hans Petter Selasky - * - * Based on existing code of dfu-programmer-0.4 - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu.h" -#include "usb_dfu.h" -#include "dfu_file.h" -#include "dfu_load.h" -#include "dfu_util.h" -#include "dfuse.h" -#include "quirks.h" - -#ifdef HAVE_USBPATH_H -#include -#endif - -/* - * Look for a descriptor in a concatenated descriptor list. Will - * return upon the first match of the given descriptor type. Returns length of - * found descriptor, limited to res_size - */ -static int find_descriptor(const uint8_t *desc_list, int list_len, - uint8_t desc_type, void *res_buf, int res_size) -{ - int p = 0; - - if (list_len < 2) - return (-1); - - while (p + 1 < list_len) { - int desclen; - - desclen = (int) desc_list[p]; - if (desclen == 0) { - warnx("Invalid descriptor list"); - return -1; - } - if (desc_list[p + 1] == desc_type) { - if (desclen > res_size) - desclen = res_size; - if (p + desclen > list_len) - desclen = list_len - p; - memcpy(res_buf, &desc_list[p], desclen); - return desclen; - } - p += (int) desc_list[p]; - } - return -1; -} - -static void probe_configuration(libusb_device *dev, struct libusb_device_descriptor *desc) -{ - struct usb_dfu_func_descriptor func_dfu; - libusb_device_handle *devh; - struct dfu_if *pdfu; - struct libusb_config_descriptor *cfg; - const struct libusb_interface_descriptor *intf; - const struct libusb_interface *uif; - char alt_name[MAX_DESC_STR_LEN + 1]; - char serial_name[MAX_DESC_STR_LEN + 1]; - int cfg_idx; - int intf_idx; - int alt_idx; - int ret; - int has_dfu; - - for (cfg_idx = 0; cfg_idx != desc->bNumConfigurations; cfg_idx++) { - memset(&func_dfu, 0, sizeof(func_dfu)); - has_dfu = 0; - - ret = libusb_get_config_descriptor(dev, cfg_idx, &cfg); - if (ret != 0) - return; - if (match_config_index > -1 && match_config_index != cfg->bConfigurationValue) { - libusb_free_config_descriptor(cfg); - continue; - } - - /* - * In some cases, noticably FreeBSD if uid != 0, - * the configuration descriptors are empty - */ - if (!cfg) - return; - - ret = find_descriptor(cfg->extra, cfg->extra_length, - USB_DT_DFU, &func_dfu, sizeof(func_dfu)); - if (ret > -1) - goto found_dfu; - - for (intf_idx = 0; intf_idx < cfg->bNumInterfaces; - intf_idx++) { - uif = &cfg->interface[intf_idx]; - if (!uif) - break; - - for (alt_idx = 0; alt_idx < cfg->interface[intf_idx].num_altsetting; - alt_idx++) { - intf = &uif->altsetting[alt_idx]; - - ret = find_descriptor(intf->extra, intf->extra_length, USB_DT_DFU, - &func_dfu, sizeof(func_dfu)); - if (ret > -1) - goto found_dfu; - - if (intf->bInterfaceClass != 0xfe || - intf->bInterfaceSubClass != 1) - continue; - - has_dfu = 1; - } - } - if (has_dfu) { - /* - * Finally try to retrieve it requesting the - * device directly This is not supported on - * all devices for non-standard types - */ - if (libusb_open(dev, &devh) == 0) { - ret = libusb_get_descriptor(devh, USB_DT_DFU, 0, - (void *)&func_dfu, sizeof(func_dfu)); - libusb_close(devh); - if (ret > -1) - goto found_dfu; - } - warnx("Device has DFU interface, " - "but has no DFU functional descriptor"); - - /* fake version 1.0 */ - func_dfu.bLength = 7; - func_dfu.bcdDFUVersion = libusb_cpu_to_le16(0x0100); - goto found_dfu; - } - libusb_free_config_descriptor(cfg); - continue; - -found_dfu: - if (func_dfu.bLength == 7) { - printf("Deducing device DFU version from functional descriptor " - "length\n"); - func_dfu.bcdDFUVersion = libusb_cpu_to_le16(0x0100); - } else if (func_dfu.bLength < 9) { - printf("Error obtaining DFU functional descriptor\n"); - printf("Please report this as a bug!\n"); - printf("Warning: Assuming DFU version 1.0\n"); - func_dfu.bcdDFUVersion = libusb_cpu_to_le16(0x0100); - printf("Warning: Transfer size can not be detected\n"); - func_dfu.wTransferSize = 0; - } - - for (intf_idx = 0; intf_idx < cfg->bNumInterfaces; - intf_idx++) { - if (match_iface_index > -1 && match_iface_index != intf_idx) - continue; - - uif = &cfg->interface[intf_idx]; - if (!uif) - break; - - for (alt_idx = 0; - alt_idx < uif->num_altsetting; alt_idx++) { - int dfu_mode; - - intf = &uif->altsetting[alt_idx]; - - if (intf->bInterfaceClass != 0xfe || - intf->bInterfaceSubClass != 1) - continue; - - dfu_mode = (intf->bInterfaceProtocol == 2); - /* e.g. DSO Nano has bInterfaceProtocol 0 instead of 2 */ - if (func_dfu.bcdDFUVersion == 0x011a && intf->bInterfaceProtocol == 0) - dfu_mode = 1; - - if (dfu_mode && - match_iface_alt_index > -1 && match_iface_alt_index != alt_idx) - continue; - - if (dfu_mode) { - if ((match_vendor_dfu >= 0 && match_vendor_dfu != desc->idVendor) || - (match_product_dfu >= 0 && match_product_dfu != desc->idProduct)) { - continue; - } - } else { - if ((match_vendor >= 0 && match_vendor != desc->idVendor) || - (match_product >= 0 && match_product != desc->idProduct)) { - continue; - } - } - - if (libusb_open(dev, &devh)) { - warnx("Cannot open DFU device %04x:%04x", desc->idVendor, desc->idProduct); - break; - } - if (intf->iInterface != 0) - ret = libusb_get_string_descriptor_ascii(devh, - intf->iInterface, (void *)alt_name, MAX_DESC_STR_LEN); - else - ret = -1; - if (ret < 1) - strcpy(alt_name, "UNKNOWN"); - if (desc->iSerialNumber != 0) - ret = libusb_get_string_descriptor_ascii(devh, - desc->iSerialNumber, (void *)serial_name, MAX_DESC_STR_LEN); - else - ret = -1; - if (ret < 1) - strcpy(serial_name, "UNKNOWN"); - libusb_close(devh); - - if (dfu_mode && - match_iface_alt_name != NULL && strcmp(alt_name, match_iface_alt_name)) - continue; - - if (dfu_mode) { - if (match_serial_dfu != NULL && strcmp(match_serial_dfu, serial_name)) - continue; - } else { - if (match_serial != NULL && strcmp(match_serial, serial_name)) - continue; - } - - pdfu = dfu_malloc(sizeof(*pdfu)); - - memset(pdfu, 0, sizeof(*pdfu)); - - pdfu->func_dfu = func_dfu; - pdfu->dev = libusb_ref_device(dev); - pdfu->quirks = get_quirks(desc->idVendor, - desc->idProduct, desc->bcdDevice); - pdfu->vendor = desc->idVendor; - pdfu->product = desc->idProduct; - pdfu->bcdDevice = desc->bcdDevice; - pdfu->configuration = cfg->bConfigurationValue; - pdfu->interface = intf->bInterfaceNumber; - pdfu->altsetting = intf->bAlternateSetting; - pdfu->devnum = libusb_get_device_address(dev); - pdfu->busnum = libusb_get_bus_number(dev); - pdfu->alt_name = strdup(alt_name); - if (pdfu->alt_name == NULL) - errx(EX_SOFTWARE, "Out of memory"); - pdfu->serial_name = strdup(serial_name); - if (pdfu->serial_name == NULL) - errx(EX_SOFTWARE, "Out of memory"); - if (dfu_mode) - pdfu->flags |= DFU_IFF_DFU; - if (pdfu->quirks & QUIRK_FORCE_DFU11) { - pdfu->func_dfu.bcdDFUVersion = - libusb_cpu_to_le16(0x0110); - } - pdfu->bMaxPacketSize0 = desc->bMaxPacketSize0; - - /* queue into list */ - pdfu->next = dfu_root; - dfu_root = pdfu; - } - } - libusb_free_config_descriptor(cfg); - } -} - -void probe_devices(libusb_context *ctx) -{ - libusb_device **list; - ssize_t num_devs; - ssize_t i; - - num_devs = libusb_get_device_list(ctx, &list); - for (i = 0; i < num_devs; ++i) { - struct libusb_device_descriptor desc; - struct libusb_device *dev = list[i]; - - if (match_bus > -1 && match_bus != libusb_get_bus_number(dev)) - continue; - if (match_device > -1 && match_device != libusb_get_device_address(dev)) - continue; - if (libusb_get_device_descriptor(dev, &desc)) - continue; - probe_configuration(dev, &desc); - } - libusb_free_device_list(list, 0); -} - -void disconnect_devices(void) -{ - struct dfu_if *pdfu; - struct dfu_if *prev = NULL; - - for (pdfu = dfu_root; pdfu != NULL; pdfu = pdfu->next) { - free(prev); - libusb_unref_device(pdfu->dev); - free(pdfu->alt_name); - free(pdfu->serial_name); - prev = pdfu; - } - free(prev); - dfu_root = NULL; -} - -void print_dfu_if(struct dfu_if *dfu_if) -{ - printf("Found %s: [%04x:%04x] ver=%04x, devnum=%u, cfg=%u, intf=%u, " - "alt=%u, name=\"%s\", serial=\"%s\"\n", - dfu_if->flags & DFU_IFF_DFU ? "DFU" : "Runtime", - dfu_if->vendor, dfu_if->product, - dfu_if->bcdDevice, dfu_if->devnum, - dfu_if->configuration, dfu_if->interface, - dfu_if->altsetting, dfu_if->alt_name, - dfu_if->serial_name); -} - -/* Walk the device tree and print out DFU devices */ -void list_dfu_interfaces(void) -{ - struct dfu_if *pdfu; - - for (pdfu = dfu_root; pdfu != NULL; pdfu = pdfu->next) - print_dfu_if(pdfu); -} diff --git a/src/dfu-util/src/dfu_util.h b/src/dfu-util/src/dfu_util.h deleted file mode 100644 index fc0c19dca..000000000 --- a/src/dfu-util/src/dfu_util.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef DFU_UTIL_H -#define DFU_UTIL_H - -/* USB string descriptor should contain max 126 UTF-16 characters - * but 253 would even accomodate any UTF-8 encoding */ -#define MAX_DESC_STR_LEN 253 - -enum mode { - MODE_NONE, - MODE_VERSION, - MODE_LIST, - MODE_DETACH, - MODE_UPLOAD, - MODE_DOWNLOAD -}; - -extern struct dfu_if *dfu_root; -extern int match_bus; -extern int match_device; -extern int match_vendor; -extern int match_product; -extern int match_vendor_dfu; -extern int match_product_dfu; -extern int match_config_index; -extern int match_iface_index; -extern int match_iface_alt_index; -extern const char *match_iface_alt_name; -extern const char *match_serial; -extern const char *match_serial_dfu; - -void probe_devices(libusb_context *); -void disconnect_devices(void); -void print_dfu_if(struct dfu_if *); -void list_dfu_interfaces(void); - -#endif /* DFU_UTIL_H */ diff --git a/src/dfu-util/src/dfuse.c b/src/dfu-util/src/dfuse.c deleted file mode 100644 index fce29fed6..000000000 --- a/src/dfu-util/src/dfuse.c +++ /dev/null @@ -1,652 +0,0 @@ -/* - * DfuSe specific functions - * - * This implements the ST Microsystems DFU extensions (DfuSe) - * as per the DfuSe 1.1a specification (ST documents AN3156, AN2606) - * The DfuSe file format is described in ST document UM0391. - * - * Copyright 2010-2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include - -#include "portable.h" -#include "dfu.h" -#include "usb_dfu.h" -#include "dfu_file.h" -#include "dfuse.h" -#include "dfuse_mem.h" - -#define DFU_TIMEOUT 5000 - -extern int verbose; -static unsigned int last_erased_page = 1; /* non-aligned value, won't match */ -static struct memsegment *mem_layout; -static unsigned int dfuse_address = 0; -static unsigned int dfuse_length = 0; -static int dfuse_force = 0; -static int dfuse_leave = 0; -static int dfuse_unprotect = 0; -static int dfuse_mass_erase = 0; - -unsigned int quad2uint(unsigned char *p) -{ - return (*p + (*(p + 1) << 8) + (*(p + 2) << 16) + (*(p + 3) << 24)); -} - -void dfuse_parse_options(const char *options) -{ - char *end; - const char *endword; - unsigned int number; - - /* address, possibly empty, must be first */ - if (*options != ':') { - endword = strchr(options, ':'); - if (!endword) - endword = options + strlen(options); /* GNU strchrnul */ - - number = strtoul(options, &end, 0); - if (end == endword) { - dfuse_address = number; - } else { - errx(EX_IOERR, "Invalid dfuse address: %s", options); - } - options = endword; - } - - while (*options) { - if (*options == ':') { - options++; - continue; - } - endword = strchr(options, ':'); - if (!endword) - endword = options + strlen(options); - - if (!strncmp(options, "force", endword - options)) { - dfuse_force++; - options += 5; - continue; - } - if (!strncmp(options, "leave", endword - options)) { - dfuse_leave = 1; - options += 5; - continue; - } - if (!strncmp(options, "unprotect", endword - options)) { - dfuse_unprotect = 1; - options += 9; - continue; - } - if (!strncmp(options, "mass-erase", endword - options)) { - dfuse_mass_erase = 1; - options += 10; - continue; - } - - /* any valid number is interpreted as upload length */ - number = strtoul(options, &end, 0); - if (end == endword) { - dfuse_length = number; - } else { - errx(EX_IOERR, "Invalid dfuse modifier: %s", options); - } - options = endword; - } -} - -/* DFU_UPLOAD request for DfuSe 1.1a */ -int dfuse_upload(struct dfu_if *dif, const unsigned short length, - unsigned char *data, unsigned short transaction) -{ - int status; - - status = libusb_control_transfer(dif->dev_handle, - /* bmRequestType */ LIBUSB_ENDPOINT_IN | - LIBUSB_REQUEST_TYPE_CLASS | - LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_UPLOAD, - /* wValue */ transaction, - /* wIndex */ dif->interface, - /* Data */ data, - /* wLength */ length, - DFU_TIMEOUT); - if (status < 0) { - errx(EX_IOERR, "%s: libusb_control_msg returned %d", - __FUNCTION__, status); - } - return status; -} - -/* DFU_DNLOAD request for DfuSe 1.1a */ -int dfuse_download(struct dfu_if *dif, const unsigned short length, - unsigned char *data, unsigned short transaction) -{ - int status; - - status = libusb_control_transfer(dif->dev_handle, - /* bmRequestType */ LIBUSB_ENDPOINT_OUT | - LIBUSB_REQUEST_TYPE_CLASS | - LIBUSB_RECIPIENT_INTERFACE, - /* bRequest */ DFU_DNLOAD, - /* wValue */ transaction, - /* wIndex */ dif->interface, - /* Data */ data, - /* wLength */ length, - DFU_TIMEOUT); - if (status < 0) { - errx(EX_IOERR, "%s: libusb_control_transfer returned %d", - __FUNCTION__, status); - } - return status; -} - -/* DfuSe only commands */ -/* Leaves the device in dfuDNLOAD-IDLE state */ -int dfuse_special_command(struct dfu_if *dif, unsigned int address, - enum dfuse_command command) -{ - const char* dfuse_command_name[] = { "SET_ADDRESS" , "ERASE_PAGE", - "MASS_ERASE", "READ_UNPROTECT"}; - unsigned char buf[5]; - int length; - int ret; - struct dfu_status dst; - int firstpoll = 1; - - if (command == ERASE_PAGE) { - struct memsegment *segment; - int page_size; - - segment = find_segment(mem_layout, address); - if (!segment || !(segment->memtype & DFUSE_ERASABLE)) { - errx(EX_IOERR, "Page at 0x%08x can not be erased", - address); - } - page_size = segment->pagesize; - if (verbose > 1) - printf("Erasing page size %i at address 0x%08x, page " - "starting at 0x%08x\n", page_size, address, - address & ~(page_size - 1)); - buf[0] = 0x41; /* Erase command */ - length = 5; - last_erased_page = address & ~(page_size - 1); - } else if (command == SET_ADDRESS) { - if (verbose > 2) - printf(" Setting address pointer to 0x%08x\n", - address); - buf[0] = 0x21; /* Set Address Pointer command */ - length = 5; - } else if (command == MASS_ERASE) { - buf[0] = 0x41; /* Mass erase command when length = 1 */ - length = 1; - } else if (command == READ_UNPROTECT) { - buf[0] = 0x92; - length = 1; - } else { - errx(EX_IOERR, "Non-supported special command %d", command); - } - buf[1] = address & 0xff; - buf[2] = (address >> 8) & 0xff; - buf[3] = (address >> 16) & 0xff; - buf[4] = (address >> 24) & 0xff; - - ret = dfuse_download(dif, length, buf, 0); - if (ret < 0) { - errx(EX_IOERR, "Error during special command \"%s\" download", - dfuse_command_name[command]); - } - do { - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - errx(EX_IOERR, "Error during special command \"%s\" get_status", - dfuse_command_name[command]); - } - if (firstpoll) { - firstpoll = 0; - if (dst.bState != DFU_STATE_dfuDNBUSY) { - printf("state(%u) = %s, status(%u) = %s\n", dst.bState, - dfu_state_to_string(dst.bState), dst.bStatus, - dfu_status_to_string(dst.bStatus)); - errx(EX_IOERR, "Wrong state after command \"%s\" download", - dfuse_command_name[command]); - } - } - /* wait while command is executed */ - if (verbose) - printf(" Poll timeout %i ms\n", dst.bwPollTimeout); - milli_sleep(dst.bwPollTimeout); - if (command == READ_UNPROTECT) - return ret; - } while (dst.bState == DFU_STATE_dfuDNBUSY); - - if (dst.bStatus != DFU_STATUS_OK) { - errx(EX_IOERR, "%s not correctly executed", - dfuse_command_name[command]); - } - return ret; -} - -int dfuse_dnload_chunk(struct dfu_if *dif, unsigned char *data, int size, - int transaction) -{ - int bytes_sent; - struct dfu_status dst; - int ret; - - ret = dfuse_download(dif, size, size ? data : NULL, transaction); - if (ret < 0) { - errx(EX_IOERR, "Error during download"); - return ret; - } - bytes_sent = ret; - - do { - ret = dfu_get_status(dif, &dst); - if (ret < 0) { - errx(EX_IOERR, "Error during download get_status"); - return ret; - } - milli_sleep(dst.bwPollTimeout); - } while (dst.bState != DFU_STATE_dfuDNLOAD_IDLE && - dst.bState != DFU_STATE_dfuERROR && - dst.bState != DFU_STATE_dfuMANIFEST); - - if (dst.bState == DFU_STATE_dfuMANIFEST) - printf("Transitioning to dfuMANIFEST state\n"); - - if (dst.bStatus != DFU_STATUS_OK) { - printf(" failed!\n"); - printf("state(%u) = %s, status(%u) = %s\n", dst.bState, - dfu_state_to_string(dst.bState), dst.bStatus, - dfu_status_to_string(dst.bStatus)); - return -1; - } - return bytes_sent; -} - -int dfuse_do_upload(struct dfu_if *dif, int xfer_size, int fd, - const char *dfuse_options) -{ - int total_bytes = 0; - int upload_limit = 0; - unsigned char *buf; - int transaction; - int ret; - - buf = dfu_malloc(xfer_size); - - if (dfuse_options) - dfuse_parse_options(dfuse_options); - if (dfuse_length) - upload_limit = dfuse_length; - if (dfuse_address) { - struct memsegment *segment; - - mem_layout = parse_memory_layout((char *)dif->alt_name); - if (!mem_layout) - errx(EX_IOERR, "Failed to parse memory layout"); - - segment = find_segment(mem_layout, dfuse_address); - if (!dfuse_force && - (!segment || !(segment->memtype & DFUSE_READABLE))) - errx(EX_IOERR, "Page at 0x%08x is not readable", - dfuse_address); - - if (!upload_limit) { - upload_limit = segment->end - dfuse_address + 1; - printf("Limiting upload to end of memory segment, " - "%i bytes\n", upload_limit); - } - dfuse_special_command(dif, dfuse_address, SET_ADDRESS); - dfu_abort_to_idle(dif); - } else { - /* Boot loader decides the start address, unknown to us */ - /* Use a short length to lower risk of running out of bounds */ - if (!upload_limit) - upload_limit = 0x4000; - printf("Limiting default upload to %i bytes\n", upload_limit); - } - - dfu_progress_bar("Upload", 0, 1); - - transaction = 2; - while (1) { - int rc; - - /* last chunk can be smaller than original xfer_size */ - if (upload_limit - total_bytes < xfer_size) - xfer_size = upload_limit - total_bytes; - rc = dfuse_upload(dif, xfer_size, buf, transaction++); - if (rc < 0) { - ret = rc; - goto out_free; - } - - dfu_file_write_crc(fd, 0, buf, rc); - total_bytes += rc; - - if (total_bytes < 0) - errx(EX_SOFTWARE, "Received too many bytes"); - - if (rc < xfer_size || total_bytes >= upload_limit) { - /* last block, return successfully */ - ret = total_bytes; - break; - } - dfu_progress_bar("Upload", total_bytes, upload_limit); - } - - dfu_progress_bar("Upload", total_bytes, total_bytes); - - dfu_abort_to_idle(dif); - if (dfuse_leave) { - dfuse_special_command(dif, dfuse_address, SET_ADDRESS); - dfuse_dnload_chunk(dif, NULL, 0, 2); /* Zero-size */ - } - - out_free: - free(buf); - - return ret; -} - -/* Writes an element of any size to the device, taking care of page erases */ -/* returns 0 on success, otherwise -EINVAL */ -int dfuse_dnload_element(struct dfu_if *dif, unsigned int dwElementAddress, - unsigned int dwElementSize, unsigned char *data, - int xfer_size) -{ - int p; - int ret; - struct memsegment *segment; - - /* Check at least that we can write to the last address */ - segment = - find_segment(mem_layout, dwElementAddress + dwElementSize - 1); - if (!segment || !(segment->memtype & DFUSE_WRITEABLE)) { - errx(EX_IOERR, "Last page at 0x%08x is not writeable", - dwElementAddress + dwElementSize - 1); - } - - dfu_progress_bar("Download", 0, 1); - - for (p = 0; p < (int)dwElementSize; p += xfer_size) { - int page_size; - unsigned int erase_address; - unsigned int address = dwElementAddress + p; - int chunk_size = xfer_size; - - segment = find_segment(mem_layout, address); - if (!segment || !(segment->memtype & DFUSE_WRITEABLE)) { - errx(EX_IOERR, "Page at 0x%08x is not writeable", - address); - } - page_size = segment->pagesize; - - /* check if this is the last chunk */ - if (p + chunk_size > (int)dwElementSize) - chunk_size = dwElementSize - p; - - /* Erase only for flash memory downloads */ - if ((segment->memtype & DFUSE_ERASABLE) && !dfuse_mass_erase) { - /* erase all involved pages */ - for (erase_address = address; - erase_address < address + chunk_size; - erase_address += page_size) - if ((erase_address & ~(page_size - 1)) != - last_erased_page) - dfuse_special_command(dif, - erase_address, - ERASE_PAGE); - - if (((address + chunk_size - 1) & ~(page_size - 1)) != - last_erased_page) { - if (verbose > 2) - printf(" Chunk extends into next page," - " erase it as well\n"); - dfuse_special_command(dif, - address + chunk_size - 1, - ERASE_PAGE); - } - } - - if (verbose) { - printf(" Download from image offset " - "%08x to memory %08x-%08x, size %i\n", - p, address, address + chunk_size - 1, - chunk_size); - } else { - dfu_progress_bar("Download", p, dwElementSize); - } - - dfuse_special_command(dif, address, SET_ADDRESS); - - /* transaction = 2 for no address offset */ - ret = dfuse_dnload_chunk(dif, data + p, chunk_size, 2); - if (ret != chunk_size) { - errx(EX_IOERR, "Failed to write whole chunk: " - "%i of %i bytes", ret, chunk_size); - return -EINVAL; - } - } - if (!verbose) - dfu_progress_bar("Download", dwElementSize, dwElementSize); - return 0; -} - -static void -dfuse_memcpy(unsigned char *dst, unsigned char **src, int *rem, int size) -{ - if (size > *rem) { - errx(EX_IOERR, "Corrupt DfuSe file: " - "Cannot read %d bytes from %d bytes", size, *rem); - } - if (dst != NULL) - memcpy(dst, *src, size); - (*src) += size; - (*rem) -= size; -} - -/* Download raw binary file to DfuSe device */ -int dfuse_do_bin_dnload(struct dfu_if *dif, int xfer_size, - struct dfu_file *file, unsigned int start_address) -{ - unsigned int dwElementAddress; - unsigned int dwElementSize; - unsigned char *data; - int ret; - - dwElementAddress = start_address; - dwElementSize = file->size.total - - file->size.suffix - file->size.prefix; - - printf("Downloading to address = 0x%08x, size = %i\n", - dwElementAddress, dwElementSize); - - data = file->firmware + file->size.prefix; - - ret = dfuse_dnload_element(dif, dwElementAddress, dwElementSize, data, - xfer_size); - if (ret != 0) - goto out_free; - - printf("File downloaded successfully\n"); - ret = dwElementSize; - - out_free: - return ret; -} - -/* Parse a DfuSe file and download contents to device */ -int dfuse_do_dfuse_dnload(struct dfu_if *dif, int xfer_size, - struct dfu_file *file) -{ - uint8_t dfuprefix[11]; - uint8_t targetprefix[274]; - uint8_t elementheader[8]; - int image; - int element; - int bTargets; - int bAlternateSetting; - int dwNbElements; - unsigned int dwElementAddress; - unsigned int dwElementSize; - uint8_t *data; - int ret; - int rem; - int bFirstAddressSaved = 0; - - rem = file->size.total - file->size.prefix - file->size.suffix; - data = file->firmware + file->size.prefix; - - /* Must be larger than a minimal DfuSe header and suffix */ - if (rem < (int)(sizeof(dfuprefix) + - sizeof(targetprefix) + sizeof(elementheader))) { - errx(EX_SOFTWARE, "File too small for a DfuSe file"); - } - - dfuse_memcpy(dfuprefix, &data, &rem, sizeof(dfuprefix)); - - if (strncmp((char *)dfuprefix, "DfuSe", 5)) { - errx(EX_IOERR, "No valid DfuSe signature"); - return -EINVAL; - } - if (dfuprefix[5] != 0x01) { - errx(EX_IOERR, "DFU format revision %i not supported", - dfuprefix[5]); - return -EINVAL; - } - bTargets = dfuprefix[10]; - printf("file contains %i DFU images\n", bTargets); - - for (image = 1; image <= bTargets; image++) { - printf("parsing DFU image %i\n", image); - dfuse_memcpy(targetprefix, &data, &rem, sizeof(targetprefix)); - if (strncmp((char *)targetprefix, "Target", 6)) { - errx(EX_IOERR, "No valid target signature"); - return -EINVAL; - } - bAlternateSetting = targetprefix[6]; - dwNbElements = quad2uint((unsigned char *)targetprefix + 270); - printf("image for alternate setting %i, ", bAlternateSetting); - printf("(%i elements, ", dwNbElements); - printf("total size = %i)\n", - quad2uint((unsigned char *)targetprefix + 266)); - if (bAlternateSetting != dif->altsetting) - printf("Warning: Image does not match current alternate" - " setting.\n" - "Please rerun with the correct -a option setting" - " to download this image!\n"); - for (element = 1; element <= dwNbElements; element++) { - printf("parsing element %i, ", element); - dfuse_memcpy(elementheader, &data, &rem, sizeof(elementheader)); - dwElementAddress = - quad2uint((unsigned char *)elementheader); - dwElementSize = - quad2uint((unsigned char *)elementheader + 4); - printf("address = 0x%08x, ", dwElementAddress); - printf("size = %i\n", dwElementSize); - - if (!bFirstAddressSaved) { - bFirstAddressSaved = 1; - dfuse_address = dwElementAddress; - } - /* sanity check */ - if ((int)dwElementSize > rem) - errx(EX_SOFTWARE, "File too small for element size"); - - if (bAlternateSetting == dif->altsetting) { - ret = dfuse_dnload_element(dif, dwElementAddress, - dwElementSize, data, xfer_size); - } else { - ret = 0; - } - - /* advance read pointer */ - dfuse_memcpy(NULL, &data, &rem, dwElementSize); - - if (ret != 0) - return ret; - } - } - - if (rem != 0) - warnx("%d bytes leftover", rem); - - printf("done parsing DfuSe file\n"); - - return 0; -} - -int dfuse_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file, - const char *dfuse_options) -{ - int ret; - - if (dfuse_options) - dfuse_parse_options(dfuse_options); - mem_layout = parse_memory_layout((char *)dif->alt_name); - if (!mem_layout) { - errx(EX_IOERR, "Failed to parse memory layout"); - } - if (dfuse_unprotect) { - if (!dfuse_force) { - errx(EX_IOERR, "The read unprotect command " - "will erase the flash memory" - "and can only be used with force\n"); - } - dfuse_special_command(dif, 0, READ_UNPROTECT); - printf("Device disconnects, erases flash and resets now\n"); - exit(0); - } - if (dfuse_mass_erase) { - if (!dfuse_force) { - errx(EX_IOERR, "The mass erase command " - "can only be used with force"); - } - printf("Performing mass erase, this can take a moment\n"); - dfuse_special_command(dif, 0, MASS_ERASE); - } - if (dfuse_address) { - if (file->bcdDFU == 0x11a) { - errx(EX_IOERR, "This is a DfuSe file, not " - "meant for raw download"); - } - ret = dfuse_do_bin_dnload(dif, xfer_size, file, dfuse_address); - } else { - if (file->bcdDFU != 0x11a) { - warnx("Only DfuSe file version 1.1a is supported"); - errx(EX_IOERR, "(for raw binary download, use the " - "--dfuse-address option)"); - } - ret = dfuse_do_dfuse_dnload(dif, xfer_size, file); - } - free_segment_list(mem_layout); - - dfu_abort_to_idle(dif); - - if (dfuse_leave) { - dfuse_special_command(dif, dfuse_address, SET_ADDRESS); - dfuse_dnload_chunk(dif, NULL, 0, 2); /* Zero-size */ - } - return ret; -} diff --git a/src/dfu-util/src/dfuse.h b/src/dfu-util/src/dfuse.h deleted file mode 100644 index ed1108cfc..000000000 --- a/src/dfu-util/src/dfuse.h +++ /dev/null @@ -1,35 +0,0 @@ -/* This implements the ST Microsystems DFU extensions (DfuSe) - * as per the DfuSe 1.1a specification (Document UM0391) - * - * (C) 2010-2012 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef DFUSE_H -#define DFUSE_H - -#include "dfu.h" - -enum dfuse_command { SET_ADDRESS, ERASE_PAGE, MASS_ERASE, READ_UNPROTECT }; - -int dfuse_special_command(struct dfu_if *dif, unsigned int address, - enum dfuse_command command); -int dfuse_do_upload(struct dfu_if *dif, int xfer_size, int fd, - const char *dfuse_options); -int dfuse_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file, - const char *dfuse_options); - -#endif /* DFUSE_H */ diff --git a/src/dfu-util/src/dfuse_mem.c b/src/dfu-util/src/dfuse_mem.c deleted file mode 100644 index a91aacf5f..000000000 --- a/src/dfu-util/src/dfuse_mem.c +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Helper functions for reading the memory map of a device - * following the ST DfuSe 1.1a specification. - * - * Copyright 2011-2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include - -#include "portable.h" -#include "dfu_file.h" -#include "dfuse_mem.h" - -int add_segment(struct memsegment **segment_list, struct memsegment segment) -{ - struct memsegment *new_element; - - new_element = dfu_malloc(sizeof(struct memsegment)); - *new_element = segment; - new_element->next = NULL; - - if (*segment_list == NULL) - /* list can be empty on first call */ - *segment_list = new_element; - else { - struct memsegment *next_element; - - /* find last element in list */ - next_element = *segment_list; - while (next_element->next != NULL) - next_element = next_element->next; - next_element->next = new_element; - } - return 0; -} - -struct memsegment *find_segment(struct memsegment *segment_list, - unsigned int address) -{ - while (segment_list != NULL) { - if (segment_list->start <= address && - segment_list->end >= address) - return segment_list; - segment_list = segment_list->next; - } - return NULL; -} - -void free_segment_list(struct memsegment *segment_list) -{ - struct memsegment *next_element; - - while (segment_list->next != NULL) { - next_element = segment_list->next; - free(segment_list); - segment_list = next_element; - } - free(segment_list); -} - -/* Parse memory map from interface descriptor string - * encoded as per ST document UM0424 section 4.3.2. - */ -struct memsegment *parse_memory_layout(char *intf_desc) -{ - - char multiplier, memtype; - unsigned int address; - int sectors, size; - char *name, *typestring; - int ret; - int count = 0; - char separator; - int scanned; - struct memsegment *segment_list = NULL; - struct memsegment segment; - - name = dfu_malloc(strlen(intf_desc)); - - ret = sscanf(intf_desc, "@%[^/]%n", name, &scanned); - if (ret < 1) { - free(name); - warnx("Could not read name, sscanf returned %d", ret); - return NULL; - } - printf("DfuSe interface name: \"%s\"\n", name); - - intf_desc += scanned; - typestring = dfu_malloc(strlen(intf_desc)); - - while (ret = sscanf(intf_desc, "/0x%x/%n", &address, &scanned), - ret > 0) { - - intf_desc += scanned; - while (ret = sscanf(intf_desc, "%d*%d%c%[^,/]%n", - §ors, &size, &multiplier, typestring, - &scanned), ret > 2) { - intf_desc += scanned; - - count++; - memtype = 0; - if (ret == 4) { - if (strlen(typestring) == 1 - && typestring[0] != '/') - memtype = typestring[0]; - else { - warnx("Parsing type identifier '%s' " - "failed for segment %i", - typestring, count); - continue; - } - } - - /* Quirk for STM32F4 devices */ - if (strcmp(name, "Device Feature") == 0) - memtype = 'e'; - - switch (multiplier) { - case 'B': - break; - case 'K': - size *= 1024; - break; - case 'M': - size *= 1024 * 1024; - break; - case 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': - case 'g': - if (!memtype) { - warnx("Non-valid multiplier '%c', " - "interpreted as type " - "identifier instead", - multiplier); - memtype = multiplier; - break; - } - /* fallthrough if memtype was already set */ - default: - warnx("Non-valid multiplier '%c', " - "assuming bytes", multiplier); - } - - if (!memtype) { - warnx("No valid type for segment %d\n", count); - continue; - } - - segment.start = address; - segment.end = address + sectors * size - 1; - segment.pagesize = size; - segment.memtype = memtype & 7; - add_segment(&segment_list, segment); - - if (verbose) - printf("Memory segment at 0x%08x %3d x %4d = " - "%5d (%s%s%s)\n", - address, sectors, size, sectors * size, - memtype & DFUSE_READABLE ? "r" : "", - memtype & DFUSE_ERASABLE ? "e" : "", - memtype & DFUSE_WRITEABLE ? "w" : ""); - - address += sectors * size; - - separator = *intf_desc; - if (separator == ',') - intf_desc += 1; - else - break; - } /* while per segment */ - - } /* while per address */ - free(name); - free(typestring); - - return segment_list; -} diff --git a/src/dfu-util/src/dfuse_mem.h b/src/dfu-util/src/dfuse_mem.h deleted file mode 100644 index 0181f0c16..000000000 --- a/src/dfu-util/src/dfuse_mem.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Helper functions for reading the memory map in a device - * following the ST DfuSe 1.1a specification. - * - * (C) 2011 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef DFUSE_MEM_H -#define DFUSE_MEM_H - -#define DFUSE_READABLE 1 -#define DFUSE_ERASABLE 2 -#define DFUSE_WRITEABLE 4 - -struct memsegment { - unsigned int start; - unsigned int end; - int pagesize; - int memtype; - struct memsegment *next; -}; - -int add_segment(struct memsegment **list, struct memsegment new_element); - -struct memsegment *find_segment(struct memsegment *list, unsigned int address); - -void free_segment_list(struct memsegment *list); - -struct memsegment *parse_memory_layout(char *intf_desc_str); - -#endif /* DFUSE_MEM_H */ diff --git a/src/dfu-util/src/main.c b/src/dfu-util/src/main.c deleted file mode 100644 index acaed2f08..000000000 --- a/src/dfu-util/src/main.c +++ /dev/null @@ -1,699 +0,0 @@ -/* - * dfu-util - * - * Copyright 2007-2008 by OpenMoko, Inc. - * Copyright 2013-2014 Hans Petter Selasky - * - * Written by Harald Welte - * - * Based on existing code of dfu-programmer-0.4 - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu.h" -#include "usb_dfu.h" -#include "dfu_file.h" -#include "dfu_load.h" -#include "dfu_util.h" -#include "dfuse.h" -#include "quirks.h" - -#ifdef HAVE_USBPATH_H -#include -#endif - -int verbose = 0; - -struct dfu_if *dfu_root = NULL; - -int match_bus = -1; -int match_device = -1; -int match_vendor = -1; -int match_product = -1; -int match_vendor_dfu = -1; -int match_product_dfu = -1; -int match_config_index = -1; -int match_iface_index = -1; -int match_iface_alt_index = -1; -const char *match_iface_alt_name = NULL; -const char *match_serial = NULL; -const char *match_serial_dfu = NULL; - -static int parse_match_value(const char *str, int default_value) -{ - char *remainder; - int value; - - if (str == NULL) { - value = default_value; - } else if (*str == '*') { - value = -1; /* Match anything */ - } else if (*str == '-') { - value = 0x10000; /* Impossible vendor/product ID */ - } else { - value = strtoul(str, &remainder, 16); - if (remainder == str) { - value = default_value; - } - } - return value; -} - -static void parse_vendprod(const char *str) -{ - const char *comma; - const char *colon; - - /* Default to match any DFU device in runtime or DFU mode */ - match_vendor = -1; - match_product = -1; - match_vendor_dfu = -1; - match_product_dfu = -1; - - comma = strchr(str, ','); - if (comma == str) { - /* DFU mode vendor/product being specified without any runtime - * vendor/product specification, so don't match any runtime device */ - match_vendor = match_product = 0x10000; - } else { - colon = strchr(str, ':'); - if (colon != NULL) { - ++colon; - if ((comma != NULL) && (colon > comma)) { - colon = NULL; - } - } - match_vendor = parse_match_value(str, match_vendor); - match_product = parse_match_value(colon, match_product); - if (comma != NULL) { - /* Both runtime and DFU mode vendor/product specifications are - * available, so default DFU mode match components to the given - * runtime match components */ - match_vendor_dfu = match_vendor; - match_product_dfu = match_product; - } - } - if (comma != NULL) { - ++comma; - colon = strchr(comma, ':'); - if (colon != NULL) { - ++colon; - } - match_vendor_dfu = parse_match_value(comma, match_vendor_dfu); - match_product_dfu = parse_match_value(colon, match_product_dfu); - } -} - -static void parse_serial(char *str) -{ - char *comma; - - match_serial = str; - comma = strchr(str, ','); - if (comma == NULL) { - match_serial_dfu = match_serial; - } else { - *comma++ = 0; - match_serial_dfu = comma; - } - if (*match_serial == 0) match_serial = NULL; - if (*match_serial_dfu == 0) match_serial_dfu = NULL; -} - -#ifdef HAVE_USBPATH_H - -static int resolve_device_path(char *path) -{ - int res; - - res = usb_path2devnum(path); - if (res < 0) - return -EINVAL; - if (!res) - return 0; - - match_bus = atoi(path); - match_device = res; - - return 0; -} - -#else /* HAVE_USBPATH_H */ - -static int resolve_device_path(char *path) -{ - (void)path; /* Eliminate unused variable warning */ - errx(EX_SOFTWARE, "USB device paths are not supported by this dfu-util.\n"); -} - -#endif /* !HAVE_USBPATH_H */ - -static void help(void) -{ - fprintf(stderr, "Usage: dfu-util [options] ...\n" - " -h --help\t\t\tPrint this help message\n" - " -V --version\t\t\tPrint the version number\n" - " -v --verbose\t\t\tPrint verbose debug statements\n" - " -l --list\t\t\tList currently attached DFU capable devices\n"); - fprintf(stderr, " -e --detach\t\t\tDetach currently attached DFU capable devices\n" - " -E --detach-delay seconds\tTime to wait before reopening a device after detach\n" - " -d --device :[,:]\n" - "\t\t\t\tSpecify Vendor/Product ID(s) of DFU device\n" - " -p --path \tSpecify path to DFU device\n" - " -c --cfg \t\tSpecify the Configuration of DFU device\n" - " -i --intf \t\tSpecify the DFU Interface number\n" - " -S --serial [,]\n" - "\t\t\t\tSpecify Serial String of DFU device\n" - " -a --alt \t\tSpecify the Altsetting of the DFU Interface\n" - "\t\t\t\tby name or by number\n"); - fprintf(stderr, " -t --transfer-size \tSpecify the number of bytes per USB Transfer\n" - " -U --upload \t\tRead firmware from device into \n" - " -Z --upload-size \tSpecify the expected upload size in bytes\n" - " -D --download \t\tWrite firmware from into device\n" - " -R --reset\t\t\tIssue USB Reset signalling once we're finished\n" - " -s --dfuse-address

\tST DfuSe mode, specify target address for\n" - "\t\t\t\traw file download or upload. Not applicable for\n" - "\t\t\t\tDfuSe file (.dfu) downloads\n" - ); - exit(EX_USAGE); -} - -static void print_version(void) -{ - printf(PACKAGE_STRING "\n\n"); - printf("Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.\n" - "Copyright 2010-2014 Tormod Volden and Stefan Schmidt\n" - "This program is Free Software and has ABSOLUTELY NO WARRANTY\n" - "Please report bugs to " PACKAGE_BUGREPORT "\n\n"); -} - -static struct option opts[] = { - { "help", 0, 0, 'h' }, - { "version", 0, 0, 'V' }, - { "verbose", 0, 0, 'v' }, - { "list", 0, 0, 'l' }, - { "detach", 0, 0, 'e' }, - { "detach-delay", 1, 0, 'E' }, - { "device", 1, 0, 'd' }, - { "path", 1, 0, 'p' }, - { "configuration", 1, 0, 'c' }, - { "cfg", 1, 0, 'c' }, - { "interface", 1, 0, 'i' }, - { "intf", 1, 0, 'i' }, - { "altsetting", 1, 0, 'a' }, - { "alt", 1, 0, 'a' }, - { "serial", 1, 0, 'S' }, - { "transfer-size", 1, 0, 't' }, - { "upload", 1, 0, 'U' }, - { "upload-size", 1, 0, 'Z' }, - { "download", 1, 0, 'D' }, - { "reset", 0, 0, 'R' }, - { "dfuse-address", 1, 0, 's' }, - { 0, 0, 0, 0 } -}; - -int main(int argc, char **argv) -{ - int expected_size = 0; - unsigned int transfer_size = 0; - enum mode mode = MODE_NONE; - struct dfu_status status; - libusb_context *ctx; - struct dfu_file file; - char *end; - int final_reset = 0; - int ret; - int dfuse_device = 0; - int fd; - const char *dfuse_options = NULL; - int detach_delay = 5; - uint16_t runtime_vendor; - uint16_t runtime_product; - - memset(&file, 0, sizeof(file)); - - /* make sure all prints are flushed */ - setvbuf(stdout, NULL, _IONBF, 0); - - while (1) { - int c, option_index = 0; - c = getopt_long(argc, argv, "hVvleE:d:p:c:i:a:S:t:U:D:Rs:Z:", opts, - &option_index); - if (c == -1) - break; - - switch (c) { - case 'h': - help(); - break; - case 'V': - mode = MODE_VERSION; - break; - case 'v': - verbose++; - break; - case 'l': - mode = MODE_LIST; - break; - case 'e': - mode = MODE_DETACH; - match_iface_alt_index = 0; - match_iface_index = 0; - break; - case 'E': - detach_delay = atoi(optarg); - break; - case 'd': - parse_vendprod(optarg); - break; - case 'p': - /* Parse device path */ - ret = resolve_device_path(optarg); - if (ret < 0) - errx(EX_SOFTWARE, "Unable to parse '%s'", optarg); - if (!ret) - errx(EX_SOFTWARE, "Cannot find '%s'", optarg); - break; - case 'c': - /* Configuration */ - match_config_index = atoi(optarg); - break; - case 'i': - /* Interface */ - match_iface_index = atoi(optarg); - break; - case 'a': - /* Interface Alternate Setting */ - match_iface_alt_index = strtoul(optarg, &end, 0); - if (*end) { - match_iface_alt_name = optarg; - match_iface_alt_index = -1; - } - break; - case 'S': - parse_serial(optarg); - break; - case 't': - transfer_size = atoi(optarg); - break; - case 'U': - mode = MODE_UPLOAD; - file.name = optarg; - break; - case 'Z': - expected_size = atoi(optarg); - break; - case 'D': - mode = MODE_DOWNLOAD; - file.name = optarg; - break; - case 'R': - final_reset = 1; - break; - case 's': - dfuse_options = optarg; - break; - default: - help(); - break; - } - } - - print_version(); - if (mode == MODE_VERSION) { - exit(0); - } - - if (mode == MODE_NONE) { - fprintf(stderr, "You need to specify one of -D or -U\n"); - help(); - } - - if (match_config_index == 0) { - /* Handle "-c 0" (unconfigured device) as don't care */ - match_config_index = -1; - } - - if (mode == MODE_DOWNLOAD) { - dfu_load_file(&file, MAYBE_SUFFIX, MAYBE_PREFIX); - /* If the user didn't specify product and/or vendor IDs to match, - * use any IDs from the file suffix for device matching */ - if (match_vendor < 0 && file.idVendor != 0xffff) { - match_vendor = file.idVendor; - printf("Match vendor ID from file: %04x\n", match_vendor); - } - if (match_product < 0 && file.idProduct != 0xffff) { - match_product = file.idProduct; - printf("Match product ID from file: %04x\n", match_product); - } - } - - ret = libusb_init(&ctx); - if (ret) - errx(EX_IOERR, "unable to initialize libusb: %i", ret); - - if (verbose > 2) { - libusb_set_debug(ctx, 255); - } - - probe_devices(ctx); - - if (mode == MODE_LIST) { - list_dfu_interfaces(); - exit(0); - } - - if (dfu_root == NULL) { - errx(EX_IOERR, "No DFU capable USB device available"); - } else if (dfu_root->next != NULL) { - /* We cannot safely support more than one DFU capable device - * with same vendor/product ID, since during DFU we need to do - * a USB bus reset, after which the target device will get a - * new address */ - errx(EX_IOERR, "More than one DFU capable USB device found! " - "Try `--list' and specify the serial number " - "or disconnect all but one device\n"); - } - - /* We have exactly one device. Its libusb_device is now in dfu_root->dev */ - - printf("Opening DFU capable USB device...\n"); - ret = libusb_open(dfu_root->dev, &dfu_root->dev_handle); - if (ret || !dfu_root->dev_handle) - errx(EX_IOERR, "Cannot open device"); - - printf("ID %04x:%04x\n", dfu_root->vendor, dfu_root->product); - - printf("Run-time device DFU version %04x\n", - libusb_le16_to_cpu(dfu_root->func_dfu.bcdDFUVersion)); - - /* Transition from run-Time mode to DFU mode */ - if (!(dfu_root->flags & DFU_IFF_DFU)) { - int err; - /* In the 'first round' during runtime mode, there can only be one - * DFU Interface descriptor according to the DFU Spec. */ - - /* FIXME: check if the selected device really has only one */ - - runtime_vendor = dfu_root->vendor; - runtime_product = dfu_root->product; - - printf("Claiming USB DFU Runtime Interface...\n"); - if (libusb_claim_interface(dfu_root->dev_handle, dfu_root->interface) < 0) { - errx(EX_IOERR, "Cannot claim interface %d", - dfu_root->interface); - } - - if (libusb_set_interface_alt_setting(dfu_root->dev_handle, dfu_root->interface, 0) < 0) { - errx(EX_IOERR, "Cannot set alt interface zero"); - } - - printf("Determining device status: "); - - err = dfu_get_status(dfu_root, &status); - if (err == LIBUSB_ERROR_PIPE) { - printf("Device does not implement get_status, assuming appIDLE\n"); - status.bStatus = DFU_STATUS_OK; - status.bwPollTimeout = 0; - status.bState = DFU_STATE_appIDLE; - status.iString = 0; - } else if (err < 0) { - errx(EX_IOERR, "error get_status"); - } else { - printf("state = %s, status = %d\n", - dfu_state_to_string(status.bState), status.bStatus); - } - milli_sleep(status.bwPollTimeout); - - switch (status.bState) { - case DFU_STATE_appIDLE: - case DFU_STATE_appDETACH: - printf("Device really in Runtime Mode, send DFU " - "detach request...\n"); - if (dfu_detach(dfu_root->dev_handle, - dfu_root->interface, 1000) < 0) { - warnx("error detaching"); - } - if (dfu_root->func_dfu.bmAttributes & USB_DFU_WILL_DETACH) { - printf("Device will detach and reattach...\n"); - } else { - printf("Resetting USB...\n"); - ret = libusb_reset_device(dfu_root->dev_handle); - if (ret < 0 && ret != LIBUSB_ERROR_NOT_FOUND) - errx(EX_IOERR, "error resetting " - "after detach"); - } - break; - case DFU_STATE_dfuERROR: - printf("dfuERROR, clearing status\n"); - if (dfu_clear_status(dfu_root->dev_handle, - dfu_root->interface) < 0) { - errx(EX_IOERR, "error clear_status"); - } - /* fall through */ - default: - warnx("WARNING: Runtime device already in DFU state ?!?"); - libusb_release_interface(dfu_root->dev_handle, - dfu_root->interface); - goto dfustate; - } - libusb_release_interface(dfu_root->dev_handle, - dfu_root->interface); - libusb_close(dfu_root->dev_handle); - dfu_root->dev_handle = NULL; - - if (mode == MODE_DETACH) { - libusb_exit(ctx); - exit(0); - } - - /* keeping handles open might prevent re-enumeration */ - disconnect_devices(); - - milli_sleep(detach_delay * 1000); - - /* Change match vendor and product to impossible values to force - * only DFU mode matches in the following probe */ - match_vendor = match_product = 0x10000; - - probe_devices(ctx); - - if (dfu_root == NULL) { - errx(EX_IOERR, "Lost device after RESET?"); - } else if (dfu_root->next != NULL) { - errx(EX_IOERR, "More than one DFU capable USB device found! " - "Try `--list' and specify the serial number " - "or disconnect all but one device"); - } - - /* Check for DFU mode device */ - if (!(dfu_root->flags | DFU_IFF_DFU)) - errx(EX_SOFTWARE, "Device is not in DFU mode"); - - printf("Opening DFU USB Device...\n"); - ret = libusb_open(dfu_root->dev, &dfu_root->dev_handle); - if (ret || !dfu_root->dev_handle) { - errx(EX_IOERR, "Cannot open device"); - } - } else { - /* we're already in DFU mode, so we can skip the detach/reset - * procedure */ - /* If a match vendor/product was specified, use that as the runtime - * vendor/product, otherwise use the DFU mode vendor/product */ - runtime_vendor = match_vendor < 0 ? dfu_root->vendor : match_vendor; - runtime_product = match_product < 0 ? dfu_root->product : match_product; - } - -dfustate: -#if 0 - printf("Setting Configuration %u...\n", dfu_root->configuration); - if (libusb_set_configuration(dfu_root->dev_handle, dfu_root->configuration) < 0) { - errx(EX_IOERR, "Cannot set configuration"); - } -#endif - printf("Claiming USB DFU Interface...\n"); - if (libusb_claim_interface(dfu_root->dev_handle, dfu_root->interface) < 0) { - errx(EX_IOERR, "Cannot claim interface"); - } - - printf("Setting Alternate Setting #%d ...\n", dfu_root->altsetting); - if (libusb_set_interface_alt_setting(dfu_root->dev_handle, dfu_root->interface, dfu_root->altsetting) < 0) { - errx(EX_IOERR, "Cannot set alternate interface"); - } - -status_again: - printf("Determining device status: "); - if (dfu_get_status(dfu_root, &status ) < 0) { - errx(EX_IOERR, "error get_status"); - } - printf("state = %s, status = %d\n", - dfu_state_to_string(status.bState), status.bStatus); - - milli_sleep(status.bwPollTimeout); - - switch (status.bState) { - case DFU_STATE_appIDLE: - case DFU_STATE_appDETACH: - errx(EX_IOERR, "Device still in Runtime Mode!"); - break; - case DFU_STATE_dfuERROR: - printf("dfuERROR, clearing status\n"); - if (dfu_clear_status(dfu_root->dev_handle, dfu_root->interface) < 0) { - errx(EX_IOERR, "error clear_status"); - } - goto status_again; - break; - case DFU_STATE_dfuDNLOAD_IDLE: - case DFU_STATE_dfuUPLOAD_IDLE: - printf("aborting previous incomplete transfer\n"); - if (dfu_abort(dfu_root->dev_handle, dfu_root->interface) < 0) { - errx(EX_IOERR, "can't send DFU_ABORT"); - } - goto status_again; - break; - case DFU_STATE_dfuIDLE: - printf("dfuIDLE, continuing\n"); - break; - default: - break; - } - - if (DFU_STATUS_OK != status.bStatus ) { - printf("WARNING: DFU Status: '%s'\n", - dfu_status_to_string(status.bStatus)); - /* Clear our status & try again. */ - if (dfu_clear_status(dfu_root->dev_handle, dfu_root->interface) < 0) - errx(EX_IOERR, "USB communication error"); - if (dfu_get_status(dfu_root, &status) < 0) - errx(EX_IOERR, "USB communication error"); - if (DFU_STATUS_OK != status.bStatus) - errx(EX_SOFTWARE, "Status is not OK: %d", status.bStatus); - - milli_sleep(status.bwPollTimeout); - } - - printf("DFU mode device DFU version %04x\n", - libusb_le16_to_cpu(dfu_root->func_dfu.bcdDFUVersion)); - - if (dfu_root->func_dfu.bcdDFUVersion == libusb_cpu_to_le16(0x11a)) - dfuse_device = 1; - - /* If not overridden by the user */ - if (!transfer_size) { - transfer_size = libusb_le16_to_cpu( - dfu_root->func_dfu.wTransferSize); - if (transfer_size) { - printf("Device returned transfer size %i\n", - transfer_size); - } else { - errx(EX_IOERR, "Transfer size must be specified"); - } - } - -#ifdef HAVE_GETPAGESIZE -/* autotools lie when cross-compiling for Windows using mingw32/64 */ -#ifndef __MINGW32__ - /* limitation of Linux usbdevio */ - if ((int)transfer_size > getpagesize()) { - transfer_size = getpagesize(); - printf("Limited transfer size to %i\n", transfer_size); - } -#endif /* __MINGW32__ */ -#endif /* HAVE_GETPAGESIZE */ - - if (transfer_size < dfu_root->bMaxPacketSize0) { - transfer_size = dfu_root->bMaxPacketSize0; - printf("Adjusted transfer size to %i\n", transfer_size); - } - - switch (mode) { - case MODE_UPLOAD: - /* open for "exclusive" writing */ - fd = open(file.name, O_WRONLY | O_BINARY | O_CREAT | O_EXCL | O_TRUNC, 0666); - if (fd < 0) - err(EX_IOERR, "Cannot open file %s for writing", file.name); - - if (dfuse_device || dfuse_options) { - if (dfuse_do_upload(dfu_root, transfer_size, fd, - dfuse_options) < 0) - exit(1); - } else { - if (dfuload_do_upload(dfu_root, transfer_size, - expected_size, fd) < 0) { - exit(1); - } - } - close(fd); - break; - - case MODE_DOWNLOAD: - if (((file.idVendor != 0xffff && file.idVendor != runtime_vendor) || - (file.idProduct != 0xffff && file.idProduct != runtime_product)) && - ((file.idVendor != 0xffff && file.idVendor != dfu_root->vendor) || - (file.idProduct != 0xffff && file.idProduct != dfu_root->product))) { - errx(EX_IOERR, "Error: File ID %04x:%04x does " - "not match device (%04x:%04x or %04x:%04x)", - file.idVendor, file.idProduct, - runtime_vendor, runtime_product, - dfu_root->vendor, dfu_root->product); - } - if (dfuse_device || dfuse_options || file.bcdDFU == 0x11a) { - if (dfuse_do_dnload(dfu_root, transfer_size, &file, - dfuse_options) < 0) - exit(1); - } else { - if (dfuload_do_dnload(dfu_root, transfer_size, &file) < 0) - exit(1); - } - break; - case MODE_DETACH: - if (dfu_detach(dfu_root->dev_handle, dfu_root->interface, 1000) < 0) { - warnx("can't detach"); - } - break; - default: - errx(EX_IOERR, "Unsupported mode: %u", mode); - break; - } - - if (final_reset) { - if (dfu_detach(dfu_root->dev_handle, dfu_root->interface, 1000) < 0) { - /* Even if detach failed, just carry on to leave the - device in a known state */ - warnx("can't detach"); - } - printf("Resetting USB to switch back to runtime mode\n"); - ret = libusb_reset_device(dfu_root->dev_handle); - if (ret < 0 && ret != LIBUSB_ERROR_NOT_FOUND) { - errx(EX_IOERR, "error resetting after download"); - } - } - - libusb_close(dfu_root->dev_handle); - dfu_root->dev_handle = NULL; - libusb_exit(ctx); - - return (0); -} diff --git a/src/dfu-util/src/portable.h b/src/dfu-util/src/portable.h deleted file mode 100644 index cf8d5df38..000000000 --- a/src/dfu-util/src/portable.h +++ /dev/null @@ -1,72 +0,0 @@ - -#ifndef PORTABLE_H -#define PORTABLE_H - -#ifdef HAVE_CONFIG_H -# include "config.h" -#else -# define PACKAGE "dfu-util" -# define PACKAGE_VERSION "0.8-msvc" -# define PACKAGE_STRING "dfu-util 0.8-msvc" -# define PACKAGE_BUGREPORT "dfu-util@lists.gnumonks.org" -#endif /* HAVE_CONFIG_H */ - -#ifdef HAVE_FTRUNCATE -# include -#else -# include -#endif /* HAVE_FTRUNCATE */ - -#ifdef HAVE_NANOSLEEP -# include -# define milli_sleep(msec) do {\ - if (msec) {\ - struct timespec nanosleepDelay = { (msec) / 1000, ((msec) % 1000) * 1000000 };\ - nanosleep(&nanosleepDelay, NULL);\ - } } while (0) -#elif defined HAVE_WINDOWS_H -# define milli_sleep(msec) do {\ - if (msec) {\ - Sleep(msec);\ - } } while (0) -#else -# error "Can't get no sleep! Please report" -#endif /* HAVE_NANOSLEEP */ - -#ifdef HAVE_ERR -# include -#else -# include -# include -# define warnx(...) do {\ - fprintf(stderr, __VA_ARGS__);\ - fprintf(stderr, "\n"); } while (0) -# define errx(eval, ...) do {\ - warnx(__VA_ARGS__);\ - exit(eval); } while (0) -# define warn(...) do {\ - fprintf(stderr, "%s: ", strerror(errno));\ - warnx(__VA_ARGS__); } while (0) -# define err(eval, ...) do {\ - warn(__VA_ARGS__);\ - exit(eval); } while (0) -#endif /* HAVE_ERR */ - -#ifdef HAVE_SYSEXITS_H -# include -#else -# define EX_OK 0 /* successful termination */ -# define EX_USAGE 64 /* command line usage error */ -# define EX_SOFTWARE 70 /* internal software error */ -# define EX_IOERR 74 /* input/output error */ -#endif /* HAVE_SYSEXITS_H */ - -#ifndef O_BINARY -# define O_BINARY 0 -#endif - -#ifndef off_t -# define off_t long int -#endif - -#endif /* PORTABLE_H */ diff --git a/src/dfu-util/src/prefix.c b/src/dfu-util/src/prefix.c deleted file mode 100644 index be8e3faf3..000000000 --- a/src/dfu-util/src/prefix.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * dfu-prefix - * - * Copyright 2011-2012 Stefan Schmidt - * Copyright 2013 Hans Petter Selasky - * Copyright 2014 Uwe Bonnes - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu_file.h" - -enum mode { - MODE_NONE, - MODE_ADD, - MODE_DEL, - MODE_CHECK -}; - -int verbose; - -static void help(void) -{ - fprintf(stderr, "Usage: dfu-prefix [options] ...\n" - " -h --help\t\t\tPrint this help message\n" - " -V --version\t\t\tPrint the version number\n" - " -c --check \t\tCheck DFU prefix of \n" - " -D --delete \t\tDelete DFU prefix from \n" - " -a --add \t\tAdd DFU prefix to \n" - "In combination with -a:\n" - ); - fprintf(stderr, " -s --stellaris-address
Add TI Stellaris address prefix to \n" - "In combination with -D or -c:\n" - " -T --stellaris\t\tAct on TI Stellaris address prefix of \n" - "In combination with -a or -D or -c:\n" - " -L --lpc-prefix\t\tUse NXP LPC DFU prefix format\n" - ); - exit(EX_USAGE); -} - -static void print_version(void) -{ - printf("dfu-prefix (%s) %s\n\n", PACKAGE, PACKAGE_VERSION); - printf("Copyright 2011-2012 Stefan Schmidt, 2014 Uwe Bonnes\n" - "This program is Free Software and has ABSOLUTELY NO WARRANTY\n" - "Please report bugs to %s\n\n", PACKAGE_BUGREPORT); - -} - -static struct option opts[] = { - { "help", 0, 0, 'h' }, - { "version", 0, 0, 'V' }, - { "check", 1, 0, 'c' }, - { "add", 1, 0, 'a' }, - { "delete", 1, 0, 'D' }, - { "stellaris-address", 1, 0, 's' }, - { "stellaris", 0, 0, 'T' }, - { "LPC", 0, 0, 'L' }, -}; -int main(int argc, char **argv) -{ - struct dfu_file file; - enum mode mode = MODE_NONE; - enum prefix_type type = ZERO_PREFIX; - uint32_t lmdfu_flash_address = 0; - char *end; - - /* make sure all prints are flushed */ - setvbuf(stdout, NULL, _IONBF, 0); - - print_version(); - - memset(&file, 0, sizeof(file)); - - while (1) { - int c, option_index = 0; - c = getopt_long(argc, argv, "hVc:a:D:p:v:d:s:TL", opts, - &option_index); - if (c == -1) - break; - - switch (c) { - case 'h': - help(); - break; - case 'V': - exit(0); - break; - case 'D': - file.name = optarg; - mode = MODE_DEL; - break; - case 'c': - file.name = optarg; - mode = MODE_CHECK; - break; - case 'a': - file.name = optarg; - mode = MODE_ADD; - break; - case 's': - lmdfu_flash_address = strtoul(optarg, &end, 0); - if (*end) { - errx(EX_IOERR, "Invalid lmdfu " - "address: %s", optarg); - } - /* fall-through */ - case 'T': - type = LMDFU_PREFIX; - break; - case 'L': - type = LPCDFU_UNENCRYPTED_PREFIX; - break; - default: - help(); - break; - } - } - - if (!file.name) { - fprintf(stderr, "You need to specify a filename\n"); - help(); - } - - switch(mode) { - case MODE_ADD: - if (type == ZERO_PREFIX) - errx(EX_IOERR, "Prefix type must be specified"); - dfu_load_file(&file, MAYBE_SUFFIX, NO_PREFIX); - file.lmdfu_address = lmdfu_flash_address; - file.prefix_type = type; - printf("Adding prefix to file\n"); - dfu_store_file(&file, file.size.suffix != 0, 1); - break; - - case MODE_CHECK: - dfu_load_file(&file, MAYBE_SUFFIX, MAYBE_PREFIX); - show_suffix_and_prefix(&file); - if (type > ZERO_PREFIX && file.prefix_type != type) - errx(EX_IOERR, "No prefix of requested type"); - break; - - case MODE_DEL: - dfu_load_file(&file, MAYBE_SUFFIX, NEEDS_PREFIX); - if (type > ZERO_PREFIX && file.prefix_type != type) - errx(EX_IOERR, "No prefix of requested type"); - printf("Removing prefix from file\n"); - /* if there was a suffix, rewrite it */ - dfu_store_file(&file, file.size.suffix != 0, 0); - break; - - default: - help(); - break; - } - return (0); -} diff --git a/src/dfu-util/src/quirks.c b/src/dfu-util/src/quirks.c deleted file mode 100644 index de394a615..000000000 --- a/src/dfu-util/src/quirks.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Simple quirk system for dfu-util - * - * Copyright 2010-2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include "quirks.h" - -uint16_t get_quirks(uint16_t vendor, uint16_t product, uint16_t bcdDevice) -{ - uint16_t quirks = 0; - - /* Device returns bogus bwPollTimeout values */ - if ((vendor == VENDOR_OPENMOKO || vendor == VENDOR_FIC) && - product >= PRODUCT_FREERUNNER_FIRST && - product <= PRODUCT_FREERUNNER_LAST) - quirks |= QUIRK_POLLTIMEOUT; - - if (vendor == VENDOR_VOTI && - product == PRODUCT_OPENPCD) - quirks |= QUIRK_POLLTIMEOUT; - - /* Reports wrong DFU version in DFU descriptor */ - if (vendor == VENDOR_LEAFLABS && - product == PRODUCT_MAPLE3 && - bcdDevice == 0x0200) - quirks |= QUIRK_FORCE_DFU11; - - /* old devices(bcdDevice == 0) return bogus bwPollTimeout values */ - if (vendor == VENDOR_SIEMENS && - (product == PRODUCT_PXM40 || product == PRODUCT_PXM50) && - bcdDevice == 0) - quirks |= QUIRK_POLLTIMEOUT; - - /* M-Audio Transit returns bogus bwPollTimeout values */ - if (vendor == VENDOR_MIDIMAN && - product == PRODUCT_TRANSIT) - quirks |= QUIRK_POLLTIMEOUT; - - return (quirks); -} diff --git a/src/dfu-util/src/quirks.h b/src/dfu-util/src/quirks.h deleted file mode 100644 index 0e4b3ec58..000000000 --- a/src/dfu-util/src/quirks.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef DFU_QUIRKS_H -#define DFU_QUIRKS_H - -#define VENDOR_OPENMOKO 0x1d50 /* Openmoko Freerunner / GTA02 */ -#define VENDOR_FIC 0x1457 /* Openmoko Freerunner / GTA02 */ -#define VENDOR_VOTI 0x16c0 /* OpenPCD Reader */ -#define VENDOR_LEAFLABS 0x1eaf /* Maple */ -#define VENDOR_SIEMENS 0x0908 /* Siemens AG */ -#define VENDOR_MIDIMAN 0x0763 /* Midiman */ - -#define PRODUCT_FREERUNNER_FIRST 0x5117 -#define PRODUCT_FREERUNNER_LAST 0x5126 -#define PRODUCT_OPENPCD 0x076b -#define PRODUCT_MAPLE3 0x0003 /* rev 3 and 5 */ -#define PRODUCT_PXM40 0x02c4 /* Siemens AG, PXM 40 */ -#define PRODUCT_PXM50 0x02c5 /* Siemens AG, PXM 50 */ -#define PRODUCT_TRANSIT 0x2806 /* M-Audio Transit (Midiman) */ - -#define QUIRK_POLLTIMEOUT (1<<0) -#define QUIRK_FORCE_DFU11 (1<<1) - -/* Fallback value, works for OpenMoko */ -#define DEFAULT_POLLTIMEOUT 5 - -uint16_t get_quirks(uint16_t vendor, uint16_t product, uint16_t bcdDevice); - -#endif /* DFU_QUIRKS_H */ diff --git a/src/dfu-util/src/suffix.c b/src/dfu-util/src/suffix.c deleted file mode 100644 index 0df248f51..000000000 --- a/src/dfu-util/src/suffix.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * dfu-suffix - * - * Copyright 2011-2012 Stefan Schmidt - * Copyright 2013 Hans Petter Selasky - * Copyright 2014 Tormod Volden - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include - -#include "portable.h" -#include "dfu_file.h" - -enum mode { - MODE_NONE, - MODE_ADD, - MODE_DEL, - MODE_CHECK -}; - -int verbose; - -static void help(void) -{ - fprintf(stderr, "Usage: dfu-suffix [options] ...\n" - " -h --help\t\t\tPrint this help message\n" - " -V --version\t\t\tPrint the version number\n" - " -c --check \t\tCheck DFU suffix of \n" - " -a --add \t\tAdd DFU suffix to \n" - " -D --delete \t\tDelete DFU suffix from \n" - " -p --pid \t\tAdd product ID into DFU suffix in \n" - " -v --vid \t\tAdd vendor ID into DFU suffix in \n" - " -d --did \t\tAdd device ID into DFU suffix in \n" - " -S --spec \t\tAdd DFU specification ID into DFU suffix in \n" - ); - exit(EX_USAGE); -} - -static void print_version(void) -{ - printf("dfu-suffix (%s) %s\n\n", PACKAGE, PACKAGE_VERSION); - printf("Copyright 2011-2012 Stefan Schmidt, 2013-2014 Tormod Volden\n" - "This program is Free Software and has ABSOLUTELY NO WARRANTY\n" - "Please report bugs to %s\n\n", PACKAGE_BUGREPORT); - -} - -static struct option opts[] = { - { "help", 0, 0, 'h' }, - { "version", 0, 0, 'V' }, - { "check", 1, 0, 'c' }, - { "add", 1, 0, 'a' }, - { "delete", 1, 0, 'D' }, - { "pid", 1, 0, 'p' }, - { "vid", 1, 0, 'v' }, - { "did", 1, 0, 'd' }, - { "spec", 1, 0, 'S' }, -}; - -int main(int argc, char **argv) -{ - struct dfu_file file; - int pid, vid, did, spec; - enum mode mode = MODE_NONE; - - /* make sure all prints are flushed */ - setvbuf(stdout, NULL, _IONBF, 0); - - print_version(); - - pid = vid = did = 0xffff; - spec = 0x0100; /* Default to bcdDFU version 1.0 */ - memset(&file, 0, sizeof(file)); - - while (1) { - int c, option_index = 0; - c = getopt_long(argc, argv, "hVc:a:D:p:v:d:S:s:T", opts, - &option_index); - if (c == -1) - break; - - switch (c) { - case 'h': - help(); - break; - case 'V': - exit(0); - break; - case 'D': - file.name = optarg; - mode = MODE_DEL; - break; - case 'p': - pid = strtol(optarg, NULL, 16); - break; - case 'v': - vid = strtol(optarg, NULL, 16); - break; - case 'd': - did = strtol(optarg, NULL, 16); - break; - case 'S': - spec = strtol(optarg, NULL, 16); - break; - case 'c': - file.name = optarg; - mode = MODE_CHECK; - break; - case 'a': - file.name = optarg; - mode = MODE_ADD; - break; - default: - help(); - break; - } - } - - if (!file.name) { - fprintf(stderr, "You need to specify a filename\n"); - help(); - } - - if (spec != 0x0100 && spec != 0x011a) { - fprintf(stderr, "Only DFU specification 0x0100 and 0x011a supported\n"); - help(); - } - - switch(mode) { - case MODE_ADD: - dfu_load_file(&file, NO_SUFFIX, MAYBE_PREFIX); - file.idVendor = vid; - file.idProduct = pid; - file.bcdDevice = did; - file.bcdDFU = spec; - /* always write suffix, rewrite prefix if there was one */ - dfu_store_file(&file, 1, file.size.prefix != 0); - printf("Suffix successfully added to file\n"); - break; - - case MODE_CHECK: - dfu_load_file(&file, NEEDS_SUFFIX, MAYBE_PREFIX); - show_suffix_and_prefix(&file); - break; - - case MODE_DEL: - dfu_load_file(&file, NEEDS_SUFFIX, MAYBE_PREFIX); - dfu_store_file(&file, 0, file.size.prefix != 0); - if (file.size.suffix) /* had a suffix */ - printf("Suffix successfully removed from file\n"); - break; - - default: - help(); - break; - } - return (0); -} diff --git a/src/dfu-util/src/usb_dfu.h b/src/dfu-util/src/usb_dfu.h deleted file mode 100644 index 660bedcbf..000000000 --- a/src/dfu-util/src/usb_dfu.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef USB_DFU_H -#define USB_DFU_H -/* USB Device Firmware Update Implementation for OpenPCD - * (C) 2006 by Harald Welte - * - * Protocol definitions for USB DFU - * - * This ought to be compliant to the USB DFU Spec 1.0 as available from - * http://www.usb.org/developers/devclass_docs/usbdfu10.pdf - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include - -#define USB_DT_DFU 0x21 - -#ifdef _MSC_VER -# pragma pack(push) -# pragma pack(1) -#endif /* _MSC_VER */ -struct usb_dfu_func_descriptor { - uint8_t bLength; - uint8_t bDescriptorType; - uint8_t bmAttributes; -#define USB_DFU_CAN_DOWNLOAD (1 << 0) -#define USB_DFU_CAN_UPLOAD (1 << 1) -#define USB_DFU_MANIFEST_TOL (1 << 2) -#define USB_DFU_WILL_DETACH (1 << 3) - uint16_t wDetachTimeOut; - uint16_t wTransferSize; - uint16_t bcdDFUVersion; -#ifdef _MSC_VER -}; -# pragma pack(pop) -#elif defined __GNUC__ -} __attribute__ ((packed)); -#else - #warning "No way to pack struct on this compiler? This will break!" -#endif /* _MSC_VER */ - -#define USB_DT_DFU_SIZE 9 - -#define USB_TYPE_DFU (LIBUSB_REQUEST_TYPE_CLASS|LIBUSB_RECIPIENT_INTERFACE) - -/* DFU class-specific requests (Section 3, DFU Rev 1.1) */ -#define USB_REQ_DFU_DETACH 0x00 -#define USB_REQ_DFU_DNLOAD 0x01 -#define USB_REQ_DFU_UPLOAD 0x02 -#define USB_REQ_DFU_GETSTATUS 0x03 -#define USB_REQ_DFU_CLRSTATUS 0x04 -#define USB_REQ_DFU_GETSTATE 0x05 -#define USB_REQ_DFU_ABORT 0x06 - -/* DFU_GETSTATUS bStatus values (Section 6.1.2, DFU Rev 1.1) */ -#define DFU_STATUS_OK 0x00 -#define DFU_STATUS_errTARGET 0x01 -#define DFU_STATUS_errFILE 0x02 -#define DFU_STATUS_errWRITE 0x03 -#define DFU_STATUS_errERASE 0x04 -#define DFU_STATUS_errCHECK_ERASED 0x05 -#define DFU_STATUS_errPROG 0x06 -#define DFU_STATUS_errVERIFY 0x07 -#define DFU_STATUS_errADDRESS 0x08 -#define DFU_STATUS_errNOTDONE 0x09 -#define DFU_STATUS_errFIRMWARE 0x0a -#define DFU_STATUS_errVENDOR 0x0b -#define DFU_STATUS_errUSBR 0x0c -#define DFU_STATUS_errPOR 0x0d -#define DFU_STATUS_errUNKNOWN 0x0e -#define DFU_STATUS_errSTALLEDPKT 0x0f - -enum dfu_state { - DFU_STATE_appIDLE = 0, - DFU_STATE_appDETACH = 1, - DFU_STATE_dfuIDLE = 2, - DFU_STATE_dfuDNLOAD_SYNC = 3, - DFU_STATE_dfuDNBUSY = 4, - DFU_STATE_dfuDNLOAD_IDLE = 5, - DFU_STATE_dfuMANIFEST_SYNC = 6, - DFU_STATE_dfuMANIFEST = 7, - DFU_STATE_dfuMANIFEST_WAIT_RST = 8, - DFU_STATE_dfuUPLOAD_IDLE = 9, - DFU_STATE_dfuERROR = 10 -}; - -#endif /* USB_DFU_H */ diff --git a/src/dfu-util/www/build.html b/src/dfu-util/www/build.html deleted file mode 100644 index f3036e40c..000000000 --- a/src/dfu-util/www/build.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - Building dfu-util from source - - - - - - - - - -
-

How to build dfu-util from source

- -

Prerequisites for building from git

-

Mac OS X

-

-First install MacPorts (and if you are on 10.6 or older, the Java Developer Package) and then run: -

-
-	sudo port install libusb-devel git-core
-
- -

FreeBSD

-
-	sudo pkg_add -r git pkgconf
-
- -

Ubuntu and Debian and derivatives

-
-	sudo apt-get build-dep dfu-util
-	sudo apt-get install libusb-1.0-0-dev
-
- -

Get the source code and build it

-

-The first time you will have to clone the git repository: -

-
-	git clone git://gitorious.org/dfu-util/dfu-util.git
-	cd dfu-util
-
-

-If you later want to update to latest git version, just run this: -

-
-	make maintainer-clean
-	git pull
-
-

-To build the source: -

-
-	./autogen.sh
-	./configure  # on most systems
-	make
-
- -

-If you are building on Mac OS X, replace the ./configure command with: -

-
-	./configure --libdir=/opt/local/lib --includedir=/opt/local/include  # on MacOSX only
-
- -

-Your dfu-util binary will be inside the src folder. Use it from there, or install it to /usr/local/bin by running "sudo make install". -

- -

Cross-building for Windows

- -

-Windows binaries can be built in a MinGW -environment, on a Windows computer or cross-hosted in another OS. -To build it on a Debian or Ubuntu host, first install build dependencies: -

-
-	sudo apt-get build-dep libusb-1.0-0 dfu-util
-	sudo apt-get install mingw32
-
- -

-The below example builds dfu-util 0.8 and libusb 1.0.19 from unpacked release -tarballs. If you instead build from git, you will have to run "./autogen.sh" -before running the "./configure" steps. -

- -
-mkdir -p build
-cd libusb-1.0.19
-PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig ./configure \
-    --host=i586-mingw32msvc --prefix=$PWD/../build
-# WINVER workaround needed for 1.0.19 only
-make CFLAGS="-DWINVER=0x0501"
-make install
-cd ..
-
-cd dfu-util-0.8
-PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig ./configure \
-    --host=i586-mingw32msvc --prefix=$PWD/../build
-make
-make install
-cd ..
-
-The build files will now be in build/bin. -

- -

Building on Windows using MinGW

-This assumes using release tarballs or having run ./autogen.sh on -the git sources. -
-cd libusb-1.0.19
-./configure --prefix=$HOME
-# WINVER workaround needed for 1.0.19 only
-# MKDIR_P setting should not really be needed...
-make CFLAGS="-DWINVER=0x0501" MKDIR_P="mkdir -p"
-make install
-cd ..
-
-cd dfu-util-0.8
-./configure USB_CFLAGS="-I$HOME/include/libusb-1.0" \
-            USB_LIBS="-L $HOME/lib -lusb-1.0" PKG_CONFIG=true
-make
-make install
-cd ..
-
-To link libusb statically into dfu-util.exe use instead of "make": -
-make LDFLAGS=-static
-
-The built executables (and DLL) will now be under $HOME/bin. - -

-[Back to dfu-util main page] -

- -
- - diff --git a/src/dfu-util/www/dfu-util.1.html b/src/dfu-util/www/dfu-util.1.html deleted file mode 100644 index 62ca40b5d..000000000 --- a/src/dfu-util/www/dfu-util.1.html +++ /dev/null @@ -1,411 +0,0 @@ - - -Man page of DFU-UTIL - - -

DFU-UTIL(1)

- -  -

NAME

- -dfu-util - Device firmware update (DFU) USB programmer -  -

SYNOPSIS

- - -
-
-dfu-util - --l - -[-v] - -[-d - -vid:pid[,vid:pid]] - -[-p - -path] - -[-c - -configuration] - -[-i - -interface] - -[-a - -alt-intf] - -[-S - -serial[,serial]] - - -
-dfu-util - -[-v] - -[-d - -vid:pid[,vid:pid]] - -[-p - -path] - -[-c - -configuration] - -[-i - -interface] - -[-a - -alt-intf] - -[-S - -serial[,serial]] - -[-t - -size] - -[-Z - -size] - -[-s - -address] - -[-R] - -[-D|-U - -file] - - -
-dfu-util - -[-hV] - -
-  -

DESCRIPTION

- -dfu-util - -is a program that implements the host (computer) side of the USB DFU -(Universal Serial Bus Device Firmware Upgrade) protocol. -

-dfu-util communicates with devices that implement the device side of the -USB DFU protocol, and is often used to upgrade the firmware of such -devices. -  -

OPTIONS

- -
-
-l, --list - -
-List the currently attached DFU capable USB devices. -
-d, --device [Run-Time VENDOR]:[Run-Time PRODUCT][,[DFU Mode VENDOR]:[DFU Mode PRODUCT]] - -
-
-Specify run-time and/or DFU mode vendor and/or product IDs of the DFU device -to work with. VENDOR and PRODUCT are hexadecimal numbers (no prefix -needed), "*" (match any), or "-" (match nothing). By default, any DFU capable -device in either run-time or DFU mode will be considered. -

-If you only have one standards-compliant DFU device attached to your computer, -this parameter is optional. However, as soon as you have multiple DFU devices -connected, dfu-util will detect this and abort, asking you to specify which -device to use. -

-If only run-time IDs are specified (e.g. "--device 1457:51ab"), then in -addition to the specified run-time IDs, any DFU mode devices will also be -considered. This is beneficial to allow a DFU capable device to be found -again after a switch to DFU mode, since the vendor and/or product ID of a -device usually changes in DFU mode. -

-If only DFU mode IDs are specified (e.g. "--device ,951:26"), then all -run-time devices will be ignored, making it easy to target a specific device in -DFU mode. -

-If both run-time and DFU mode IDs are specified (e.g. "--device -1457:51ab,:2bc"), then unspecified DFU mode components will use the run-time -value specified. -

-Examples: -

-
--device 1457:51ab,951:26 - -
-
- -Work with a device in run-time mode with -vendor ID 0x1457 and product ID 0x51ab, or in DFU mode with vendor ID 0x0951 -and product ID 0x0026 -

-

--device 1457:51ab,:2bc - -
-
- -Work with a device in run-time mode with vendor ID 0x1457 and product ID -0x51ab, or in DFU mode with vendor ID 0x1457 and product ID 0x02bc -

-

--device 1457:51ab - -
-
- -Work with a device in run-time mode with vendor ID 0x1457 and product ID -0x51ab, or in DFU mode with any vendor and product ID -

-

--device ,951:26 - -
-
- -Work with a device in DFU mode with vendor ID 0x0951 and product ID 0x0026 -

-

--device *,- - -
-
- -Work with any device in run-time mode, and ignore any device in DFU mode -

-

--device , - -
-
- -Ignore any device in run-time mode, and Work with any device in DFU mode -
-
- -
-p, --path BUS-PORT. ... .PORT - -
-Specify the path to the DFU device. -
-c, --cfg CONFIG-NR - -
-Specify the configuration of the DFU device. Note that this is only used for matching, the configuration is not set by dfu-util. -
-i, --intf INTF-NR - -
-Specify the DFU interface number. -
-a, --alt ALT - -
-Specify the altsetting of the DFU interface by name or by number. -
-S, --serial [Run-Time SERIAL][,[DFU Mode SERIAL]] - -
-Specify the run-time and DFU mode serial numbers used to further restrict -device matches. If multiple, identical DFU devices are simultaneously -connected to a system then vendor and product ID will be insufficient for -targeting a single device. In this situation, it may be possible to use this -parameter to specify a serial number which also must match. -

-If only a single serial number is specified, then the same serial number is -used in both run-time and DFU mode. An empty serial number will match any -serial number in the corresponding mode. -

-t, --transfer-size SIZE - -
-Specify the number of bytes per USB transfer. The optimal value is -usually determined automatically so this option is rarely useful. If -you need to use this option for a device, please report it as a bug. -
-Z, --upload-size SIZE - -
-Specify the expected upload size, in bytes. -
-U, --upload FILE - -
-Read firmware from device into -FILE. - -
-D, --download FILE - -
-Write firmware from -FILE - -into device. -
-R, --reset - -
-Issue USB reset signalling after upload or download has finished. -
-s, --dfuse-address address - -
-Specify target address for raw binary download/upload on DfuSe devices. Do -not - -use this for downloading DfuSe (.dfu) files. Modifiers can be added -to the address, separated by a colon, to perform special DfuSE commands such -as "leave" DFU mode, "unprotect" and "mass-erase" flash memory. -
-v, --verbose - -
-Print more information about dfu-util's operation. A second --v - -will turn on verbose logging of USB requests. Repeat this option to further -increase verbosity. -
-h, --help - -
-Show a help text and exit. -
-V, --version - -
-Show version information and exit. -
-  -

EXAMPLES

- -  -

Using dfu-util in the OpenMoko project

- -(with the Neo1973 hardware) -

- -Flashing the rootfs: -
- - $ dfu-util -a rootfs -R -D /path/to/openmoko-devel-image.jffs2 - -

- -Flashing the kernel: -
- - $ dfu-util -a kernel -R -D /path/to/uImage - -

- -Flashing the bootloader: -
- - $ dfu-util -a u-boot -R -D /path/to/u-boot.bin - -

- -Copying a kernel into RAM: -
- - $ dfu-util -a 0 -R -D /path/to/uImage - -

-Once this has finished, the kernel will be available at the default load -address of 0x32000000 in Neo1973 RAM. -Note: - -You cannot transfer more than 2MB of data into RAM using this method. -

-  -

Using dfu-util with a DfuSe device

- -

- -Flashing a -.dfu - -(special DfuSe format) file to the device: -
- - $ dfu-util -a 0 -D /path/to/dfuse-image.dfu - -

- -Reading out 1 KB of flash starting at address 0x8000000: -
- - $ dfu-util -a 0 -s 0x08000000:1024 -U newfile.bin - -

- -Flashing a binary file to address 0x8004000 of device memory and -ask the device to leave DFU mode: -
- - $ dfu-util -a 0 -s 0x08004000:leave -D /path/to/image.bin - - -  -

BUGS

- -Please report any bugs to the dfu-util mailing list at -dfu-util@lists.gnumonks.org. - -Please use the ---verbose option (repeated as necessary) to provide more - -information in your bug report. -  -

SEE ALSO

- -The dfu-util home page is -http://dfu-util.gnumonks.org - -  -

HISTORY

- -dfu-util was originally written for the OpenMoko project by -Weston Schmidt <weston_schmidt@yahoo.com> and -Harald Welte <hwelte@hmw-consulting.de>. Over time, nearly complete -support of DFU 1.0, DFU 1.1 and DfuSe ("1.1a") has been added. -  -

LICENCE

- -dfu-util - -is covered by the GNU General Public License (GPL), version 2 or later. -  -

COPYRIGHT

- -This manual page was originally written by Uwe Hermann <uwe@hermann-uwe.de>, -and is now part of the dfu-util project. -

- -


- 

Index

-
-
NAME
-
SYNOPSIS
-
DESCRIPTION
-
OPTIONS
-
EXAMPLES
-
-
Using dfu-util in the OpenMoko project
-
Using dfu-util with a DfuSe device
-
-
BUGS
-
SEE ALSO
-
HISTORY
-
LICENCE
-
COPYRIGHT
-
-
-This document was created by man2html, -using the doc/dfu-util.1 manual page from dfu-util 0.8.
-Time: 14:40:57 GMT, September 13, 2014 - - diff --git a/src/dfu-util/www/dfuse.html b/src/dfu-util/www/dfuse.html deleted file mode 100644 index 35e4ffa9f..000000000 --- a/src/dfu-util/www/dfuse.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - DfuSe and dfu-util - - - - - - - - - -
-

Using dfu-util with DfuSe devices

-

DfuSe

-

- DfuSe (DFU with ST Microsystems extensions) is a protocol based on - DFU 1.1. However, in expanding the functionality of the DFU protocol, - ST Microsystems broke all compatibility with the DFU 1.1 standard. - DfuSe devices report the DFU version as "1.1a". -

-

- DfuSe can be used to download firmware and other data - from a host computer to a conforming device (or upload in the - opposite direction) over USB similar to standard DFU. -

-

- The main difference from standard DFU is that the target address in - the device (flash) memory is specified by the host, so that a - download can be performed to parts of the device memory. The host - program is also responsible for erasing flash pages before they - are written to. -

-

.dfu files

-

- A special file format is defined by ST Microsystems to carry firmware - for DfuSe devices. The file contains target information such as address - and alternate interface information in addition to the binary data. - Several blocks of binary data can be combined in one .dfu file. -

-

Alternate interfaces

-

- Different memory locations of the device may have different - characteristics that the host program (dfu-util) has to take - into considerations, such as flash memory page size, read-only - versus read-write segments, the need to erase, and so on. - These parameters are reported by the device in the string - descriptors meant for describing the USB interfaces. - The host program decodes these strings to build a memory map of - the device. Different memory units or address spaces are listed - in separate alternate interface settings that must be selected - according to the memory unit to access. -

-

- Note that dfu-util leaves it to the user to select alternate - interface. When parsing a .dfu file it will skip file segments - not matching the selected alternate interface. Also, some - DfuSe device firmware implementations ignore the setting of - alternate interface and deduct the memory unit from the - address, since they have no address space overlap. -

-

DfuSe special commands

-

- DfuSe special commands are used by the host program during normal - downloads or uploads, such as SET_ADDRESS and ERASE_PAGE. Also - the normal DFU_DNLOAD and DFU_UPLOAD commands have special - implementations in DfuSe. - Many DfuSe devices also support commands to leave DFU mode, - read unprotect the flash memory or mass erase the flash memory. - dfu-util (from version 0.7) - supports adding "leave", "unprotect", or "mass-erase" - to the -s option argument to send such requests in combination - with a download request. These modifiers are separated with a colon. -

-

- Some DfuSe devices have their DfuSe bootloader running from flash - memory. Erasing the whole flash memory would therefore destroy - the DfuSe bootloader itself and practically brick the device - for most users. Any use of modifiers such as "unprotect" - and "mass-erase" therefore needs to be combined with the "force" - modifer. This is not included in the examples, to not encourage - ignorant users to copy and paste such instructions and shoot - themselves in the foot. -

-

- Devices based on for instance STM32F103 all run the bootloader - from flash, since there is no USB bootloader in ROM. -

-

- For instance STM32F107, STM32F2xx and STM32F4xx devices have a - DfuSe bootloader in ROM, so the flash can be erased while - keeping the device available for USB DFU transfers as long - as the device designers use this built-in bootloader and have - not implemented another DfuSe bootloader in flash that the user is - dependent upon. -

-

- Well-written bootloaders running from flash will report their - own memory region as read-only and not eraseable, but this does - not prevent dfu-util from sending a "unprotect" or "mass-erase" - request which overrides this, if the user insists. -

-

Example usage

-

- Flashing a .dfu (special DfuSe format) file to the device: -

-
-         $ dfu-util -a 0 -D /path/to/dfuse-image.dfu
-	
-

- Reading out 1 KB of flash starting at address 0x8000000: -

-
-         $ dfu-util -a 0 -s 0x08000000:1024 -U newfile.bin
-	
-

- Flashing a binary file to address 0x8004000 of device memory and ask - the device to leave DFU mode: -

-
-         $ dfu-util -a 0 -s 0x08004000:leave -D /path/to/image.bin
-	
-

- [Back to dfu-util main page] -

- -
- - diff --git a/src/dfu-util/www/index.html b/src/dfu-util/www/index.html deleted file mode 100644 index 108ddaf66..000000000 --- a/src/dfu-util/www/index.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - dfu-util Homepage - - - - - - - - - -
-

dfu-util - Device Firmware Upgrade Utilities

-

Description

-

- dfu-util is a host side implementation of the DFU 1.0 and DFU 1.1 specifications of the USB forum. - - DFU is intended to download and upload firmware to/from devices connected - over USB. It ranges from small devices like micro-controller boards - to mobile phones. Using dfu-util you can download firmware to your - DFU-enabled device or upload firmware from it. dfu-util has been - tested with the Openmoko Neo1973 and Freerunner and many other devices. -

-

- See the manual page for examples of use. -

-

Supported Devices

- -

Releases

-

- Releases of the dfu-util software can be found in the - releases folder. - The current release is 0.8. -

-

- We offer binaries for Microsoft Windows and some other platforms. - dfu-util uses libusb 1.0 to access your device, so - on Windows you have to register the device with the WinUSB driver - (alternatively libusb-win32 or libusbK), please see the libusbx wiki - for more details. -

-

- Mac OS X users can also get dfu-util from Homebrew with "brew install dfu-util" or from MacPorts. -

-

- Most Linux distributions ship dfu-util in binary packages for those - who do not want to compile dfu-util from source. - On Debian, Ubuntu, Fedora and Gentoo you can install it through the - normal software package tools. For other distributions -(namely OpenSuSe, Mandriva, and CentOS) Holger Freyther was kind enough to -provide binary packages through the Open Build Service. -

-

Development

-

- Development happens in a GIT repository. Browse it via the web -interface or clone it with: -

-
-	git clone git://gitorious.org/dfu-util/dfu-util.git
-	
-

- See our build instructions for how to - build the source on different platforms. -

-

License

-

- This software is licensed under the GPL version 2. -

-

Contact

-

- If you have questions about the development or use of dfu-util please - send an e-mail to our dedicated -mailing list for dfu-util. -

-

People

-

- dfu-util was originally written by - Harald Welte partially based on code from - dfu-programmer 0.4 and is currently maintained by Stefan Schmidt and - Tormod Volden. -

- -
- - diff --git a/src/dfu-util/www/simple.css b/src/dfu-util/www/simple.css deleted file mode 100644 index 98100bc5c..000000000 --- a/src/dfu-util/www/simple.css +++ /dev/null @@ -1,56 +0,0 @@ -body { - margin: 10px; - font-size: 0.82em; - background-color: #EEE; -} - -h1 { - clear: both; - padding: 0 0 12px 0; - margin: 0; - font-size: 2em; - font-weight: bold; -} - -h2 { - clear: both; - margin: 0; - font-size: 1.5em; - font-weight: normal; -} - -h3 { - clear: both; - margin: 15px 0 0 0; - font-size: 1.0em; - font-weight: bold; -} - -p { - line-height: 20px; - padding: 8px 0 8px 0; - margin: 0; - font-size: 1.1em; -} - -pre { - white-space: pre-wrap; - background-color: #CCC; - padding: 3px; -} - -a:hover { - background-color: #DDD; -} - -#middlebox { - width: 600px; - margin: 0px auto; - text-align: left; -} - -#footer { - height: 100px; - padding: 28px 3px 0 0; - margin: 20px 0 20px 0; -} From 7a8c66ec569747e30f0911def6ba6f29cc59c8e4 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 19 Mar 2024 14:34:34 +0100 Subject: [PATCH 32/41] chore(dfu-util): kept only dfu-util 64 bits for linux Signed-off-by: Frederic Pillon --- dfu-util.sh | 8 ++------ linux/dfu-util/dfu-prefix | Bin 31663 -> 47032 bytes linux/dfu-util/dfu-suffix | Bin 31962 -> 47088 bytes linux/dfu-util/dfu-util | Bin 115520 -> 151688 bytes linux/dfu-util_x86_64/dfu-prefix | Bin 47032 -> 0 bytes linux/dfu-util_x86_64/dfu-suffix | Bin 47088 -> 0 bytes linux/dfu-util_x86_64/dfu-util | Bin 151688 -> 0 bytes 7 files changed, 2 insertions(+), 6 deletions(-) delete mode 100755 linux/dfu-util_x86_64/dfu-prefix delete mode 100755 linux/dfu-util_x86_64/dfu-suffix delete mode 100755 linux/dfu-util_x86_64/dfu-util diff --git a/dfu-util.sh b/dfu-util.sh index 7b520fbd8..2469282fa 100755 --- a/dfu-util.sh +++ b/dfu-util.sh @@ -1,6 +1,6 @@ #!/bin/sh - # -# Use the correct dfu-util program based on the architecture +# Use the correct dfu-util program based on the host # # Get the directory where the script is running. @@ -9,11 +9,7 @@ UNAME_OS="$(uname -s)" case "${UNAME_OS}" in Linux*) # Choose dfu program by arch - if [ "$(uname -m)" = "x86_64" ]; then - DFU_UTIL=${DIR}/linux/dfu-util_x86_64/dfu-util - else - DFU_UTIL=${DIR}/linux/dfu-util/dfu-util - fi + DFU_UTIL=${DIR}/linux/dfu-util/dfu-util ;; Darwin*) DFU_UTIL=${DIR}/macosx/dfu-util/dfu-util diff --git a/linux/dfu-util/dfu-prefix b/linux/dfu-util/dfu-prefix index e0fe84a7e05af42d93a25ecba66bdbd4c9c6a556..1976b39e1d6647d8bd231423ca7f3ff7bd9c38ed 100755 GIT binary patch literal 47032 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 literal 31663 zcmch=33wF6_BUKTJqbONArl~AfDi^qASek5AZu7c!X6+(*c9&&l1XMDo0$m#L`6fC z2q-A7*9*8^^@@rM2&l*=p!csLBJSdXnyB~6rlMEP_xn|KCqu;lec$hUp0AUdv(%|m zr%s)!uIaAsxo%9(SWVM}b=ZV1NPW4=ZVUj7U!ZaZ2#+vCvgj##h)A%QH()trkYoWA ziU7}!q%#lnfa{Tu)DAQg^QfCi9xRL0r;iX!EH7eIzT~}#JfwJ=5G#;aFY|$l!H^$} zJf?G?nV8Qyn8u@$@u-_A8#I%Zm-}U?(9>H8&trCjsRVgUR{mwk2lw{*blb$AAf!Q3s1K> zb=`H}=CwgyA`*{INF9(mBDs)yAUToRB6UaVhD3cHB1fArU~zayvg1|U!|`&5DfV$^CoANl$ZJP^5>WMgx6bK zT3+T2hVm;zUa#;@T;!c*%4L=02ZO$#Dt_U@MS-$_@ZuxHN()%sK*&#pzQRD6w<_o> z6u!mCt*8nGMRk5<*>#0fbc zX<`vz425vS1Ok}OY$D5y$F!I1MkF|ll?Y54jEM+LNQ|WjOgQZ02uzftAjg=_Cd9-u zo)E#7Lx>45mk^U(9w8>R*@TGJxrCVT<`H7DEhNNb=qJP^TtbNYD+n>sg$OY@E+&N0 z%Lp;~EGNW3SV4%1b0r}r>(zvqoYxX!a$iq~34VIbcSd~;47`5dBbN%Xs^-_m#>U#+ zp@@3U95wrmEA~l$@T2k4!6?<3lz~r4C$Y7Dq79#-SYr}f?Pp%YVM(*~e!8?_x1{L> zKd0`7Es~};{2tPqBu%gQlS!|YG`-_zKQ}CwG`-{>Ou9nS^p<}V>3Nc-*Zkv2=SrI1 z^XHNtC24xmKbv%#r0GrnJklOX)2n_qs3Atu^sc{xw2(Bt>|ad!$q^$itLVMz80QFZwC1rn9ykznw zfVU<)aqteF-|Mmy`>a})*e88A#FDA<%;V{etH!wM<|f8~<=Xv{)M~WdU^gIaUp0mX z4WJ||{~su;IoIf3aX%O}_1QJ&`Ywv9{}DE>*+!Yh#M*k4M15&2eLu$x${WmM`TI~F z8Of_4uzav^*FK1W^fCuvLp9nZ<#%CB(a^ySg-t9*2*k_pvXs4!n7sfMe zO-7Yh(j&_fbD=$_e#LL96KGfZZqzegxbN7FEW4?x{sy>vjqhyw?koP{y>cJ9R8DzI zIsLI2-CEliiW~;TRpU|1t*E8Gr>Pyn;@eGOw$Uc5czp%RTD9dNWT593>Ito+NDzvk zZz4+6FH-vKBg1&}!MmSR9nIphi-n|l_QdB9H)xBi{z^<0^>N@@9cfQ$Rsjj4zBAOM z|LZSxpCN*C^QQSf#fi~hfse~(`aN}M%TA~`yVg2Z#V78waKi1AU_lDc<~8Rct8HiY zZHFZSlhY3v88zR#dcCse$P2u-QGRlbkz>Ob*>5pcgliCtb*(c ztMCyPey%44mJeSE1){2*RBzNTLkt{G@gE_FHVF`*f zgz!Q8Yrczbaw7c{=0pQa4C%zU|AcuO=b&(*#QRL4Gr!2V9t9ig$Dsg~>t69b*mWtZ z$=UtVT7bGsW%iM};gtQhEBm$DKIFinjt9nw;WfLpnj@m-747=p9z%Ah^^kXipCQBZ z?U!p72^vk~E!!4;Q;0^#ZZBjdd5Lkf`#=N>3hf)qwde804D zEUKx083Nz7R)JuCs(6TB6+*|Cs2;_1KDhSBP(t0gHLgMKZ830Q`Umc9NA`Sc^pC&8 z^RV3*a;WO-x)3^ZS)#qJPh$Nb=pAyh%2~5NzV1EQ(7F=10TQ%eld?cg9Fv<2U-M!w zm?TvFeb9taa9=h8Vf?Br`@t-E#yXf4Lz$w3SswY>y|EE^qWtWM@Xq2lN}dMjee_^# z{YyU~R`unBQ{1(jg_keZa7uU&m<)1F$n(vr_J!!Ux-2`2xnLnqCR)=Ng0}jD&@!CN zy1jK-M%66D$@P0Bjev!DlzA31wY#Cjz2Y^TUzE;2C_@E$mO=R-Et_s=dzIqpMriZ> zn;AdZi7}joYj?X>pbiEd=b4K)VX8a+qbyVNi`#wcQ^VG;I1f5V{ zp-ej9UbzAm(H1HWm)He`F#4c-<&&la%Qi_2!1+{4xNDapzwTmb-)**4^`yEcuoV6lD((%f6}5WlOgwy#<6>vmv`>93+)@oPdCokUc`p&jmRm`C<# z>3iMVPVcEV`rEg97+4KeUm^VBc6^UkA|B$GU+2trujqx@1gFFp&AsAAG>NFqz2X$P zzqCSsxNmt0&2VosmjA4UuBrKKt&h zi1&cHRqfdiwMX15)-Y#!T+J`2=y|E#=B~XPBJORux_jFw8$30t)qRS zJNBYk*){w7Fz6f7erRlD#8uTD%;MZF5XM}nxVMc*=?dGP&kV<@J)b%2CdKX`U!N2+ z+b9!;TjtHWeBgz@_{+f{!f_-el4>LC%cbsCBq+t4*sk;$mlIR*Xe zw47it1^ruf{$M%$G1O|mL5OlVPB(hLcFFV@G~cC9vcn2H<_?~I>nm^?K{yTIP<$NH z?&qiXJdm9jHv=CX$Ks4oFuNiDwaNTbZ30U%vxIIsILQ zw%6=Wyy7qWFb=J0WEu3;{DNsj!=Odm(Q;P9@k#~P?`?#i>fYM(bJsl$7iq8U`Ne@c z+N#RiS=K>23dxflU>wQ{G(4sgKH7}LM|>kby6_``A6*;klVDTBEf_JYrpKJv+MOgjEpuMz^6BI0zAp+CcLWp*N`WOu#ZN$o) z#J1{uJ3X$UBU`7Voc%C{lsN=gy#9)lYGGrZ?-@U_T(GRla@CwO+$;8>o|E6FbezKIl2*2(D3&hfI9jEz3UVULwp5+@Hz%%{HqMFQ+feu6Z}xnOnfQp~u+;Dt zBpNrO{S5?T6EQ2;-~Ngsb%z}%S7Cgf{waj~V^r|d*F%m~_J!$o zmK<_0XdiMc)D>Pa(vLJ?nJCxQve^xB&Hk6!HT7Cc!@`{le8#Nw#+lRW?>N=ic>TT| z-4UyBI2Oulp8XX)QGeIY+KO#6WHidfELX}c*5haJZ5BhssP7?b9LE~NFQ{Rug>|V-%n0Te`-XZ7i>gv8Dt$$P#hxp0 z0X0xw7QE7vnwskLcvAeHloY?Oq{88F+;weLK>=G)&Ov zF?pV{s?zzsN=g<$vcT^vSm?7$${stzW7<$&Wad#m8}fy|5?{#IR3KZC zVI_(x%S*$`j)hLYb$aymWq`ET4_`R0l$6ZvIdw+#^tT5PEQF zyrd+*G7zN3O0?LMVIm_u9xBe8;F)g8cq|#SCI6+SY)^S5JTjE+%nPr};m9lqd0^51 zro7or7jA}B9$rNbswk-_FuU5}m=W}Orp(Uu<@YR zrKP8*;G-WKTa;hsnO@*84HSm@FlT^gMzzl~y1cB+7j)(^J}N59i!1X>JwV6ein?cd zc~J=0`F)=JvO9b39X~dS+!#o0d5xZ;ms!#Fr1NDt#5@l_Agk zs^XvrK1>QaonlUTm8Z<-D+ARLSvvq zO!JkNFA6Io!&#Q%I1}a|5^~rGgqTnR0=GR{#AY)`pi_ldc(dL35|_LFEam@~{3J7f z#($9u*FV~n?fZXGCcM0b{{*{RCj}i>Bw;d2>R(b)n3Uv6O7926Gk-}4cc7d}K~EuW zS*1F~ShyI0fynSPa1g>WqJvdMnADnjl5>D!d4hpr4Em}{p9o`SP0NBpU(i!l9`axe z6!_6K`GuaOfU40WJ4W7|GOG**miidvta^T+SY+YeRG}=+yHyO;`M7OXR))?EugIDf zlNLKKWE?`e7&B2)p_nNnFw8`b0K`}`-;8pTKcj46S$TC?_;8jHhM45sHPn%|I4Nx~ zYMl+leSIFRa2eG$Fg0HxswP;M;H(i^9NW znH*{TP=_Na;1qBvFj*^9X62XBwesFwK4$b%1b*cb4@QJ^WRlgh&2E%;@!$!w1I*Dx z*EGvCsVfRpmdaTMH~5Ntl_E@r_x|KS#Q2rr!TW;jl`t8ynyZq1jln*nELc^+=?J4W ztRtHH2YbDIfCJzY0WM9C2YhJRXo_oQ=#Tl^8^~e$Ou#hLn604 z7!2S(@A>B!R%M2hJQIfeKDY`uWUJNO1Rqw00+`~hX!4kc8C1FXOG?V&LggCFl!ZKr zG}TpA<|`|xTv9+&SBrhWB(k7jxciqMS{rK)dCG?UB_@z_B6Hq5l~)x%@YV@E zW86{uq~B^=A6dB7`S34~ZoRbR?q^0Hd-a76NB#Wb<}XU#>sK}R_?S0aANy#|@V6e{ zoc4atq2iOvmS6Vnp$_?nU*3B5xo$o7KRffDJ9fV5e)y&B8@Ah$jg=AJXWn-mNNk9D z`le;&ecR;tXFuL0f6wrgqHSw4KUx%d)rZ=Po+Ec(9P`fib+u1l)phH($cIn7ys`h$ z?e!15+G_EDpN0FDM;&*@-5vee3#}JimomK6xT~aaoi?}NtFxCaTsS|!B>ufLU+okz z|Mb7^h%CAKVXgC?v&Idx_Pc*L@ctHGZo~6!zuCTP)v}d4em&mh&q^YD7^-6xMcXx!vKttI@vH!^VLtoc9vv)H%%s(~dPzm8m3wy5*b-#@+N z?YhgCeh~9N6F)94KfdGVpTFOAOV+OEFM8*eE%WLhJa+8b+uyo>|K9foPdj~l>Z#%v z-YTB;;@>}x+&Xg7z-PvPa7pX;aymPo`f;K@aNbgT=DzRe9iMT$_|flgDNA3nD=>ET zv-$t*R8#cgrX%G^13&jqyQA9mKl-?+7j|^8b?@6VV#cmvJ6}nTdg+C^K`*?_dU3v%6WUK?XgJ5eIo}(e_LDJs=ga56|7cma;~z#HJ@WRAqdz}->fEy* z`^#!R==yqxUDsdHbH|ULRc|S;9`}6QSC<&cHUKlXl6 z)bUX#hrKsw`jam{_R5AAKDqAAXT~)&ZcU3n{nAS}@7?)Y+U?Iy|NDc_B}NQ9yz}yx~fi{I~&y0qxo?Gy9&+dBKNTz^UV#e;T5J$L^tu6>=4M_j(jhT)|1=)5gXZ0d{}U*vRkfo)e9YCjn1>+1Qwk%K>R$H8%PIw*Wp0I1gWH zd3AXcE;x(_Jc&yeive@-m2^AcZospE@`4ofXiKLFZJD8UcG>MKQQiX{wzmj7>aPGT zqK&c9u8HobkbSWj*=g9t{Sv$L0@x^|7}zuiP-I1W(g5<1GLAPkz5@LsGuo)Njcy$= z`X>EG`-GYZ{g~$5mw6!bVCE~RDib#j<=!q{CQ62$*I1Va z>G>CG=9nna2UToAeWSiV^e*xv>C9B3|P zCZhuSg7#Q@T6N$9umy&8Z9(Fg;eJo71EDLk@&9H0m;(;-{51oabwB&fjk*T&jh^cH!eTWF}h@CbU%| z)NJnz0IAzsO^1}-9)YWQLf4El@RV+Am5v}o-W25NTI3Is84+LsBch6w(P{$n@DF^D z51+Q1SY&k_8TN>!kg;7s&KkN9st6+Nk@kO()FOX{K%{*bh)6r{w6?NwTC}IViccd2 zAL}E2yIGzS8;@5{HWp{A+Mf|2H!|^|;F5-7Zxg7UUvQben&O_89 zG)2ZbCsR~2$vEdX%(aL%%N{zTyjlT38pK{C=Llbv%}wv|ctadIPeghSg4 z6}BE}&Z{XLr5%#w0H=>+YfZIguyY&9HYSar(FvbwjQILdq`fSO^{@^^8*UU zX|p6b))}Ia9kn;4=5fvq6z-yZBFXX2Z%Ovl)=J?VX9Uak)gF*!p3_A#%_L_#+mTE+ z$+^x>B>S17i4s2pNR~QH8HGeNR=rw><+4IRsJ*;^)TG{ zGA~+Hs63a5aT%@erh>K*GNKh*ICu-xa9aujaDow|C_@+#Ad`(&=>W1`!(r9?D3wGp z!`8#@xB+^NHZ%|QI=IEqXxCm+v5sY|puM8v9IIfj5vQnlM;xo`=#-Kk$3x8Pq^RzW zTUkSAMI|~`QcJv|dct|^nl^1wz;1M%2`z2A02giR!PeSxy=D__9*17LkyOR(Xncsa zALB!7yAGnrreSvDlJ(4f8zn^BCy=4F?W?lavb5&e!R$h*JR2OXZ8EKGI|2oC(XKU1 z^wv1>4Z)-aB|=NX92IMTx*7C26mM?}VN`O*8Zf(-j!#2(VpBwHiYb+VB1(!|*21MQ zQFNf@tS29vaaF@*RiBOxc_3M8_kvbt*G# z>+GG9DRmhG!WJ6bnT^$^(G`W@cdlXPbULnqWD@n{vC}Svj(F}N*JeC~oaaDxVS8tx z?wgRb%R6Hc5E}&g8Y=p=sa@Pa%XUTR+))e6h|symR&-!7%CdD4IycoSIqtGGA5S?5 zo$&=i^Rg+&QD>(iFinxR(16&ZP;mmniy=ofdX*7LC3=;M5LI!*EihMv&MmmWVr-b! zV`Fh~x2HphJ5)itEtE!iJ(L_NVtG}WZhzd;N^S>wcszP42JztPS2X=>4lQ^$4sIO5o7;{Nx*2)YA97|TDPtc z(|R$gvu#53C1C_3;2Ok*IwHy^aK%rZIebP>V>?cCxYs znjDeZ31)E0>?wL_{3g)qNtF=;Gh~S#5~E0u&g60KMw2@LkEW54_HIPk`d->tnCo~! z%LQMf_oeC{9MP)wWbIlga`w|SMxoNLYERN8(5_t5uA7-HKUjwn>h8gr7BZYQx@%n7N6GI7s!fbZX%Wg#X88e{#=ueK=^kZeZ*3rRhiaP4 z5n?IU{WdWgrrXu>kNdW{{Np;&evjSw8*De1eraHvOTYhvHJ`OQywK7wADYaiU#(Oc zzVs_s)o|%&TZ>6dUr(6`yRDqW*2_Ue+FzuQS`eCRKtA%(%3K51p*@CL15z9(YeTI8 zw@C`)0IiDnO;LuS)_{s~8EOrvs2Il~l)xHLk+BYQ4XDUChq(q+WW2*%11i$vFxP;J zOmy6VuEQEok;x8o4XDUI4s#7i6<7m0%r)Tak{saR`5kLO)tbQ$a}B7-42QV}Tq;{P z%3-bnM@TZ;VXguBt;5!1tRn=KSOfC3YwI!2VXgtckmPuWxdvPxJcthcZBm?ZNY z<{D6uvmNFdP?2*T<{D6u^Bm?HFiDmzbeL;EWwYO5t^pfly(Pk_)_|?dH6Yz!s5PMS zh%nR|P&veIs5PKc#x>wt6o|Al2%;DpY>w+LAmlO}B=={F%QYaix2CM^Dg>6j=y9TI zIXH-@S`JDl&Vy)Vf5yMc zD|2nfg^|HErQx7u4AVyejVNYdZD**p-DqgX+RjjGyCg})8p~Kgdqu?=YHg>ectfr2 z*d4YW9z(6|6xH2OYdb|H8Y`(KUQt}zxlty@T-)`B6>a3&u1!76(%PuCU5vT5o5pOp zwreBTc5T$!E{29-ZFd#3<=U=|T-&u#YrD4EeaO)6mLa9x3%ng$sol*miLD4#3hiD7 zkZ6BBGexCYI>H2llj0 z!&q3>Ck0{`3+(|)ii@;QsJ%?%yyv{tZd}6_pM|!#xl~^!J7}GVnx-CgUO4~`49kd?fSa8k$_l$(GuZd zqcn=DpzY;}$^nQzFHBn_}AC)s~DlJ;~zs zq--y$NkB!k(PoULF%deq|I-|<{UGCk%wS7~tZwY$TyXaxJpo(`Vgb|rC@>h2{4wAd zw6S}=WEkDgNa*VEJ76s`5@})u%GM%jfBzoVC2s@k9^@rI4rD(Nk;qyeF>BE_O=lI< zq|KByX)}_n%$`)-o3-_3-MwhmWtPFlMAaxhQ6L+&h>dmGs$|>lf#^a@w2C=)TQz~f zb*O0H4VGwg(V>y#=9)t9hVK` zWU;4M3?AykZ#&vkvG~-%iQ7%Fr#OUd>x}sCFv)07*FyP1WOl(&c!pvB4-x^PJxk&f z5V5$$FSO@KrW8{{ik8}At=&jPDmP%?^Q>im67u_g--K#OmQ4I07TQnqPC;FKswAn- zjncT1ISLrddunM$R6mID5?XOCxo0^`#G`rr7>$S4;d=q{@p$gF;K^_tLxkbT6`)91ce}Fh zPEc%igwFl!A|VF$eE_?;{8M~xG#3f+CjUSapPSA_!o4Q{lP12Be-eBS#otUmzBSR0 z5jr=Bi-d`YCuYZ^xvZvXv~rKONSJSC4{ORcOLMEX=*4Jk9_MBjcWa~l9K7z^?8c*P z|8Q*uG$gM8?{6@q|6wqD+zP4#*zh=4W3K}paDYzC(ir{=L3=hqgPgNG^U)BA_3D11 zTDkWedq5e6-=jSV9=P6)rR_J+!Ul7y91UJ~@S>U(D>UTV`|nzDS6M*Qh)a;VVtI>gG;<(QDv^oXXAnT;?RBOlvNQ zBJKT&^0a%Y{FjyW+6EMTY3R7=-&_JP-O+*qVB zNDi{u8b{f$&@c#7lbRZrq9Li@LHS*G+KvC9-obJJu99`w*3C> zK=--?rT(B;RXYlbsr0W%+o9=5YP-$R z2%DQ4hC5UV55g~u@1v*zd3N2IX`_tp#G?=ipCXs$HK<&{(@w%hw3Z?Hdl<79JMIr> zHSV0pFkv^-YPm{qD|)C!w?YIAWIsQmX}h6>Ulp%{{n|ZPpr{CV#EO8_Lw75I%_u!s zp5dO5V_ch=@G-LxmvJPjV535xCtFi&`sw4CSmT!7YP@c{EwRW+>h-{-x(_*k}wRI4B^w6kb zQ4`u>EtiP%)d)zyEhdWKh`?~fJQPVlsa8ESR|&M)~vma{k+QBCZn==%q;Cv!DpFX zt~Od*ZB*o4qg~V;TX%zo)~3sf+TVNw9vyJ5!>&=$!OFmQuvF9HUM>%;h)dN*x-4ZA z+MTDaV?Rm_co`qvl9YB}8d6B57n-*dk~omLAP2 zM!GUEv2_b)u+Hwy=G`)vGB7ezS6t z!|VxDSkS1Dxl=`8T(eGgA0sF% zC>TK&iQMoA0?7z6hop?4Fku8#f)&CthQeaoqvGj~(JqEmw^TFkng&Jp2$9~7#^BO6 z5U5IQ8JkJi+J%0_RcwkNQmneLo|dIis5cRutDB9)*Tz5k!5oQw!u){3DNfZiOkk<1 zF1Dg?v#xjy#WZV#q&JU{el&F&Mh=Ei1k3cN5Ek)fQA7({bZL_z7ze6DOhX2mhENbb z7-TxtEH^kz4RVJx8>GhL&?dcMLuQy7dl^l6sM8uw!#U7KH07X_8dD=BOZL6R8r3A# zGj%XR z`i|>1>#-r@%p1C6w(g%jXI9STNP2L#-f^eCU<2{^*-sn(6~+@e!3jBY^q3oryY=7( z;|XE2YmpNp{V(bvP%oHdu^vKAON+J1(TR-KmE%s;Y~Nivx@FvJAcL4VObmkK7#j&Ae2;%|Wx%tkKdS!+lJ-a~G^ue{8 zC45YqDB-);DhnRdPE4M>Mo-!Bl>Yd&n}?3@-_)SLqa9iSA??NY_O8FK_PSDiNl3r# z+S$cbRmRoiLty8VdhBL>?X?@uR7uW#n$dRS!;>ZqAC?yEyI@xDOx;nmqVV!QIem>Z z7_{)|NqY1|{i=yZJENW6dZ!*l7*Et6ytYVxPup-t?_gxGZ1IG?`qB*DZ9p`nuexrw zeo7!5%Z-dP`aiA%7HzE6ml}tRA^K@%lp-xfDlsyQa($3-X!aCiT}s~t`r?W6^j)c5+MGH1qS=#bbjL)!8nCA3GJVO3Nh=ROx^CTVTc=)LqrZ6FTD{%QJ7BP0z0>G7 zX|W#Md~VKMV}zc+VPx@O-I2OzmcD4B9+fev@1k)djRJk?#5r>=(-$7n|0!%q+U!X$ zt*?E;=w=Kz|IlQ;Duh840`s3K!_U}yVdQwdS5@T~dP8{eoqS6k-e>)V6` zaT9=V4wTOUd3lGyTU3%?928T=jLDwv&7C%8?1b4;0+;W-^YQSY@RsIRF2u8_lFP?o zq>b`PIYYAgEDKk`j=}H}p47m@6W$q9#!ShYHYYc4Otz)odS_tx`vui= zvSRYo>@nUcQ>Vah>K%l9`JhLB&>wiz(aRSU7FOdyC^0#6&ge0gQuw}Lp$HVJN2)~5 zWL9pr$9(glx1g%hTTot7Raz#z73DzzRf_~4cT}%W^agp)!dqTa=q)cQf|a7Gj1RWq z0hAL**fCZBk~Kt(Q+X(x*YcH(xy^#%c;w%d*Cg$(kgZ+tj3=jiclG z_k-uyLCWdED`SCX$rmi*rLUeWb32yi$>|E}ixqQsD zsg{#iefmIDuR_6Wk9vzELPU7We2Zb5w<5nVU4ecI^jBbj0+*_mW{=5X=;PtR^V%r; zH#0js%x2o*rNajfVB2{HE-Qz*Fvn{>s_BLQ@is{g2PI3%(sC>sWNY#Z7FJcLXq6{- zv$0+Vri$-=LUoMQB`hXmS%vtb5MR@2^}4sJjPKO!$APZGUJgwu%5h5*8SrLwaXgNl z!N*GH^R<|;fbZ924Gc+Gs$v^2@GSH#Mz(t6rm9^&cnO_qBndSvO#;zc>9yYD87wao zxIBpX;KP~%@fA{e`2_`4rE)qk-{C1=xoMe+<&oDLO!xAloqB7hd=;m9`KNM8*n}h> zGsbg`a3!NX*iV(?1LfuvrYg4N1Rj58O{NO4=ld+e3;zbIO5h08Z<;Q>EJ_1-TCS|v z(#U4w3EW_T^>R^G=VMGjY^hKB57wJAmR$7lpU&}nM+rB`uiIAO;d)t6}xT@p96x{X4TvW1%2G_#EoG<|ICPsWuaLFe59CF5EdympKy+p3T9a?(!{Jk(-kKbgpvv4 zrGi`nKIRO+CCjRyjJO79mv}HlD19fYLXMN2jKT4iCk+v*P#mjvmbI#<4-YAQX@svM zX(E?^jfQBNCCZ(6pGtS<643K@QL$far1SsNM6u-qkW?OfU|bVL$Iok`xCyVKiK6#6 zBcXO0>QaVe1B_QF`{Qp4WuH8#P|G?(emjE2b_FGl7T_Y6;&XF}z*REJ#1P^R5%E~U zB`Bne(5DiS8^w`9cr_9W5H3@=i|`tS8-&XhZYSjC7^#TJUX>9`xKH6Rg!>ilB78;R z1|gs9VGCeT)4@=&iFGc*5~N6R+3oh}x7*8r-w{S%i?X-M^6U8RQ68E2yaEYMB{(Y4 z83f}Yi7&|9BVZMT5X(P_q=^}jk;nb`WZNUf%-ij=Znsn9jxhQ@;B1nWZx$1;137`@ z6dRgG?>W%Al+C@}KJ9ipx7hLpVv$18R@uYgy@f2Y#K{r?|KEu;SiP;Icy9Pz%E}M1=cM--aJcjThg~t-kQ+OI-fypNVXolBpPEW05`l{X~?ySw2c;z z^gzk0kZ`apJ&j<3VqX_7YF25n)A|lVIj99{F6&^$QoWfm%TNQ2)ZdbUS zupSEni=8+cry;ko~YM3kry>oudX zlaUg?kqj0wM1>}q%|Qz87^UGFfOQJBlv&Qy@#Mxv+FOex3EIWY#4zGx^ldL(69j6N zqZo7HyxGj&g>2$KqJgGUXIrvX9UMBWLX}I~Ncf@Dk-o86N7_c}IwAF?Z=48y^dHat z&AOY1Aa%Tn1n;rfn@B)eY7SDEPigS2ND-o1TqU{_T_?*;BltT~E0vQTPl7#Sh@d?Z zvgz?wOQ_^7q%cRYat=C76$ENrt&@;L2yB9FNN|sYY%18>U@A=p%Eoe-03|SkSOzd# z0yblY%?E1P@(wBU=YcM*T?=TW48;;LU5!D=SyO9{y)}&%h zC|0?ZkmW{CP7a*@tb;llkvPuoM&h|HTxYo47m)j^g*-QYUPzv!Ef2{$A=9=F7?9TK zkmHVnwCP9>W{#ea63Q<&DcrnB<>kM^lt7{2 zyRTAlZOSiF3zw8ZpMtpRB6F;(7~zB$d3ak5pQ);0PZwEu+{IX)~dNj#ESy8!#=g*&C>04w`_|+nxg~MAGiVGeVYHDh7^M6A+ zL%>}5s^5G9fg5Q}2lIIJKw|eHOx15QA;SaQIuIuENXMro=f57?eIS=;<`GzOf2PL|;_?wcW(4BFDiwsMlFL9*odO#D#@Y%%4qw?Vdpa;uSOE6cCIv+La0$Ud?T z>f><}k|nnVa$6uL-$NmDIRPu3eBQ>AnIe=w!IA_p42eyOLBcRR zPoJw=;6>eFnun#&qQfD7zmK%~RX{awD_Yge`B~A*V$Q>gRuyo*RkU&(=T${B($zaZ z6s@A%dMAf2BTdbRDxa-T@AgnM7F;+uzbTqCx0=TktvZ17m7+QG33+i?(b1B&ekV+q zBN;5tGdOhVImlz4P_&xJIBzJrErFaL6s^v9oCg%GW;Bj>MYkuA<66-jB+c=w=!+!H zajNJzNpn0Znr~DQa@;8zlV;eVb8-wj^z(j!kL~FamPLm;?P)=GYe9E!ibH1D z@jGwq5w1=7{tg>vP|l5fR(d(0hF>x~e~v%Z$QmvGXn4a5raR$5c>q~H6EHW7#_$u? z`)8U&KdxzZ!;k0bJ7}CDE}m49<-nHG@ovw0PW@c z$qSc^Wa{Vq$A^&UdD7S~BDjT>15HD`v}_+QJ0@?o>T4@HgAQ*mAJVhz<%(%AXzSfF zcxE4)Et~CSejdx4@u1t3AC64Yb)c<-(aMcJ*5LuN6?6>z z!}hhcMT>uew&Kl$_8$wAXL(-!PLVEJyK`Dj!S zIPDwIBA*u@t?}3v(KD$<{^g)!utA&iDDCC7PwSxmMJ?!?TG02lpf`iI+8cxR?r4$! zDrjy$;ni~5`$1T~2lX|C(X5}FjUO`mr;V+nhzy&=nco3)`0pC>VFBx4enty=Y74rg z1C9o^F*yX zsW4mKZ?o!$~ z+r8Oyresc@kOir*9Qlix!aFW!>gdcI@6@qlr;o|==4Fn~83XUN*g~Uze6k?O8}#_W zOx|E0HLCeHCja-}=UhB^U@G>bcq=8tiP=b`TNTWj7850_E<1Hw57 znXo3}$3w$2X{XiW=7xate#Df&I2tYwWx;Z`H!^=qYJJAcBZ z%)JretUvsuXn3aF6A;cYr5OVZBDn$dJUir8f$$RMUZilA+!T){=asv_PruUB=H?A+6A4*io5{TRHCb!m@MmVNIpVw@nZ;Ctokr(X MCY>PneT1|BAA&f$WB>pF diff --git a/linux/dfu-util/dfu-suffix b/linux/dfu-util/dfu-suffix index d041af5b96ceae344a49b4e51b385dd43a61a857..c9cbce9845bf0dd5832f4f06552556e870bb1fd6 100755 GIT binary patch literal 47088 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 literal 31962 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 O@`v-{pz7nV|Nj6;vNtXO literal 115520 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 diff --git a/linux/dfu-util_x86_64/dfu-suffix b/linux/dfu-util_x86_64/dfu-suffix deleted file mode 100755 index c9cbce9845bf0dd5832f4f06552556e870bb1fd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47088 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 diff --git a/linux/dfu-util_x86_64/dfu-util b/linux/dfu-util_x86_64/dfu-util deleted file mode 100755 index d8bfd3424d6e169441d68f70f1a13de25d51bef9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151688 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 O@`v-{pz7nV|Nj6;vNtXO From a2dfbda7debd092e02dff9b35f20063fc80aaff5 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Mon, 25 Mar 2024 15:43:20 +0100 Subject: [PATCH 33/41] chore(dfu-util): shorten path Signed-off-by: Frederic Pillon --- dfu-util.sh | 4 ++-- linux/{dfu-util => }/dfu-prefix | Bin linux/{dfu-util => }/dfu-suffix | Bin linux/{dfu-util => }/dfu-util | Bin macosx/{dfu-util => }/dfu-prefix | Bin macosx/{dfu-util => }/dfu-suffix | Bin macosx/{dfu-util => }/dfu-util | Bin 7 files changed, 2 insertions(+), 2 deletions(-) rename linux/{dfu-util => }/dfu-prefix (100%) rename linux/{dfu-util => }/dfu-suffix (100%) rename linux/{dfu-util => }/dfu-util (100%) rename macosx/{dfu-util => }/dfu-prefix (100%) rename macosx/{dfu-util => }/dfu-suffix (100%) rename macosx/{dfu-util => }/dfu-util (100%) diff --git a/dfu-util.sh b/dfu-util.sh index 2469282fa..fcc74429f 100755 --- a/dfu-util.sh +++ b/dfu-util.sh @@ -9,10 +9,10 @@ UNAME_OS="$(uname -s)" case "${UNAME_OS}" in Linux*) # Choose dfu program by arch - DFU_UTIL=${DIR}/linux/dfu-util/dfu-util + DFU_UTIL=${DIR}/linux/dfu-util ;; Darwin*) - DFU_UTIL=${DIR}/macosx/dfu-util/dfu-util + DFU_UTIL=${DIR}/macosx/dfu-util if [ ! -x "${DFU_UTIL}" ]; then DFU_UTIL=/opt/local/bin/dfu-util fi diff --git a/linux/dfu-util/dfu-prefix b/linux/dfu-prefix similarity index 100% rename from linux/dfu-util/dfu-prefix rename to linux/dfu-prefix diff --git a/linux/dfu-util/dfu-suffix b/linux/dfu-suffix similarity index 100% rename from linux/dfu-util/dfu-suffix rename to linux/dfu-suffix diff --git a/linux/dfu-util/dfu-util b/linux/dfu-util similarity index 100% rename from linux/dfu-util/dfu-util rename to linux/dfu-util diff --git a/macosx/dfu-util/dfu-prefix b/macosx/dfu-prefix similarity index 100% rename from macosx/dfu-util/dfu-prefix rename to macosx/dfu-prefix diff --git a/macosx/dfu-util/dfu-suffix b/macosx/dfu-suffix similarity index 100% rename from macosx/dfu-util/dfu-suffix rename to macosx/dfu-suffix diff --git a/macosx/dfu-util/dfu-util b/macosx/dfu-util similarity index 100% rename from macosx/dfu-util/dfu-util rename to macosx/dfu-util From 354699b813b8dc668f750385fa1044cf81b122f6 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Thu, 27 Jun 2024 16:52:32 +0200 Subject: [PATCH 34/41] doc: update badge version Signed-off-by: Frederic Pillon --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4bb2fcdb9..bcaf6d2bc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Arduino_Tools [![GitHub release](https://img.shields.io/github/release/stm32duino/Arduino_Tools.svg)](https://github.com/stm32duino/Arduino_Tools/releases/latest) -[![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Tools/2.2.1.svg)](https://github.com/stm32duino/Arduino_Tools/compare/2.2.1...master) +[![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Tools/2.2.2.svg)](https://github.com/stm32duino/Arduino_Tools/compare/2.2.2...master) Contains upload tools for STM32 based boards and some other usefull scripts. From 8de264f850219658a742b235035da05784695d81 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Mon, 1 Jul 2024 15:36:57 +0200 Subject: [PATCH 35/41] fix(stm32CubeProg): fallback to BSD getopt for MacOS By default, MacOS uses getopt from FreeBSD and not the GNU-based one. Then "-o" and long options are not supported except if gnu-getopt is installed. Fixes #99 Signed-off-by: Frederic Pillon --- stm32CubeProg.sh | 119 ++++++++++++++++++++++++++++------------------- 1 file changed, 71 insertions(+), 48 deletions(-) diff --git a/stm32CubeProg.sh b/stm32CubeProg.sh index 403d1a425..56ac9921b 100644 --- a/stm32CubeProg.sh +++ b/stm32CubeProg.sh @@ -2,6 +2,8 @@ set -o nounset # Treat unset variables as an error # set -o xtrace # Print command traces before executing command. +UNAME_OS="$(uname -s)" +GNU_GETOPT= STM32CP_CLI= INTERFACE= PORT= @@ -53,11 +55,73 @@ aborting() { exit 1 } +# Check STM32CubeProgrammer cli availability and getopt version +case "${UNAME_OS}" in + Linux*) + STM32CP_CLI=STM32_Programmer.sh + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + export PATH="$HOME/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin":"$PATH" + fi + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + export PATH="/opt/stm32cubeprog/bin":"$PATH" + fi + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + aborting + fi + ;; + Darwin*) + STM32CP_CLI=STM32_Programmer_CLI + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + export PATH="/Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/Contents/MacOs/bin":"$PATH" + fi + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + aborting + fi + if ! command -v /usr/local/opt/gnu-getopt/bin/getopt >/dev/null 2>&1; then + if ! command -v /opt/homebrew/opt/gnu-getopt/bin/getopt >/dev/null 2>&1; then + echo "Warning: long options not supported due to getopt from FreeBSD usage." + GNU_GETOPT=n + else + export PATH="/opt/homebrew/opt/gnu-getopt/bin":"$PATH" + fi + else + export PATH="/usr/local/opt/gnu-getopt/bin":"$PATH" + fi + ;; + Windows*) + STM32CP_CLI=STM32_Programmer_CLI.exe + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + if [ -n "${PROGRAMFILES+x}" ]; then + STM32CP86=${PROGRAMFILES}/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin + export PATH="${STM32CP86}":"$PATH" + fi + if [ -n "${PROGRAMW6432+x}" ]; then + STM32CP=${PROGRAMW6432}/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin + export PATH="${STM32CP}":"$PATH" + fi + if ! command -v $STM32CP_CLI >/dev/null 2>&1; then + aborting + fi + fi + ;; + *) + echo "Unknown host OS: ${UNAME_OS}." >&2 + exit 1 + ;; +esac + # parse command line arguments # options may be followed by one colon to indicate they have a required arg -if ! options=$(getopt -a -o hi:ef:o:c:r:d:v:p: --long help,interface:,erase,file:,offset:,com:,rts:,dtr:,vid:,pid: -- "$@"); then - echo "Terminating..." >&2 - exit 1 +if [ -n "${GNU_GETOPT}" ]; then + if ! options=$(getopt hi:ef:o:c:r:d:v:p: "$@"); then + echo "Terminating..." >&2 + exit 1 + fi +else + if ! options=$(getopt -a -o hi:ef:o:c:r:d:v:p: --long help,interface:,erase,file:,offset:,com:,rts:,dtr:,vid:,pid: -- "$@"); then + echo "Terminating..." >&2 + exit 1 + fi fi eval set -- "$options" @@ -109,53 +173,12 @@ while true; do shift break ;; + *) + echo "Unknown option $1" + usage 1 + ;; esac done -# Check STM32CubeProgrammer cli availability, fallback to dfu-util if protocol dfu -UNAME_OS="$(uname -s)" -case "${UNAME_OS}" in - Linux*) - STM32CP_CLI=STM32_Programmer.sh - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then - export PATH="$HOME/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin":"$PATH" - fi - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then - export PATH="/opt/stm32cubeprog/bin":"$PATH" - fi - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then - aborting - fi - ;; - Darwin*) - STM32CP_CLI=STM32_Programmer_CLI - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then - export PATH="/Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/Contents/MacOs/bin":"$PATH" - fi - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then - aborting - fi - ;; - Windows*) - STM32CP_CLI=STM32_Programmer_CLI.exe - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then - if [ -n "${PROGRAMFILES+x}" ]; then - STM32CP86=${PROGRAMFILES}/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin - export PATH="${STM32CP86}":"$PATH" - fi - if [ -n "${PROGRAMW6432+x}" ]; then - STM32CP=${PROGRAMW6432}/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin - export PATH="${STM32CP}":"$PATH" - fi - if ! command -v $STM32CP_CLI >/dev/null 2>&1; then - aborting - fi - fi - ;; - *) - echo "Unknown host OS: ${UNAME_OS}." >&2 - exit 1 - ;; -esac # Check mandatory options if [ -z "${INTERFACE}" ]; then From 74f9e5031b85256ad28c04962c6420a5acbf666d Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Thu, 18 Jul 2024 16:30:57 +0200 Subject: [PATCH 36/41] doc: update badge version to 2.2.3 Signed-off-by: Frederic Pillon --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bcaf6d2bc..1d9efc916 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Arduino_Tools [![GitHub release](https://img.shields.io/github/release/stm32duino/Arduino_Tools.svg)](https://github.com/stm32duino/Arduino_Tools/releases/latest) -[![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Tools/2.2.2.svg)](https://github.com/stm32duino/Arduino_Tools/compare/2.2.2...master) +[![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Tools/2.2.3.svg)](https://github.com/stm32duino/Arduino_Tools/compare/2.2.3...master) Contains upload tools for STM32 based boards and some other usefull scripts. From 4188be2de93b7d7b7b4d257390d899cb316ae1ca Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 10 Sep 2024 10:50:54 +0200 Subject: [PATCH 37/41] fix: remove unreachable command Signed-off-by: Frederic Pillon --- linux/massStorageCopy.sh | 5 ++--- macosx/massStorageCopy.sh | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/linux/massStorageCopy.sh b/linux/massStorageCopy.sh index 237befa8b..3528c2203 100755 --- a/linux/massStorageCopy.sh +++ b/linux/massStorageCopy.sh @@ -20,12 +20,11 @@ usage() { echo "## Note:" echo "## -I and -O are optionals and kept for backward compatibility." echo "############################################################" - exit 0 + exit "$1" } if [ $# -lt 2 ]; then - usage - exit 1 + usage 1 fi # Parsing options diff --git a/macosx/massStorageCopy.sh b/macosx/massStorageCopy.sh index 0f176d15b..3b58ebf9f 100755 --- a/macosx/massStorageCopy.sh +++ b/macosx/massStorageCopy.sh @@ -20,12 +20,11 @@ usage() { echo "## Note:" echo "## -I and -O are optionals and kept for backward compatibility." echo "############################################################" - exit 0 + exit "$1" } if [ $# -lt 2 ]; then - usage - exit 1 + usage 1 fi # Parsing options From 19becf28ba1471245147e235d434f1d174b53f1f Mon Sep 17 00:00:00 2001 From: James Young <17939249+jamesy0ung@users.noreply.github.com> Date: Thu, 18 Jul 2024 23:12:28 +1000 Subject: [PATCH 38/41] Update stm32CubeProg.sh Signed-off-by: James Young <17939249+jamesy0ung@users.noreply.github.com> --- stm32CubeProg.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/stm32CubeProg.sh b/stm32CubeProg.sh index 56ac9921b..5cba7d839 100644 --- a/stm32CubeProg.sh +++ b/stm32CubeProg.sh @@ -25,7 +25,7 @@ usage() { echo "Usage: $(basename "$0") [OPTIONS]... Mandatory options: - -i, --interface <'swd'/'dfu'/'serial'> interface identifier: 'swd', 'dfu' or 'serial' + -i, --interface <'swd'/'dfu'/'serial'/'jlink'> interface identifier: 'swd', 'dfu', 'serial' or 'jlink' -f, --file file path to be downloaded: bin or hex Optional options: -e, --erase erase all sectors before flashing @@ -224,6 +224,9 @@ case "${INTERFACE}" in fi ${STM32CP_CLI} --connect port="${PORT}" "${RTS}" "${DTR}" "${ERASE}" --quietMode --download "${FILEPATH}" "${ADDRESS}" --start "${ADDRESS}" ;; + jlink) + ${STM32CP_CLI} --connect port=JLINK ap=0 "${ERASE}" --quietMode --download "${FILEPATH}" "${ADDRESS}" --start "${ADDRESS}" + ;; *) echo "Protocol unknown!" >&2 usage 4 From e87c95fd5c12ca0bae9bce2316340b3046c60442 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Fri, 22 Nov 2024 11:17:06 +0100 Subject: [PATCH 39/41] doc: update badge version to 2.2.4 Signed-off-by: Frederic Pillon --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d9efc916..da74a54c9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Arduino_Tools [![GitHub release](https://img.shields.io/github/release/stm32duino/Arduino_Tools.svg)](https://github.com/stm32duino/Arduino_Tools/releases/latest) -[![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Tools/2.2.3.svg)](https://github.com/stm32duino/Arduino_Tools/compare/2.2.3...master) +[![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Tools/2.2.4.svg)](https://github.com/stm32duino/Arduino_Tools/compare/2.2.4...master) Contains upload tools for STM32 based boards and some other usefull scripts. From 492592d2cd825c8e8def17efcf902c28bc3e0437 Mon Sep 17 00:00:00 2001 From: Mark Mentovai Date: Wed, 22 Jan 2025 18:23:12 -0500 Subject: [PATCH 40/41] Make macOS executables universal, for both x86_64 and arm64 This provides a rebuild of all macOS executables. For reproducibility, this was done entirely by `build_mac.sh`. I verified that different machines produce bit-for-bit identical output. A build machine running Xcode 16.2 16C5032a on macOS 15.2 24C101 was used. These tools should run on macOS 10.13 and later. This version was selected as it's the minimum macOS version that the xPack tools declare support for. A build of libusb is included, so that the provided `dfu-util` no longer has an external dependency. The universal structure was chosen for these tools to avoid changing paths, anywhere they may be relied on. If desired, `build_mac.sh` can also be used to produce single-architecture tools, even cross-compiling, depending on the value of the `ARCH` variable. The current released versions were selected: - libusb 1.0.27 - dfu-util 0.11 (including dfu-prefix and dfu-suffix) - hid-flash from STM32_HID_Bootloader 2.2.2 (this program erroneously reports its version as 2.2.1), with a patch from https://github.com/Serasidis/STM32_HID_Bootloader/issues/68#issuecomment-2009105851. - upload_reset from this repository at the HEAD of main Link: https://github.com/stm32duino/BoardManagerFiles/issues/72 Signed-off-by: Mark Mentovai --- macosx/dfu-prefix | Bin 19604 -> 84112 bytes macosx/dfu-suffix | Bin 19596 -> 84128 bytes macosx/dfu-util | Bin 53172 -> 153968 bytes macosx/hid-flash | Bin 33232 -> 89088 bytes macosx/libusb-1.0.0.dylib | Bin 0 -> 248096 bytes macosx/upload_reset | Bin 9424 -> 67096 bytes src/build_mac.sh | 172 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 172 insertions(+) create mode 100644 macosx/libusb-1.0.0.dylib create mode 100755 src/build_mac.sh diff --git a/macosx/dfu-prefix b/macosx/dfu-prefix index fdd26711402fb9ccfd6fd8eced5cb676ae5f67f0..6bc5f32860f51a852fadc852c5c377ee805fcbf8 100755 GIT binary patch literal 84112 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 AXaE2J literal 19604 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 diff --git a/macosx/dfu-suffix b/macosx/dfu-suffix index 6d17d7e5efd2d76fce5c39672daa0ec18e0d1b5b..73eb3895f86539188cb5e5fd3deda5d5aaec3506 100755 GIT binary patch literal 84128 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 DQ+VL{ literal 19596 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 oKWr?*Mp)VbjoX`nZogo1(=)9msP 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⁢bfgEvDG4f8ShZ?>7g#hdqN_h9B0hYLOg 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%0AZh21hpAAo=>cuO{XVEr_N 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�$)K@p>kD~ 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 S!HR!%@Kq#Xw}9yRi~JuFwa~Nx diff --git a/macosx/hid-flash b/macosx/hid-flash index 8acc45772dc8c77a537e97664052744bc7d86fe3..ce32e672c14a2507dd4b05ff81cf69b0aef09912 100755 GIT binary patch literal 89088 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 EKg3of7ytkO literal 33232 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 Bp%nlC diff --git a/macosx/libusb-1.0.0.dylib b/macosx/libusb-1.0.0.dylib new file mode 100644 index 0000000000000000000000000000000000000000..352f17fd7fcfc97e601940d1779d2e18f18d9721 GIT binary patch literal 248096 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 literal 9424 zcmeHNYiwLc6`r-d#CbTjp(*8=Z6GB@Z4v}ZLx`evo9o`RCNYU4qKYtC+js3P`>=NJ z=B1{xx&d;#H7tmhR29N%1%xPod5FgRKu&_>Km{>TLH&^ms|saZhtw)jar0WfZ|>an z`kJJLKL}|@nmLa-^W8aT&P+BlK6Cl+*XIcls1>5WMhLMOwf|j0d|8CR3GqHu6IIIg zmivu|jICR!om~R6#eXXiX9YeWWrwk&W44JJ-!xk%w2ZllAS$M$ij=ms*VY1vAFsV0 z&Om>x&b6VeSyxdf`d!9trOepb&P-Y5$Gf`7#oMecJlPviukmK)M?BeU#rv!@jQn_Q z4KCg{H2`JCyGS;$OW?@4sWj47dmh6_XWHhDZ+3PWg z1YrEyH3H?E6)CM=8BIqLmTTpo-;~Cy*GWRTa(;en=E+O2m2zWCM@vO7@8bqw4r;uRX8>A>r?IO--vI19O%WKydQ7o9BJFM`9WjjChrUg`PLOO%a~pa`dNv!49C-I8ia(v))w`k zw}E;k6cXY%gqJjB{^I~uu{i#XT4F`h4IAk7mf*`;HWR?%0avtCQXX_J7Q)^oDxi>aH*z*08AB7H~6k^^2RT)FhpYDGg z^?zNw^YrcJLBH3c(nodX1ilL{FcS;JW81!rZ6#LTyApAUb)p;P4pjPI!1|Ehsb#KL zwfz4@;9+4pe>HRGr_B6;dUGJ#AX3xWF2^C)cHfvflWTRP>IDh2s=+jmA#p}u*-A~Oq+RQ zdYH+#`mD(jhsKKcz|1+}H2ewYNWS3=+T2^E?4nWQ0?{X~s80mHS}K(=qBx1k|M?&0_b`tkb6E8AOo4j-Y14sX)Hp&h zAKV1nVfHDne!u{nAozSetI6Jca5-&gZVqf8RCf8fcHt;aipJ+hFmr=&KoRzbXOukW zTqU5VAc)C%U8N8|&j+8uzg)u) z+jU{gWGcM+O=mQGDEm6X^0@JO@hqb4PX0D?AXvZ@8OGDljvANvoyneP-nbskO$&P= zzL`5+=NMCy^U0210hn zjY|*m`*Zzy0VnJY{i&Jty;mX8pJ{yHM*h^y_;XG9^CjZn$e(BRij=a9*V7vRa0UK5 z^~X7I)pW8`dE;tsI`C+{qP36Sx_SheyF=lgDYgQ4Vlf&dB=%#tp3b~*wNz3`(RlC` z#K+B+)6N;J_G`uK*GeTU*lUf?LsJ~N4(WIRDdzSUi$8|uc>5_V`lw@^FJ2=++58(c z&l^Q|@XuW+NX*YH`trtkaK9~&p?+ss|5NDm!Mm~5;K4ag`d8ppad+WU;EOL`Ar5@5 z%`VqoHPNek&}j}AksvH)<4;aN`9-jk%_<~M5)dwZ5-Mc9nYcQa+e64ENsdl|; zH>ftO+Iv;IQMIkAHC6k7YTH!18Lbd)10Q-Bp>Nq%TK;>`LNApQui|j&<-$XUOd(ca&TboDdny z-rBKk#hvRy9h%ftJ>JH)o%rr9!49tY|lh`tWdTuo{DteowfiUTA#7f zu}EBYTf1Xj)`rmfEq!(@l~kH|WFP*gArrB#bSh(YrIOv54GS8?CybU>7q2xEi(B0x zI~7XxS;>$K6>_0g!V>FN{=Mb>?jl8e1%I1-3Y7I4e}JHn=VB~^#Vz`mNEk8-p`de1 zVEj`pM(9lwtu_%xF2_0PJIwRzDSQ~I;81wO)Krme?kAh zGpcEyru#KLsOi@nz}0{?jgnwN>~_wE#;In2i@^%yQY@ji^l>(8ZE6hwM$b67_3<{q;J zq_C1waq=ekt~joBD6~WHjCO#JrMhfowF?5Tc4*WK9?#9u_$9l(zZy5c~Y2a zrtbBUNOMA(-vdDLNFowTif;ur?`TQ)h^GTqa(66^$J8GML`|X>j#*t<+rq1Ugn@~v zx8)??ynhzpMO3XAYeG|KMl;fkZ{x~MJRZRPnfN;XvZ8Pc^y5p=480efUE;aGZgB)1 zc;u=TN7xLpIet6dC!4~n$7;p`WBNXc@Qd*nz{fGF_};J>50xWY#x;qO$F z$B$zS`}b?PNz0FE*?U(!1Q~WTRi%KoQs%91rTiVA{G3ld>XV0jGT&A!@kV?yucs^f zU-Zd;@yUPl$rpVxFMjz>&j=$k#Jf@7gUWlzC8)QeA}Q3nDc{JsetauN3I8`^Lqhhc zzj%<*ZXr|gZre&H)ZcnYmE2vzrMvML12btX<=iZH_qN_8(%TVI?G&}6y)JAZX1WAr v-n*O5J2OCWTIh4aJt6ej;GPQJdElJ{ Date: Thu, 13 Mar 2025 15:38:18 +0100 Subject: [PATCH 41/41] doc: update badge version to 2.3.0 Signed-off-by: Frederic Pillon --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index da74a54c9..f9a252316 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Arduino_Tools [![GitHub release](https://img.shields.io/github/release/stm32duino/Arduino_Tools.svg)](https://github.com/stm32duino/Arduino_Tools/releases/latest) -[![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Tools/2.2.4.svg)](https://github.com/stm32duino/Arduino_Tools/compare/2.2.4...master) +[![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Tools/2.3.0.svg)](https://github.com/stm32duino/Arduino_Tools/compare/2.3.0...master) Contains upload tools for STM32 based boards and some other usefull scripts.