From f3f2f8cfb56d6d55402835cee1ede2619f9a1779 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 13 Nov 2017 17:37:21 +0100 Subject: [PATCH] =?UTF-8?q?foo=C5=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- autobuilder | 4 +- configutility/README.txt | 36 -- configutility/license/license.txt | 504 ------------------ cylib/libcyusbserial.so.1 | Bin 109320 -> 0 bytes docs/newmanual.md | 359 ++++--------- tinio/Makefile | 16 +- .../{3-3cs_decrypted.cyusbd => 3-3cs.cyusbd} | Bin .../{5-5_decrypted.cyusbd => 5-5.cyusbd} | Bin .../common => tinio}/header/CyUSBBootloader.h | 0 {cylib => tinio/header}/CyUSBCommon.h | 2 +- .../common => tinio}/header/CyUSBSerial.h | 0 {cylib => tinio/library}/90-cyusb.rules | 0 tinio/library/CyUSBCommon.h | 219 ++++++++ {cylib => tinio/library}/Makefile | 16 +- {cylib => tinio/library}/cyboot.c | 0 {cylib => tinio/library}/cyi2c.c | 0 {cylib => tinio/library}/cyjtag.c | 0 {cylib => tinio/library}/cymisc.c | 0 {cylib => tinio/library}/cyphdc.c | 0 {cylib => tinio/library}/cyspi.c | 0 {cylib => tinio/library}/cyuart.c | 0 {cylib => tinio/library}/cyusb.c | 0 tinio/library/libcyusbserial.so | 1 + tinio/library/libcyusbserial.so.1 | Bin 0 -> 100944 bytes {tool => tinio/testUtility}/90-cyusb.rules | 0 {tool => tinio/testUtility}/Command_Utility.c | 4 +- {tool => tinio/testUtility}/CyUSBBootloader.h | 0 {tool => tinio/testUtility}/CyUSBSerial.sh | 0 tinio/testUtility/CyUSBSerialCommandUtility | Bin 0 -> 26192 bytes {tool => tinio/testUtility}/Makefile | 8 +- tinio/tinio | Bin 18720 -> 18504 bytes tinio/tinio.cpp | 3 +- tool/CyUSBSerialCommandUtility | Bin 26424 -> 0 bytes tool/README.txt | 137 ----- tool/jbiexprt.h | 224 -------- tool/jbiport.h | 43 -- 36 files changed, 355 insertions(+), 1221 deletions(-) delete mode 100644 configutility/README.txt delete mode 100644 configutility/license/license.txt delete mode 100755 cylib/libcyusbserial.so.1 rename tinio/flash/{3-3cs_decrypted.cyusbd => 3-3cs.cyusbd} (100%) rename tinio/flash/{5-5_decrypted.cyusbd => 5-5.cyusbd} (100%) rename {configutility/common => tinio}/header/CyUSBBootloader.h (100%) rename {cylib => tinio/header}/CyUSBCommon.h (97%) rename {configutility/common => tinio}/header/CyUSBSerial.h (100%) rename {cylib => tinio/library}/90-cyusb.rules (100%) create mode 100644 tinio/library/CyUSBCommon.h rename {cylib => tinio/library}/Makefile (51%) rename {cylib => tinio/library}/cyboot.c (100%) rename {cylib => tinio/library}/cyi2c.c (100%) rename {cylib => tinio/library}/cyjtag.c (100%) rename {cylib => tinio/library}/cymisc.c (100%) rename {cylib => tinio/library}/cyphdc.c (100%) rename {cylib => tinio/library}/cyspi.c (100%) rename {cylib => tinio/library}/cyuart.c (100%) rename {cylib => tinio/library}/cyusb.c (100%) create mode 100644 tinio/library/libcyusbserial.so create mode 100644 tinio/library/libcyusbserial.so.1 rename {tool => tinio/testUtility}/90-cyusb.rules (100%) rename {tool => tinio/testUtility}/Command_Utility.c (96%) rename {tool => tinio/testUtility}/CyUSBBootloader.h (100%) rename {tool => tinio/testUtility}/CyUSBSerial.sh (100%) create mode 100755 tinio/testUtility/CyUSBSerialCommandUtility rename {tool => tinio/testUtility}/Makefile (50%) delete mode 100755 tool/CyUSBSerialCommandUtility delete mode 100644 tool/README.txt delete mode 100644 tool/jbiexprt.h delete mode 100644 tool/jbiport.h diff --git a/autobuilder b/autobuilder index 23893d7..01a5a86 100755 --- a/autobuilder +++ b/autobuilder @@ -29,7 +29,7 @@ echo " Verifying main directory..." proceed #error check echo " DONE!" echo " Entering the library directory..." -cd cylib && proceed=1 #cd to the lib dir +cd configutility/linux/cylib && proceed=1 #cd to the lib dir proceed #error check echo " DONE!" echo " Compiling and installing the library..." @@ -38,7 +38,7 @@ proceed echo " DONE!" echo " Library installation complete." echo " Going back..." -cd .. && proceed=1 #to main dir +cd ../../.. && proceed=1 #to main dir proceed echo " DONE!" echo " Entering the TinI/O build directory" diff --git a/configutility/README.txt b/configutility/README.txt deleted file mode 100644 index 96450c3..0000000 --- a/configutility/README.txt +++ /dev/null @@ -1,36 +0,0 @@ -======================================================================================== - Cypress Semiconductor Corporation - CyUSB Serial library. -========================================================================================= -Pre-requisite: -1. libusb-1.0.9 is required for compilation and functioning of the APIs in the library. -2. GNU Make and the GCC tool-chain are used for the build process. - -Installation steps: - -1.cd to the main directory where the library source files are extracted and goto ./linux/library - -2.Type 'sudo make'. - -2.This will generate shared library libcyusbserial.so.1 and its soft link libcyusbserial.so. - Both of them will be copied/installed to /usr/local/lib. - -3.Go to ./linux/testUtility (I2C/SPI test utility program) and type 'sudo make'. -This will generate CyUSBSerialTestUtility binary (Refer to README in testUtility folder). - -4.User can launch the application and test the communication with Cypress USB-Serial DVk in vendor mode. - -Changing USB device node permission: - -By default the USB device node created in linux do not have read/write permission -for normal user. In order to make the USB device node accessable, copy 90-cyusb.rules -which is inside the library folder of release package to /etc/udev/rules.d folder (Default VID mentioned is Cypress VID -which is 0x4B4, if VID is changed then update it in ATTR{idVendor} section of rules file). - -*** IMPORTANT: -Some distribution of linux have libusb (older version) as part of their package. Uninstall -the older version and update it with libusb-1.0.9. - -**Note: -Refer to ./common/doc/CyUSBSerial API documentation.pdf for description of all -the vendor mode APIs. The header file of the library is in ./common/header/CyUSBSerial.h. diff --git a/configutility/license/license.txt b/configutility/license/license.txt deleted file mode 100644 index 5faba9d..0000000 --- a/configutility/license/license.txt +++ /dev/null @@ -1,504 +0,0 @@ - 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! - - diff --git a/cylib/libcyusbserial.so.1 b/cylib/libcyusbserial.so.1 deleted file mode 100755 index 2490c93821358c52daa17b382f8a92e5521933c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109320 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 F{}2B-0=EDF diff --git a/docs/newmanual.md b/docs/newmanual.md index 17772d3..888d71b 100644 --- a/docs/newmanual.md +++ b/docs/newmanual.md @@ -13,7 +13,7 @@ Using TinI/O is free (as beer _and_ speech), because it's licensed under GNU Gen To start using TinI/O, make sure you have: - A computer running some sort of Linux that has: + A free USB port to use the board with - + installed libusb + + libusb 1.0 and its headers installed + 16 MB of free space (or 8 for the bare minimum) + A C and C++ compiler (preferably gcc and g++) @@ -23,255 +23,10 @@ To start using TinI/O, make sure you have: They can be obtained from Cypress, the manufacturer of the chip. The board I personally use and recommend is the [CY8CKIT-049-4xxx PSoC4 prototyping kit](http://www.cypress.com/documentation/development-kitsboards/psoc-4-cy8ckit-049-4xxx-prototyping-kits), but there are more of them out there, for example, the [CYUSBS234 USB-Serial (Single Channel) Development Kit](http://www.cypress.com/documentation/development-kitsboards/cyusbs234-usb-serial-single-channel-development-kit). # Building and installing TinI/O - -## The easy way -After you make sure that your computer complies with the system requirements (it probably does), you need to build and install TinI/O. The simplest way to do that is to run the `autobuilder` script in the project root (aka the folder you downloaded TinI/O source to) __as root__. The script will then start the build process and redirect any text from its underlying programs to the standard output. The output should look like this: - -``` -# ./autobuilder - -------------------------- - Autobuilder for TinI/O 0.1 - -------------------------- - Verifying main directory... - DONE! - Entering the library directory... - DONE! - Compiling and installing the library... -gcc -fPIC -g -Wall -o libcyusb.o -c cyusb.c -I ../../common/header -cyusb.c: In function ‘CyOpen’: -cyusb.c:556:1: warning: ‘rStatus’ may be used uninitialized in this function [-Wmaybe-uninitialized] - printf("rstatus6 %d", rStatus); - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -gcc -fPIC -g -Wall -o libcyuart.o -c cyuart.c -I ../../common/header -gcc -fPIC -g -Wall -o libcyi2c.o -c cyi2c.c -I ../../common/header -gcc -fPIC -g -Wall -o libcyspi.o -c cyspi.c -I ../../common/header -gcc -fPIC -g -Wall -o libcyphdc.o -c cyphdc.c -I ../../common/header -gcc -fPIC -g -Wall -o libcyjtag.o -c cyjtag.c -I ../../common/header -gcc -fPIC -g -Wall -o libcymisc.o -c cymisc.c -I ../../common/header -gcc -fPIC -g -Wall -o libcyboot.o -c cyboot.c -I ../../common/header -cyboot.c:72:0: warning: "CY_USB_SERIAL_TIMEOUT" redefined - #define CY_USB_SERIAL_TIMEOUT 0 - -In file included from cyboot.c:1:0: -CyUSBCommon.h:74:0: note: this is the location of the previous definition - #define CY_USB_SERIAL_TIMEOUT 5000 - -cyboot.c: In function ‘CyFlashConfigEnable’: -cyboot.c:634:21: warning: unused variable ‘ioTimeout’ [-Wunused-variable] - UINT32 rStatus, ioTimeout = CY_USB_SERIAL_TIMEOUT; - ^~~~~~~~~ -gcc -shared -g -Wl,-soname,libcyusbserial.so -o libcyusbserial.so.1 libcyusb.o libcyuart.o libcyi2c.o libcyspi.o libcyphdc.o libcyjtag.o libcymisc.o libcyboot.o -l usb-1.0 -cp libcyusbserial.so.1 /usr/local/lib -ln -sf /usr/local/lib/libcyusbserial.so.1 /usr/local/lib/libcyusbserial.so -ldconfig -rm -f libcyusb.o libcyuart.o libcyspi.o libcyi2c.o libcyphdc.o libcyjtag.o libcymisc.o libcyboot.o - DONE! - Library installation complete. - Going back... - DONE! - Entering the TinI/O build directory - DONE! - Compiling TinI/O -echo "Building tinio..." -Building tinio... -g++ -lcyusbserial tinio.cpp -o tinio -echo "done." -done. -echo "Installing tinio..." -Installing tinio... -cp tinio /usr/bin -echo "done." -done. - DONE! - Compiling the flasher tool -# gcc -g -o CyUSBSerialTestUtility Test_Utility.c -lcyusbserial -w -gcc -g -o CyUSBSerialCommandUtility Command_Utility.c -lcyusbserial -Command_Utility.c: In function ‘deviceHotPlug’: -Command_Utility.c:102:35: warning: passing argument 1 of ‘CyGetListofDevices’ from incompatible pointer type [-Wincompatible-pointer-types] - rStatus = CyGetListofDevices (&numDevices); - ^ -In file included from Command_Utility.c:33:0: -../../common/header/CyUSBSerial.h:705:30: note: expected ‘UINT8 * {aka unsigned char *}’ but argument is of type ‘int *’ - CYWINEXPORT CY_RETURN_STATUS CyGetListofDevices ( - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c:105:16: warning: ‘return’ with a value, in function returning void - return rStatus; - ^~~~~~~ -Command_Utility.c:95:6: note: declared here - void deviceHotPlug () { - ^~~~~~~~~~~~~ -Command_Utility.c:107:5: warning: implicit declaration of function ‘printListOfDevices’ [-Wimplicit-function-declaration] - printListOfDevices (false); - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c: In function ‘main’: -Command_Utility.c:139:35: warning: passing argument 1 of ‘CyGetListofDevices’ from incompatible pointer type [-Wincompatible-pointer-types] - rStatus = CyGetListofDevices (&numDevices); - ^ -In file included from Command_Utility.c:33:0: -../../common/header/CyUSBSerial.h:705:30: note: expected ‘UINT8 * {aka unsigned char *}’ but argument is of type ‘int *’ - CYWINEXPORT CY_RETURN_STATUS CyGetListofDevices ( - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c:268:51: warning: passing argument 2 of ‘CyReadDeviceConfig’ from incompatible pointer type [-Wincompatible-pointer-types] - rStatus=CyReadDeviceConfig(handle,&read_buffer); - ^ -In file included from Command_Utility.c:34:0: -../../common/header/CyUSBBootloader.h:203:45: note: expected ‘UCHAR * {aka unsigned char *}’ but argument is of type ‘unsigned char (*)[512]’ - CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyReadDeviceConfig ( - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c: At top level: -Command_Utility.c:382:6: warning: conflicting types for ‘printListOfDevices’ - void printListOfDevices (bool isPrint) - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c:107:5: note: previous implicit declaration of ‘printListOfDevices’ was here - printListOfDevices (false); - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c: In function ‘printListOfDevices’: -Command_Utility.c:396:25: warning: passing argument 1 of ‘CyGetListofDevices’ from incompatible pointer type [-Wincompatible-pointer-types] - CyGetListofDevices (&numDevices); - ^ -In file included from Command_Utility.c:33:0: -../../common/header/CyUSBSerial.h:705:30: note: expected ‘UINT8 * {aka unsigned char *}’ but argument is of type ‘int *’ - CYWINEXPORT CY_RETURN_STATUS CyGetListofDevices ( - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c:445:75: warning: backslash and newline separated by space - printf ("%d |%x |%x | %d | %s\n", \ - -cp 90-cyusb.rules /etc/udev/rules.d -cp CyUSBSerialCommandUtility /usr/bin/cy-config -cp CyUSBSerial.sh /usr/bin -chmod 777 /usr/bin/CyUSBSerial.sh - DONE! - - - -The TinI/O installation is completed. - -``` - -If a part of the installation process fails, the script will abort the installation and print out: `Error! The last action autobuild tried to perform failed.` In such case, try also the manual installation described below. If your installation completes succesfully, proceed to the next chapter. - -## The hard way - -In case the automated installation fails, or if you specifically want to build TinI/O manually, you can build TinI/O, the library for it, the flasher tool and the flash files with Makefiles. The order of installation is important: the library must be built first, because TinI/O and the flasher depend on it. - -To build the library, go to the `cylib` directory and run `make`. The output will contain some warnings, which should be ignored. The output should look like this: - ``` - make - gcc -fPIC -g -Wall -o libcyusb.o -c cyusb.c -I ../../common/header - cyusb.c: In function ‘CyOpen’: - cyusb.c:556:1: warning: ‘rStatus’ may be used uninitialized in this function [-Wmaybe-uninitialized] - printf("rstatus6 %d", rStatus); - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - gcc -fPIC -g -Wall -o libcyuart.o -c cyuart.c -I ../../common/header - gcc -fPIC -g -Wall -o libcyi2c.o -c cyi2c.c -I ../../common/header - gcc -fPIC -g -Wall -o libcyspi.o -c cyspi.c -I ../../common/header - gcc -fPIC -g -Wall -o libcyphdc.o -c cyphdc.c -I ../../common/header - gcc -fPIC -g -Wall -o libcyjtag.o -c cyjtag.c -I ../../common/header - gcc -fPIC -g -Wall -o libcymisc.o -c cymisc.c -I ../../common/header - gcc -fPIC -g -Wall -o libcyboot.o -c cyboot.c -I ../../common/header - cyboot.c:72:0: warning: "CY_USB_SERIAL_TIMEOUT" redefined - #define CY_USB_SERIAL_TIMEOUT 0 - - In file included from cyboot.c:1:0: - CyUSBCommon.h:74:0: note: this is the location of the previous definition - #define CY_USB_SERIAL_TIMEOUT 5000 - - cyboot.c: In function ‘CyFlashConfigEnable’: - cyboot.c:634:21: warning: unused variable ‘ioTimeout’ [-Wunused-variable] - UINT32 rStatus, ioTimeout = CY_USB_SERIAL_TIMEOUT; - ^~~~~~~~~ - gcc -shared -g -Wl,-soname,libcyusbserial.so -o libcyusbserial.so.1 libcyusb.o libcyuart.o libcyi2c.o libcyspi.o libcyphdc.o libcyjtag.o libcymisc.o libcyboot.o -l usb-1.0 - cp libcyusbserial.so.1 /usr/local/lib - ln -sf /usr/local/lib/libcyusbserial.so.1 /usr/local/lib/libcyusbserial.so - ldconfig - rm -f libcyusb.o libcyuart.o libcyspi.o libcyi2c.o libcyphdc.o libcyjtag.o libcymisc.o libcyboot.o - ``` - -If the library builds succesfully, build the flasher tool next by going into the `tool` directory in the project root and running `make`. Again, the output will contain some warnings and notes that are tobe ignored. -The output should look like this: - -``` -make -# gcc -g -o CyUSBSerialTestUtility Test_Utility.c -lcyusbserial -w -gcc -g -o CyUSBSerialCommandUtility Command_Utility.c -lcyusbserial -Command_Utility.c: In function ‘deviceHotPlug’: -Command_Utility.c:102:35: warning: passing argument 1 of ‘CyGetListofDevices’ from incompatible pointer type [-Wincompatible-pointer-types] - rStatus = CyGetListofDevices (&numDevices); - ^ -In file included from Command_Utility.c:33:0: -../../common/header/CyUSBSerial.h:705:30: note: expected ‘UINT8 * {aka unsigned char *}’ but argument is of type ‘int *’ - CYWINEXPORT CY_RETURN_STATUS CyGetListofDevices ( - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c:105:16: warning: ‘return’ with a value, in function returning void - return rStatus; - ^~~~~~~ -Command_Utility.c:95:6: note: declared here - void deviceHotPlug () { - ^~~~~~~~~~~~~ -Command_Utility.c:107:5: warning: implicit declaration of function ‘printListOfDevices’ [-Wimplicit-function-declaration] - printListOfDevices (false); - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c: In function ‘main’: -Command_Utility.c:139:35: warning: passing argument 1 of ‘CyGetListofDevices’ from incompatible pointer type [-Wincompatible-pointer-types] - rStatus = CyGetListofDevices (&numDevices); - ^ -In file included from Command_Utility.c:33:0: -../../common/header/CyUSBSerial.h:705:30: note: expected ‘UINT8 * {aka unsigned char *}’ but argument is of type ‘int *’ - CYWINEXPORT CY_RETURN_STATUS CyGetListofDevices ( - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c:268:51: warning: passing argument 2 of ‘CyReadDeviceConfig’ from incompatible pointer type [-Wincompatible-pointer-types] - rStatus=CyReadDeviceConfig(handle,&read_buffer); - ^ -In file included from Command_Utility.c:34:0: -../../common/header/CyUSBBootloader.h:203:45: note: expected ‘UCHAR * {aka unsigned char *}’ but argument is of type ‘unsigned char (*)[512]’ - CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyReadDeviceConfig ( - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c: At top level: -Command_Utility.c:382:6: warning: conflicting types for ‘printListOfDevices’ - void printListOfDevices (bool isPrint) - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c:107:5: note: previous implicit declaration of ‘printListOfDevices’ was here - printListOfDevices (false); - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c: In function ‘printListOfDevices’: -Command_Utility.c:396:25: warning: passing argument 1 of ‘CyGetListofDevices’ from incompatible pointer type [-Wincompatible-pointer-types] - CyGetListofDevices (&numDevices); - ^ -In file included from Command_Utility.c:33:0: -../../common/header/CyUSBSerial.h:705:30: note: expected ‘UINT8 * {aka unsigned char *}’ but argument is of type ‘int *’ - CYWINEXPORT CY_RETURN_STATUS CyGetListofDevices ( - ^~~~~~~~~~~~~~~~~~ -Command_Utility.c:445:75: warning: backslash and newline separated by space - printf ("%d |%x |%x | %d | %s\n", \ - -cp 90-cyusb.rules /etc/udev/rules.d -cp CyUSBSerialCommandUtility /usr/bin/cy-config -cp CyUSBSerial.sh /usr/bin -chmod 777 /usr/bin/CyUSBSerial.sh -``` - -After the succesful installation of the flasher tool, install TinI/O by going into the `tinio` directory in the project root and running `make && make install`. The output should look like this: - -``` -make && make install -echo "Building tinio..." -Building tinio... -g++ -lcyusbserial tinio.cpp -o tinio -echo "done." -done. -echo "Installing tinio..." -Installing tinio... -mkdir -p /usr/share/tinio -cp -r flash /usr/share/tinio -cp tinio /usr/bin -echo "done." -done. -``` - -If TinI/O installs succesfully, the installation is completed. Proceed to the next chapter. +Installing TinI/O is very easy - just `cd` inside the `tinio` directory and run `make`. When the installation completes, run `make install`. With everything installed, proceed to the next chapter. # Flashing the board -Before you use your board with TinI/O, you must program its chip with a custom flash that will make the board compatible with TinI/O. The flash files are located in the `/usr/share/tinio/flash` directory and can be flashed to the board with the installed `cy-config` utility. There are 2 flash files with slightly different pin configurations: `5-5.cyusbd` and `3-3cs.cyusbd`. The 5-5 file sets half (5) of the GPIO pins as outputs and the other half as inputs. The 3-3cs sets 3 of the pins as outputs and 4 as inputs and 1 pin as a CapSense capacitive touch button and 1 as its output. See the table for the exact pin configuration: +Before you use your board with TinI/O, you must program its chip with a custom flash file that will make the board compatible with TinI/O. The flash files are located in the `/usr/share/tinio/flash` directory and can be flashed to the board with the installed `cy-config` utility. There are 2 flash files with slightly different pin configurations: `5-5.cyusbd` and `3-3cs.cyusbd`. The 5-5 file sets half (5) of the GPIO pins as outputs and the other half as inputs. The 3-3cs sets 3 of the pins as outputs and 4 as inputs and 1 pin as a CapSense capacitive touch button and 1 as its output. See the table for the exact pin configuration: | GPIO Pin | 5-5 config | 3-3cs config | | --- | --- | --- | @@ -288,4 +43,110 @@ Before you use your board with TinI/O, you must program its chip with a custom f | 10 | Output | Output | | 11 | Output | Input | -To flash a configuration file +After you've decided which configuration you'll use, run the configuration utility with the path of the flash file as an argument , e.g.:`cy-config /usr/share/tinio/flash/5-5.cyusbd`. +A menu will appear: +``` + +--------------------------------------------------------------------------------- +Device Number | VID | PID | INTERFACE NUMBER | FUNCTIONALITY +--------------------------------------------------------------------------------- +0 |1d6b |2 | 0 | NA +1 |413c |3016 | 0 | NA +2 |461 |10 | 0 | NA +2 |461 |10 | 1 | NA +3 |1d6b |1 | 0 | NA +4 |8bb |2902 | 0 | NA +4 |8bb |2902 | 1 | NA +4 |8bb |2902 | 2 | NA +4 |8bb |2902 | 3 | NA +5 |4b4 |4 | 0 | NA +5 |4b4 |4 | 1 | NA +6 |1d6b |1 | 0 | NA +7 |1d6b |1 | 0 | NA +8 |1d6b |2 | 0 | NA +9 |1d6b |1 | 0 | NA +10 |1d6b |1 | 0 | NA +--------------------------------------------------------------------------------- + +Cydevices 11------------------------------------------------------------------- +1: Print list of devices +2: Select device...No device selected !! +``` +At this point, you want to look for the device `4b4` in the VID column. Find its device number. In the example above, the device we're looking for has the device number 5. Select the `Select Device` option in the menu by entering `2`. +``` +2 +Enter Device number to be selected.. +``` +Enter the device number you remembered in the previous step. +``` +5 +Enter interface number.. +``` +Enter __the device's highest interface number in the table__. In the example it's 1, but it can also be 2. + +``` +1 + + File opened successfully + + Bytes successfully read + Programming Flash is done + File stream closed +------------------------------------------------------------------- +1: Print list of devices +2: Change device selection--selected device: [Device number 5] : [Interface No 1] : NA +^C +``` +This is how a successful flashing output should look like. If it doesn't: ++ If it gives you a fopen() error, the file you tried to flash doesn't exist or (rarely happens, but still) has a too long path. Find the file or move it to a less obscure folder. ++ Make sure you used a right device and file ++ Try running the utility as root + +## Creating your own configs +If you want to program your device your own way, you can do it with Cypress' [USB-Serial Configuration Utility](http://www.cypress.com/documentation/software-and-drivers/usb-serial-software-development-kit). However, you must follow some guidelines to make your configuration TinI/O compatible. + +The device must be configured to: ++ PHDC Interface ++ UID and VID left default ++ SCB: UART 2-pin + +# Using TinI/O +TinI/O is pretty simple to use. To see a quick usage reminder, run `tinio` in the terminal, but here's a more extensive +## Usage + +| __Option__ | __Action__ | +|------------|------------| +| -d | Sets the device number. 0 if left out. Up to 15 devices. | +| -i | Sets the interface number. 0 if left out. 0-255. | +| -s | Sets the specified pin's value to the value specified with the -v option. 0-11. | +| -r | Reads the pin's value and outputs it to the stdout. 0-11. | +| -v | Specifies the output value. Either 0 or 1, other numbers default to 1. | +| -e | Enables expert mode. The expert mode enables you to write to reserved pins (5&6) and shouldn't be enabled unless you know what you're doing. | + +## Practical examples +The two basic functions of TinI/O are reading and writing to I/O on a single device: +- To read, run `tinio -r` with replaced with the desired pin. The result will be printed to the stdout, followed by a newline. +- To set, run `tinio -s -v` with replaced with the desired pin and replaced with the value you want to write. + +TinI/O is capable of handling up to 16 devices at once with the `-d` option, but there isn't a reliable way of identifying them. The best way to ensure the correct device order is to look at the device tree with `lsusb` and check which device comes first - it will have the first device number (0). + +- To read from a specific device number, run `tinio -r -d` and replace with the pin number and with the device number. +- To write to a specific device run `tinio -s -v -d` and replace with the pin number, with the value and with the device number. + +## Using TinI/O in your projects ++ As the TinI/O target chip (CY7C65211) isn't a microcontroller, it can't operate without a computer connected to it. ++ It can't do PWM. ++ Its I/O has 3.3V LVTTL logic level, and it's __not__ 5V compatible. ++ Its maximum output current is comparable to Arduino's at 25 mA. ++ When using CapSense, decouple the reserved 0 pin to the ground with a 2.2 nF capacitor and don't use it. + +# Copyright, Links, ... +[Cypress' website](http://cypress.com) +[CY7C65211 Datasheet](http://http://www.cypress.com/file/139886/download) +[TinI/O Github](http://github.com/kristjan-komlosi/tinio) +[My Youtube channel - You may expect some videos of TinI/O there](https://www.youtube.com/channel/UCmcIwYA2I2YkmQs7xgMU-DA) + +## __Copyright disclaimer__ +No copyright infringement was intended to be made with this document or the TinI/O project. All of trademarks stated in this document are property of their owners. + +This document is licensed under the GNU FDL License. diff --git a/tinio/Makefile b/tinio/Makefile index 45b4fcc..ced688d 100644 --- a/tinio/Makefile +++ b/tinio/Makefile @@ -1,12 +1,14 @@ -CC=g++ -tinio: - echo "Building tinio..." - $(CC) -lcyusbserial tinio.cpp -o tinio - echo "done." +all: library utility tinio + +library: + cd library && make + +utility: library + cd testUtility && make +tinio: library + g++ -lcyusbserial tinio.cpp -o tinio install: - echo "Installing tinio..." mkdir -p /usr/share/tinio cp -r flash /usr/share/tinio cp tinio /usr/bin - echo "done." diff --git a/tinio/flash/3-3cs_decrypted.cyusbd b/tinio/flash/3-3cs.cyusbd similarity index 100% rename from tinio/flash/3-3cs_decrypted.cyusbd rename to tinio/flash/3-3cs.cyusbd diff --git a/tinio/flash/5-5_decrypted.cyusbd b/tinio/flash/5-5.cyusbd similarity index 100% rename from tinio/flash/5-5_decrypted.cyusbd rename to tinio/flash/5-5.cyusbd diff --git a/configutility/common/header/CyUSBBootloader.h b/tinio/header/CyUSBBootloader.h similarity index 100% rename from configutility/common/header/CyUSBBootloader.h rename to tinio/header/CyUSBBootloader.h diff --git a/cylib/CyUSBCommon.h b/tinio/header/CyUSBCommon.h similarity index 97% rename from cylib/CyUSBCommon.h rename to tinio/header/CyUSBCommon.h index 211b632..3da6aa9 100644 --- a/cylib/CyUSBCommon.h +++ b/tinio/header/CyUSBCommon.h @@ -26,7 +26,7 @@ #include #include #include -#include "../../common/header/CyUSBSerial.h" +#include "../header/CyUSBSerial.h" #pragma pack(1) typedef struct CY_DEVICE { diff --git a/configutility/common/header/CyUSBSerial.h b/tinio/header/CyUSBSerial.h similarity index 100% rename from configutility/common/header/CyUSBSerial.h rename to tinio/header/CyUSBSerial.h diff --git a/cylib/90-cyusb.rules b/tinio/library/90-cyusb.rules similarity index 100% rename from cylib/90-cyusb.rules rename to tinio/library/90-cyusb.rules diff --git a/tinio/library/CyUSBCommon.h b/tinio/library/CyUSBCommon.h new file mode 100644 index 0000000..3da6aa9 --- /dev/null +++ b/tinio/library/CyUSBCommon.h @@ -0,0 +1,219 @@ +/* + * Common header file of Cypress USB Serial + * Copyright (C) 2013 Cypress Semiconductor + * + * 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 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../header/CyUSBSerial.h" +#pragma pack(1) +typedef struct CY_DEVICE { + + unsigned char inEndpoint; + unsigned char outEndpoint; + unsigned char interruptEndpoint; + unsigned char interfaceNum; + bool i2cCancelEvent; + bool spiCancelEvent; + bool uartCancelEvent; + bool rtsValue; + bool dtrValue; + unsigned short numEndpoints; + CY_FLOW_CONTROL_MODES uartFlowControlMode; + struct libusb_transfer *spiTransfer; + struct libusb_transfer *uartTransfer; + libusb_device_handle *devHandle; + pthread_t spiThreadId; + pthread_t uartThreadId; + pthread_mutex_t readLock; + pthread_mutex_t writeLock; + pthread_mutex_t notificationLock; + CY_DEVICE_TYPE deviceType; + +}CY_DEVICE,*PCY_DEVICE; +#pragma pack() + +CY_RETURN_STATUS CyResetPipe (CY_HANDLE handl, UINT8); +#define CY_DEBUG_PRINT_INFO(...) //User need to enable this +#define CY_DEBUG_PRINT_ERROR(...) //printf +#define DUMP_DATA 1 +#ifdef DUMP_DATA +#define CY_DUMP_DATA(INPUT,LEN)\ +{\ + int i = 0, len = LEN;\ + while ((len)) {\ + printf ("%x ", (INPUT)[i++]);\ + len--;\ + }\ + printf ("\n");\ +} +#else +#define CY_DUMP_DATA (INPUT, LEN) do { }while (0); +#endif +#define CY_USB_SERIAL_TIMEOUT 5000 +#define CY_EVENT_NOTIFICATION_TIMEOUT 0 //This will make the transfer infinite + +#define CY_VENDOR_REQUEST_DEVICE_TO_HOST 0xC0 +#define CY_VENDOR_REQUEST_HOST_TO_DEVICE 0x40 + +#define CY_CLASS_INTERFACE_REQUEST_DEVICE_TO_HOST 0XA1 +#define CY_CLASS_INTERFACE_REQUEST_HOST_TO_DEVICE 0x21 +//I2C related macros +#define CY_SCB_INDEX_POS 15 +#define CY_I2C_CONFIG_LENGTH 16 +#define CY_I2C_WRITE_COMMAND_POS 3 +#define CY_I2C_WRITE_COMMAND_LEN_POS 4 +#define CY_I2C_GET_STATUS_LEN 3 +#define CY_I2C_MODE_WRITE 1 +#define CY_I2C_MODE_READ 0 +#define CY_I2C_ERROR_BIT (1) +#define CY_I2C_ARBITRATION_ERROR_BIT (1 << 1) +#define CY_I2C_NAK_ERROR_BIT (1 << 2) +#define CY_I2C_BUS_ERROR_BIT (1 << 3) +#define CY_I2C_STOP_BIT_ERROR (1 << 4) +#define CY_I2C_BUS_BUSY_ERROR (1 << 5) +#define CY_I2C_ENABLE_PRECISE_TIMING 1 +#define CY_I2C_EVENT_NOTIFICATION_LEN 3 +//SPI related Macros +#define CY_SPI_CONFIG_LEN 16 +#define CY_SPI_EVENT_NOTIFICATION_LEN 2 +#define CY_SPI_READ_BIT (1) +#define CY_SPI_WRITE_BIT (1 << 1) +#define CY_SPI_SCB_INDEX_BIT (1 << 15) +#define CY_SPI_GET_STATUS_LEN 4 +#define CY_SPI_UNDERFLOW_ERROR (1) +#define CY_SPI_BUS_ERROR (1 << 1) +//Vendor UART related macros +#define CY_UART_SET_FLOW_CONTROL_CMD 0x60 +#define CY_UART_SEND_BREAK_CMD 0x17 +#define CY_UART_CONFIG_LEN 16 +#define CY_SET_LINE_CONTROL_STATE_CMD 0x22 +#define CY_UART_EVENT_NOTIFICATION_LEN 10 + +#define CY_UART_SERIAL_STATE_CARRIER_DETECT 1 +#define CY_UART_SERIAL_STATE_TRANSMISSION_CARRIER (1 << 1) +#define CY_UART_SERIAL_STATE_BREAK_DETECTION (1<< 2) +#define CY_UART_SERIAL_STATE_RING_SIGNAL_DETECTION (1 << 3) +#define CY_UART_SERIAL_STATE_FRAMING_ERROR (1 << 4) +#define CY_UART_SERIAL_STATE_PARITY_ERROR (1 << 5) +#define CY_UART_SERIAL_STATUE_OVERRUN (1 << 6) +//Bootloader related macros +#define CY_BOOT_CONFIG_SIZE 64 +#define CY_DEVICE_CONFIG_SIZE 512 +#define CY_FIRMWARE_BREAKUP_SIZE 4096 +#define CY_GET_SILICON_ID_LEN 4 +#define CY_GET_FIRMWARE_VERSION_LEN 8 +#define CY_GET_SIGNATURE_LEN 4 +//PHDC related macros +#define CY_PHDC_SET_FEATURE 0X03 +#define CY_PHDC_CLR_FEATURE 0X01 +#define CY_PHDC_GET_DATA_STATUS 0x00 + +typedef enum CY_VENDOR_CMDS +{ + CY_GET_VERSION_CMD = 0xB0, /* Get the version of the boot-loader. + value = 0, index = 0, length = 4; + data_in = 32 bit version. */ + + CY_GET_SIGNATURE_CMD = 0xBD, /*Get the signature of the firmware + It is suppose to be 'CYUS' for normal firmware + and 'CYBL' for Bootloader.*/ + CY_UART_GET_CONFIG_CMD = 0xC0, /* Retreive the 16 byte UART configuration information. + MS bit of value indicates the SCB index. + length = 16, data_in = 16 byte configuration. */ + CY_UART_SET_CONFIG_CMD, /* Update the 16 byte UART configuration information. + MS bit of value indicates the SCB index. + length = 16, data_out = 16 byte configuration information. */ + CY_SPI_GET_CONFIG_CMD, /* Retreive the 16 byte SPI configuration information. + MS bit of value indicates the SCB index. + length = 16, data_in = 16 byte configuration. */ + CY_SPI_SET_CONFIG_CMD, /* Update the 16 byte SPI configuration information. + MS bit of value indicates the SCB index. + length = 16, data_out = 16 byte configuration information. */ + CY_I2C_GET_CONFIG_CMD, /* Retreive the 16 byte I2C configuration information. + MS bit of value indicates the SCB index. + length = 16, data_in = 16 byte configuration. */ + CY_I2C_SET_CONFIG_CMD = 0xC5, /* Update the 16 byte I2C configuration information. + MS bit of value indicates the SCB index. + length = 16, data_out = 16 byte configuration information. */ + CY_I2C_WRITE_CMD, /* Perform I2C write operation. + value = bit0 - start, bit1 - stop, bit3 - start on idle, + bits[14:8] - slave address, bit15 - scbIndex. length = 0. The + data is provided over the bulk endpoints. */ + CY_I2C_READ_CMD, /* Perform I2C read operation. + value = bit0 - start, bit1 - stop, bit2 - Nak last byte, + bit3 - start on idle, bits[14:8] - slave address, bit15 - scbIndex, + length = 0. The data is provided over the bulk endpoints. */ + CY_I2C_GET_STATUS_CMD, /* Retreive the I2C bus status. + value = bit0 - 0: TX 1: RX, bit15 - scbIndex, length = 3, + data_in = byte0: bit0 - flag, bit1 - bus_state, bit2 - SDA state, + bit3 - TX underflow, bit4 - arbitration error, bit5 - NAK + bit6 - bus error, + byte[2:1] Data count remaining. */ + CY_I2C_RESET_CMD, /* The command cleans up the I2C state machine and frees the bus. + value = bit0 - 0: TX path, 1: RX path; bit15 - scbIndex, + length = 0. */ + CY_SPI_READ_WRITE_CMD = 0xCA, /* The command starts a read / write operation at SPI. + value = bit 0 - RX enable, bit 1 - TX enable, bit 15 - scbIndex; + index = length of transfer. */ + CY_SPI_RESET_CMD, /* The command resets the SPI pipes and allows it to receive new + request. + value = bit 15 - scbIndex */ + CY_SPI_GET_STATUS_CMD, /* The command returns the current transfer status. The count will match + the TX pipe status at SPI end. For completion of read, read all data + at the USB end signifies the end of transfer. + value = bit 15 - scbIndex */ + CY_JTAG_ENABLE_CMD = 0xD0, /* Enable JTAG module */ + CY_JTAG_DISABLE_CMD, /* Disable JTAG module */ + CY_JTAG_READ_CMD, /* JTAG read vendor command */ + CY_JTAG_WRITE_CMD, /* JTAG write vendor command */ + CY_GPIO_GET_CONFIG_CMD = 0xD8, /* Get the GPIO configuration: */ + CY_GPIO_SET_CONFIG_CMD, /* Set the GPIO configuration */ + CY_GPIO_GET_VALUE_CMD, /* Get GPIO value: */ + CY_GPIO_SET_VALUE_CMD, /* Set the GPIO value:*/ + CY_PROG_USER_FLASH_CMD = 0xE0, /*Program user flash area. The total space available is 512 bytes. + This can be accessed by the user from USB. The flash area + address offset is from 0x0000 to 0x00200 and can be written to + page wise (128 byte).*/ + CY_READ_USER_FLASH_CMD, /*Read user flash area. The total space available is 512 bytes. + This can be accessed by the user from USB. The flash area + address offset is from 0x0000 to 0x00200 and can be written to + page wise (128 byte).*/ + CY_DEVICE_RESET_CMD = 0xE3, /*Performs a device reset from firmware*/ + +} CY_VENDOR_CMDS; + +//JTAG related Macros +#define CY_JTAG_OUT_EP 0x04 +#define CY_JTAG_IN_EP 0x85 + +//GPIO related Macros +#define CY_GPIO_GET_LEN 2 +#define CY_GPIO_SET_LEN 1 + +//PHDC related macros +#define CY_PHDC_GET_STATUS_LEN 2 +#define CY_PHDC_CLR_FEATURE_WVALUE 0x1 +#define CY_PHDC_SET_FEATURE_WVALUE 0x0101 + diff --git a/cylib/Makefile b/tinio/library/Makefile similarity index 51% rename from cylib/Makefile rename to tinio/library/Makefile index 4e67473..152f32d 100644 --- a/cylib/Makefile +++ b/tinio/library/Makefile @@ -1,12 +1,12 @@ all: - gcc -fPIC -g -Wall -o libcyusb.o -c cyusb.c -I ../../common/header - gcc -fPIC -g -Wall -o libcyuart.o -c cyuart.c -I ../../common/header - gcc -fPIC -g -Wall -o libcyi2c.o -c cyi2c.c -I ../../common/header - gcc -fPIC -g -Wall -o libcyspi.o -c cyspi.c -I ../../common/header - gcc -fPIC -g -Wall -o libcyphdc.o -c cyphdc.c -I ../../common/header - gcc -fPIC -g -Wall -o libcyjtag.o -c cyjtag.c -I ../../common/header - gcc -fPIC -g -Wall -o libcymisc.o -c cymisc.c -I ../../common/header - gcc -fPIC -g -Wall -o libcyboot.o -c cyboot.c -I ../../common/header + gcc -fPIC -g -Wall -o libcyusb.o -c cyusb.c -I ../header + gcc -fPIC -g -Wall -o libcyuart.o -c cyuart.c -I ../header + gcc -fPIC -g -Wall -o libcyi2c.o -c cyi2c.c -I ../header + gcc -fPIC -g -Wall -o libcyspi.o -c cyspi.c -I ../header + gcc -fPIC -g -Wall -o libcyphdc.o -c cyphdc.c -I ../header + gcc -fPIC -g -Wall -o libcyjtag.o -c cyjtag.c -I ../header + gcc -fPIC -g -Wall -o libcymisc.o -c cymisc.c -I ../header + gcc -fPIC -g -Wall -o libcyboot.o -c cyboot.c -I ../header gcc -shared -g -Wl,-soname,libcyusbserial.so -o libcyusbserial.so.1 libcyusb.o libcyuart.o libcyi2c.o libcyspi.o libcyphdc.o libcyjtag.o libcymisc.o libcyboot.o -l usb-1.0 cp libcyusbserial.so.1 /usr/local/lib diff --git a/cylib/cyboot.c b/tinio/library/cyboot.c similarity index 100% rename from cylib/cyboot.c rename to tinio/library/cyboot.c diff --git a/cylib/cyi2c.c b/tinio/library/cyi2c.c similarity index 100% rename from cylib/cyi2c.c rename to tinio/library/cyi2c.c diff --git a/cylib/cyjtag.c b/tinio/library/cyjtag.c similarity index 100% rename from cylib/cyjtag.c rename to tinio/library/cyjtag.c diff --git a/cylib/cymisc.c b/tinio/library/cymisc.c similarity index 100% rename from cylib/cymisc.c rename to tinio/library/cymisc.c diff --git a/cylib/cyphdc.c b/tinio/library/cyphdc.c similarity index 100% rename from cylib/cyphdc.c rename to tinio/library/cyphdc.c diff --git a/cylib/cyspi.c b/tinio/library/cyspi.c similarity index 100% rename from cylib/cyspi.c rename to tinio/library/cyspi.c diff --git a/cylib/cyuart.c b/tinio/library/cyuart.c similarity index 100% rename from cylib/cyuart.c rename to tinio/library/cyuart.c diff --git a/cylib/cyusb.c b/tinio/library/cyusb.c similarity index 100% rename from cylib/cyusb.c rename to tinio/library/cyusb.c diff --git a/tinio/library/libcyusbserial.so b/tinio/library/libcyusbserial.so new file mode 100644 index 0000000..09240c7 --- /dev/null +++ b/tinio/library/libcyusbserial.so @@ -0,0 +1 @@ +libcyusbserial.so.1 \ No newline at end of file diff --git a/tinio/library/libcyusbserial.so.1 b/tinio/library/libcyusbserial.so.1 new file mode 100644 index 0000000000000000000000000000000000000000..87599ba5ad6df788769081bd4d900c9c2099f019 GIT binary patch literal 100944 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

sQOqR?AJz@6R7mbv7u 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 literal 0 HcmV?d00001 diff --git a/tool/90-cyusb.rules b/tinio/testUtility/90-cyusb.rules similarity index 100% rename from tool/90-cyusb.rules rename to tinio/testUtility/90-cyusb.rules diff --git a/tool/Command_Utility.c b/tinio/testUtility/Command_Utility.c similarity index 96% rename from tool/Command_Utility.c rename to tinio/testUtility/Command_Utility.c index 01ef543..3749e02 100644 --- a/tool/Command_Utility.c +++ b/tinio/testUtility/Command_Utility.c @@ -30,8 +30,8 @@ #include #include -#include "../../common/header/CyUSBSerial.h" -#include "../../common/header/CyUSBBootloader.h" +#include "../header/CyUSBSerial.h" +#include "../header/CyUSBBootloader.h" #define CY_MAX_DEVICES 30 #define CY_MAX_INTERFACES 4 diff --git a/tool/CyUSBBootloader.h b/tinio/testUtility/CyUSBBootloader.h similarity index 100% rename from tool/CyUSBBootloader.h rename to tinio/testUtility/CyUSBBootloader.h diff --git a/tool/CyUSBSerial.sh b/tinio/testUtility/CyUSBSerial.sh similarity index 100% rename from tool/CyUSBSerial.sh rename to tinio/testUtility/CyUSBSerial.sh diff --git a/tinio/testUtility/CyUSBSerialCommandUtility b/tinio/testUtility/CyUSBSerialCommandUtility new file mode 100755 index 0000000000000000000000000000000000000000..053f41c17d3039ac833a77456906c225ec2ec311 GIT binary patch literal 26192 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 literal 0 HcmV?d00001 diff --git a/tool/Makefile b/tinio/testUtility/Makefile similarity index 50% rename from tool/Makefile rename to tinio/testUtility/Makefile index cd6af94..bd8da1f 100644 --- a/tool/Makefile +++ b/tinio/testUtility/Makefile @@ -1,12 +1,8 @@ all: # gcc -g -o CyUSBSerialTestUtility Test_Utility.c -lcyusbserial -w gcc -g -o CyUSBSerialCommandUtility Command_Utility.c -lcyusbserial - cp 90-cyusb.rules /etc/udev/rules.d + cp 90-cyusb.rules /etc/udev/rules.d cp CyUSBSerialCommandUtility /usr/bin/cy-config cp CyUSBSerial.sh /usr/bin chmod 777 /usr/bin/CyUSBSerial.sh -clean: - rm -f CyUSBSerialCommandUtility -help: - @echo 'make would compile and create the library and create a link' - @echo 'make clean would remove the library and the soft link to the library (soname)' + diff --git a/tinio/tinio b/tinio/tinio index 398a3f968c8c6e4c8ef65ddef9cdefa37e4a4d1e..6d1b8ff9b35ed9aecbdb3ed5159e933505d6acb3 100755 GIT binary patch literal 18504 zcmeHPe{@vUoxhW02tSjEVxyou6e_405)_CLFh60^21rAKNQ>iS<|XsWWM-WACL|o$ zrVU!A*;wlK2kq7#*3y;QAIEmPz*)C7E*jBR#kP3pk#4Eg?!;h=wPIQ+v!Cz%G4tjz z@$5OfXaC~DoA3R8@Avz?-}}Aad*6Ha-J4G}wX7|0xtL0YYz-qUHce1!Wx+9(0ba|h z*);rK%dTNlfV(*jKY8GURIT7t!Nv*!i*QvJ2!a#NlY9y)3kgzvlcj;{MTvrpX`DcE zWb45Sjsj{tqu@zt2U{n~l^l^t?ue8-BIOj+q@04PebhF(+GV*DHlmD@g2YRy^$jaX z`SST3y$GHXWTv2!`xxZN&i`pDlZW8IaqjSZrOT)p6un|f0RrFP_ zs915U$BcTG@phAb;$63)gV&_|r~xCJufRnyK;<`ehn{)==*@53(G)6u?9u1$E*N$B zsO&Oas^9iJt+`lH<20gOj%yCC`lb_Sp7`BE_Z=C2yX05*ZkhMPN8Xz~{)<1BplH%` z4kfeml>TiJdVCUk84SBFkDl*N!XKQ3{_rI9Gn3HYo`gOF_T+2VmnY#Ln1oKg)o?k} z{7LjL1*7I<2EJwzdKL7Pv2r$0nJd-E=~uCXRxbT+=$XxCusv#E0jE?g`JH--K);M# zmC>)nwm@b!D`i()$;Gojh~q$i!t6BlxZw{YfSIqkeZ4QJ$MtT*wDfrU`i5{cqPP1y z!#eZ%x_hD#pK1Bymd__x^D}lC5rg^gW3h(*7NaxnkM}p{U`>6zY@Kd3>b*ulZ;o_D zHygoLBM6C&F+BpXNw?O;jOb>6IH3atZx)5+rWFj_bQ6ub6%1%kCf6MZ_)Nm8h#nAh zohpnaER)6JM#So3-MSTxSqzsy-p%}06c+meeSRN|_lJ$0)Ls&o?d|a!5$4l_e#?)7 zPSX^0kRn00uBExY!MDt_%(I-FTY!J`D-vPZJkeb8Ujd-PUqeRCONpxu+<^*MvnbBY z*Q!5b)43RXT+YXeUMcB)GQJdD;U|}BT#)8UHFpx>w2eNCbBLdmjc%V<&f4guHvS14 zUA2XZRh-hji{>ts%B7vfAjqcjBF#ouo}+@rHag9bDplI(_WNVCjc&g`)Y|A&w@O|c zUHOj6T5WXsXuw6b*yz&roPLjuK7&)lPsm1}X`_1w&rJ0WxwqY*G4K5&Rzdo>ckt<{ zM_GD#CrIf^R5U2q%|~jd1)Ugp;er9_M&H;nekG z`#D}iIJsK2RC?!XI;+0>Sy4r^qdWl`E%*~Mk-nTDN$DoHLmU;(Qe+2@t4ED_Q4z0cs^wcag zIpxLAsCx-;7nw6ahP`tXD$yQd-!|3-4$38WogdtF-u0>CBg8ZAK0^Jt?I;zc+AgHi z_m7l*X=L|^wFb=?fM-%YAR<3Zc|Y>0nKrIsENxKmYC7vpj-tL3;Nw=N<`VOB+yxjD#5~k=p7V@lc-}kDjVZ%KmHIgN zpF|tesXFAyb5M6Jl@P9~9bSDqkvuk1uJRTX3j@9;l$*qV0r~vKSQ-9L3jXg9|BE6& zPWk_sRQ7B})+6}mV`fb~G%0@w#lp4=@AHN~O8lKd_IH%uoFl6xcbyq(I+JXo;F@0g z+4m7taH4nkiu)c^zXHILqoMNH5jLgK8`#s4oyT zMN~e+{9I7+T)|R57q*p9epKY=Q~uwGo6kQ71ot|k9w2HF2xAWl>PDhIDCC}}T0SH4 zuTs93xM_|W51@Cei8UaKgOtCMilCF3$qqH+jJgvGsw(_ zOzEMK+nUbr+D5&(5B>QJm7xna>txui1*M1GFDxLoW5mIG_oo~$DuAdr`KRQIFw%?K z0A9pk$gy?CVAFZm_!k`(pz6Paj={4oOhnU<&`=xu9I6G~$k3Oe<_=(8gA-G%SwOr3 zaVN@w+zzDl@CfR>7IktJ;~#%_qNSy#<}W&>XgYgK=AboS~Dg-v*Yk_3Hu=wtgOnur-cBC2YML5<7@~h%7V& zM@|Qv2yhDvyu%&u3o8dFxRnN!AUaA9HNB4>;PcqCnc=?_JX!mbyCyIpPLv)(Xjq!e zmi}a9FjYA?F-?WfOz&XRglqhS?N)(SzdE0+I}7VxqTJzQpdI71V=JH^!jDPeHki_tbUy(U4f_!QI=r;>f!|~10^ysS z&SMh8q3c=qUJw`?bw30sHNFm3Xxst{nX}npPA%vebFSs)bYz7e6~c3+@X>SJoJydm zeF*@}nbCU_ka?U&rc8knm@*9nGNl+$nsOIeeaQXpH8gQp^HY}#&ffqh&R+vc&ZXcS zbw5vpQTNkSKK7oAw_`65YR7{ZId-@9fu3o{X2j&Edzi$9TYn>jH%a05-{tKH0fp&) zfJ{5uIgQ$}hAZ&`ccD2ofS7vu%<%;4tW!27C$qKI;A%NU{Of3gL&OaE)ldw}7Gn-vH=Zoo1yEybK#b z80K_pL_KfBAaH7g38)(JGvp8#wIGo{*VxRt1!1}v^o%)ExH&Z>J?dTofJRjiCj9Yf zsDeMP0R{e8klMi6X9)IU!G2+`Vju57wa)>iYVZ9sc_A@v)P0H=#*0VYzd#21j}sU# z+B@#rn;oRj;~8BH(qr%NK{`fH4YtW1W_$&LFoT{T-vN8-0yv+feoMWMTAH?Oyelj^_aXi&P(g50bMjns@-WE9 zX;rVP=l7Q6n=Q$6jnI(3;*@vrsLOlXuM=<5yVb|H)qSFFTixAtzN34y?+fo7g_r1E zjK6&`ypv)$A(gQo6&11ekgj1tfYvfJTH4UM{6<(0dRUvzmqd(6x5wjQ8$Zh0jY#v- zO05zL5FMt!Td!dj1ftq1EH)U?h`EOAG83^_G;ZlZO_DW#9IQwc!Bs)NDxyUaJ)L@d zjaH$VF+E^(8M>)iup_9OMjVootpWyFdbb|Oo3j5Vdbl&qIVUyiTo*y>x#y;3R8B#MIyo~ z*rlULkI*8Rsp)+&J#J||(V(s^Rz!a=Xi(Ss!{h*SiI8lH$D{EYts}BM65SC|wP3j^ z(W6ITVTE?XBJ&2#Z>ge+MF9=Ztx}ExF4wUl9AL~MLo?u*XjBUs-60QTD79uf$JBZf zrloc2_;2md^#}rkoF!Z>^*8tmh*T}W zC80fGA_#Ycpr3>>0*GDl=h`nEZa2Nt=w52}_`_jk|7HppleBBmNVuQO->Ju=8agQ& z(LMR~=8Tk#YoMEkgB60Vs^z31qIdf(qgP)roo$F(dW}ZrNry(eG?)?Hkr`3K2-NQn zeiDuZy|Z8I@kfkUA`C5&ZXkVFxind?A4{hQ41~0BTr?5KXbT`bJmd>XdHXZZ$jtUC z%wIr}AX2kq5NCTg5iyPK2+XUl=)?$+!^+gAYm2#Ol?#?FU%|Urx&`jg?@b_Bxqm8` zNK5nDNdsE;8ik8L5YSE2pcW@07!MeEqT#l2q588u6g71|AZTjS{E*|u`bAiy{;otM zK;uR!351LoM)#(MdaW}Y4Qv;NHFs(K(S&ANMmVhP@MGv;s0X7M^EXoja=&AYir|FH zgpHUSBL?PYtpQW6fi-Q-Oa!AeODn&&$l07G@r=@nV3mYL4frK8sLktl3$AgIt zj$`gXS6ia5{oPvI+t#6b2RLHYF<7i~H6>$$uJ+DVjmpu8!kyjBTZfbuU9?N-h!Y3T` z=N4q1_9V=y{xyS{LY$4a8m>p6Gpzl6?;y;q>^=liXjXp0TG&dG-EUEZIIJ;eaG4 z`ax-kviqdu!`C35RQ>pZ!`lNQXT_&cj_;B3__)Jy)jxP;=lEt>jt@N?&)6;X|9=Cu zkKI}CA?bio315-$_Y$6yaEf%yl@fkf!W9y(m2k6!svfl;b6rD2jkdT^?=-MVy%M`e zD=Vt1mWZ6r}PsXd6=@zFDdL_BJwNq>x#8`HM1fnal6a#A7ZUotO#WY)K(2 zW~zU)REo{1OvObmeHv5omP?<`R9xoLFWv`D<%Mh}+b{bgmwy(!$KiLuUy?cBk;|WF ze>B%$#x&=?X->Z^b3P$g&ulg^-%b(vLhRgE^M}2(5UWFK-pHlT!MO{~PU87Ob|q8$ zcQ;CT~o9eGs~KO`?bPeNeq4 zj{bcZ^nB+b4oLleSubBdgnk1z3=QWeobmiau0K0YRewFj^~grrz)PTCXTw!?d=mb@ za{X7a$EE$WBaqTm%%|j^yW|a-ucLuJOVVF*_~#nX^PSJAB6>kNQ}+d~96xI$|9;tD zFoUNyu3sWHaF66a=5oV{P@a0Zo)WfQ+R4|5QL+IJ%y(X7Nb)}*9l+Nu!T+$- z|IdzkACvqyUnc6~>y*eoDe3!YqConL0PN?IzEeH`spl;E4nTfBBk6pt8!~?Yo&5Qz zquw6G3Gu6Qd^bt`6O#Y5-L;Y1O_3-s-=s5v8`Qh6RKm4cUe^ znjgj`{Yx@V?&RKK>^)AGhz-m_oNG2*WtZ^yFJU7x&cm``nWSIoh}%X%uG zdVB#ozaJ-} ztav}`qVLbXV4|m|A0jr4p9{-jkjKJI0Gk-i`CZJ&v^N^R#ocwoXa;%m{lu%4R`t4n%Xe=iLjN~i~?<0gPQ4dAAJX38}@fI`xk6-#VrZ31!^O&!)OfGAya#SI;btSeltZQxF*y}uhNaqK0og+59tj9(l zUPf1i3*+YYL4l!4mJZl&*6XMt;okz^&kjEn7xGJ(`V}u7^FC&B- z;M-cweJBEF>q;5{*dszM$#=~115bKxz16}-5#e9#!|_{sBOe!_h(nQNs5s>bdqmSw zZwo&}iOnJQQ?-ctdGbF)jA$ncyjvhZcu5>Ox3T}Q55t@Ic2}%Q*b-V zX$?-{YQ054P0Bm%mt?jR8R`=yuhwN0RO^7MerNl4OZj@KP_5r6sMaA#9;*}=`R_r{ z$R}hUCAAK#Aj#Mh*=kQoAa;4R9;D!iof&!c{-)p;9r9}3NI}(JrAFZjKJ1WJ?;Q$0 zBA?roysB5>-*m{Ub!P<~%P73Blq|t-OL^6QYQ0Lq31z4ha-i%74teL_-#8`Z6ma_g zNr${z|59)d4Gvp!*8d#J=#g5nsr3x?cR8H=3Rmz1Wa&{?$*c9W$K?yH;sXm$3Rm#A zpi=B9dA0tc{_cq;9joF~$*F#%^(BfwC9l@!PA&xzX|VvAUnQ>~t?$_7nS9@2l|m$z zkrWvvr{FsddG#I`lk&<=rAEmq{4dB5P1&#BYX_wK;zq?Opq7iW3&6>K$(|`y^4DZ2 zB162C>`=w7C=tK=rNUPEK1cTfXLGv{*u_2@(L1e{oGIJ-nGMP!|-U$T1 zC_!aRvDBq4t+r*mZi}w_ly>_>p4M(-X#=&bi|yK_mhMuk?S#-0wc1pX+24CUX6{TT zcAsbWdHN3rC+~Sb&wJkUo^$U#_a5(eH?GZdIG8H=>?TIo;1ofrmW(@VWCfs_tz=X1 zcP_h{O#<%ZG{LVH09;YVq-g~UB|RUo0Kb)af{+cbl5z?v4+&Cx6O~!>1xG=~G)^Er z^7UXjM*%fnQ7|F>IJs8vl^&5v?}*epBJ~v1q@IGRf7CbnwMu?AtOt*Zf+S0&`86v* z^}};HIu4!|WTv3f`xx}d&;M;Hk%BF zUcP*(%Z#{|@P3nhl3mx-##>Tx)PRxCv+$!FApV;#e)#yv-(UNoz16RVZr}Yz{IQ2V z{|fO+@l)fr_XnDT71U258tGn+U#*o;JkIZRj>CLe!U?ajBGLj%|-wk8@lx{z((C#*KI^L`9d)rC}h(pdShAv z|Ml0?3|-EEcBN_^e!tfwtdi({LD#9l?wDn=?x+#Af~-TgBHb3l&ll}rJ}Ux`z5X3O zFP!&~)dN1u2S&ST3OY#P09)7CP+R9+;#%TbMj_9`Kl-Z*;R+Mb zfwZT8dH9J!*xRV8bu2c=z!fWxZIuFQU035gI92E!lIypk?~?Q#GVc^!;U^bsT#?pR zwbl~hl#M=_ONc*bY;^lVl(5l@ZStcwy6OwD$87W&HhGoTbPcqpY?<_*d{HqXHO)p> zF(vvU8=cl#RVr+B`*n7ujc&irRNLq(c4W(Aqsv6hzjO9Njd>mzwDOWCJ$*kYJeHD3E-M8qxnLIl7SF9ljqpz551&b* zESO3-g>d*J$MXoM&_{)S( zCcK;DKO>w%H+(0@pC_C`Hr&kd?-Nd;8m{K}9N@wIzK1eGGBCNm`o;5ZsqZ#di>rCefM5)+&}p!b!o(Tltz2&F=8b?axs~F zV6gZzgL?+8o6y-WAbyE;Afo;?s^5ru;&<<*r6zOrk;@@)fCT1{0Hp@EF3f^=H}Nh) z5A~f?e?!z`R403&_fq|3QSYbv3!;9U>faajX&BeUfT(+^{*i-lIQ*uo$ ze&}5!6@uv5H|qgPGt4+`1}Fu29{))oGl6&G zQN5X@X(b!+V{}_cbd6x&NA*f#)511V5B6h3x|&F|R*h7u{P`B>BJ7`jhllZ-B>0x7 zzd-e2)FGYDzJ8~M^|0nBT@SI6T|x7E-|QtEEPHpJ#^T2luR;l-rdEz8c4ErK-D7?C zjxo#G?;aajRXpH)1%kx`gMDL;`{YFb5U4)^bkdbka!rz#{=Zt(!AnloEy2=36kI={4tIfzwl64u7 z7X;#rl>vDUNbxg+XmbwQpfUjl0PAwl!$fW&`-#dmyajbX% zsbOidTKsQ=eTj;`u_-+=eWrW*++&WBmu!~{^xDV08-;gm+`AK?HF4TW)ZDx_SQ8)R z4y4z+J%3Inp);53&^XNGHR0#|DL=PDOs%GU=V*z+B7Vlxzy1uC8cd2_NP2i`)j?9M zJ;~xdPv!Hqr!Nuc8!Ih-=x(6#LEB2S1!}34Xg%4Wl?d0&uB$QL80ptAqi`8KK$pP< zp8nZwpi^SUe*xx`NP{8gT_8F5C=FM`K9nn@@*=nrj5}+9qGMGYU>+71Kk`ScUmz_M zB$z70ga{sY&H{n4A?M|Q(&jmc!sh7@3Wr*=9Qpz1DTm6qL%#$`Dt}!le_1Mj?rrYS zw}7Jcf8hWQO}p=UpkERwoVkdkfHVCdkTY>WY0pc34>-4jf`H6TOhbc^^hrr?T5=gA zhn$T>7;>&9{_uMa-jh-w6xxR|d+eco=PFxIn&85avp8+(Jxtkcn zRlZm|FHOtN=YV82uQ1M1a&qlh+94QmH&ubYTHdbm3|a2G=CvVeum`(%)yC zQv@;9k>r)4Bj*8CM}C4D^5a>M$fcz=mu^79J^^~lr7?{EkaK{vhn(L8K*ydWOgQ)n zm_kfG4+>&3FHy~V@Q@Ji6XH8l;v;Qn)(w=JUGpc3L~P2Cb2AByOdfJ>5DJY1Mhfo0I$FQ)5(H~DlOZlt9S?K82I!i||wgd21}nS^-ac}RYb#x8LLwc>%y$b*CfX`Q%_{w$!& zqHrsH?@vzxHMiDms);9S+G_Buv0&2&=ow;PIl+w$@wXe|FEw6=#|b=xJ@;OIBJu{V z_z(QS(kg$Yo*x?HXB*>h*TX_`)@e`QF^6Z>uVZKF8SU@3*4$pRwdRf*@3H;qHs3sk zh><<{6i0giR7%*l3JO?jr>d zg;s%0jyBWRp;s{r3K4BJHZ+V#*u06`GGpD{k*K8yG)dNcQHY|H2UZ98&Wjd~b+zl! zo3wJx?AHB8(9liIf*%3hG@{UyV&!ni(mV7hp1`e$R>^ldV8>WZ^k~rM*QKd(mfAMf za^)TV-!cS^T}Kgzp+Mgnkwoa~{^p_JnRZM$K0YUMo|e8@0gSxKEn zDUW8^kLtcajs_N*(zY**25HO4)G!{hS?oPUVpgt3%6nFGpD3QfxnLx!m78(^#;FLe z;Fk`T9;VGVQ`2{J>rqSViUf3Rks|s60fUCt7oq@|*9lE`G#ZIkX>H+c;mG!|Y6V+b zu`WFf56iWM3(SR@&r+=N1%3^8v{H`}E;Fzq9pKCYLo*PVNJQ&2Iyzl+7mU)J8XQyW zikX(yuH!#zyRL_k7!)iKYH7dD7hY&-+oOi1b0$TboT0HZeO1aI+3ZG zpKHQ;%tR7y?}U9)#ta~FC7eJ3VN9~FMZ%$8a(|~Djc6F8 zNLY8}wwp0iQlWuunhsVcY*j8J3t_#(XBj>Eys4}yV(C>HxhDe}32Ja7vOP7UgcE4r z7q|<71iigi>+*$-?pO#`!W}?%V0YAHJw9yNA~BHCB5;vd6tm5b^l(uusN@{a95XXL zs&IcEWr8RTS(7+Dy0NfnbcEsF%JO#106DEpZK}42M^=Sk$+G2qh-Fw14*laXBrA_k z#dXrtoPN@TmZL`L;`94;(=@2Zu`uQXW}fJ{ZCR_q|BAD|Zp$z14#~c;O ziI52&u{eeetj}56#e}L}-;(acz{VIW6R|sP58Qv9!Zux~0Xsk?_%|?zcj{=$i}&^*0!ag)syTVil+De25Dlp%R9M9=KUd5X8rY zg$?u59<+c?FDxt_%fbI^{3r+B_+v780l(7o$>bvZHsKe-?{oP5$o3mRy$Kn|N7)p8 zn#UFxYJ$?*S4C^`Jz_PLbUjbVqx6*>kNlJfvr{V8J(4<^yWq`Jj!%`5a zGOMChJyk|k%vRUgQQY?A19|}u13m_L0`OIgO9JpN#J&)ZeCGfc0UjKMKH%opp%3^d;9kIs zfQJEpi+-E{T!wfg0QUkGVi$^T%bRI83WeV3QgQ5TVU8Uojw`26F5K^!Ttf7#@GC=~ zuO|Una?3L|AAByKNG1nKwy0!nQQ0lU)3z7xVmHsZ@xwRFzlO-9Uyt7r$kFDzDx`Zm zey7mhl|-y5DtR!k?y^an;1E#a--F-J!M_zS#m{Tu0>pnDzo{6L`!o1EQ~YN^H^48q z^E=b_PlMhA{t7#v>L_IY0)G3zr+2cc_M6iBS7D5Iy$^pi_$K%jcKvN>{oBFs1An!h zzdg;r2mCL;kN)G}fBk**p9TNN;5PuK{LimPXgrsv*6Ff8bR;EQ~bR3DgD#nyTNy7@T)nWa`poFJHXe8Ut3i2 zsl3{vvPbgWMcTfC+M-3Dbb5*^9-QPUTG=;weNlC^Xk|@NMNQG7+9C~dkgqK&6!{PT z4#5u0T`HF%a47Cv}yRHh4%`i>Is0(nv2LtY_q^*tSbCIU@8Gtu)Xl|$tkhjf2SMe*Odn2Zp9 zP~K!Z2|+2775aXF$|=cL-8H16`0|C9G6`o(r~ut!^HQO4pzdW0rM`MjoGhf+2P8Zp z35tG7I->j@m2&hU78TV#-kR|KfW$@dT9V`ZLkJM@LWSch&UiHD_-<(*FIPC8@|%qR z4U77YJ==vzvg4Oac&&uXC0r}vCJBQQ_DJ}kgrAl0s}ibq)c2L^>guYrMfG~SfnDL{ zuBEPu^2+N(MO#u)xuRl4#Zsj+5zI$cuT%qX6UxWCBK6(9jg0Tk^O==Xz95ySnext5 zerD1qrSdqFKAEZU&ZHMIl_#0>DNN;GCVeVXd74Qd|J^h3^D&!8RRY@-^4VqVNLKuX zd{OG0hfN%Ia(oZX?U%44_K!}bQa-+{R_7Hm?Ub^;nw=u*`D|wD{DqyHkEc?#j%3nj zv%_+I$)sP7a~YbQ#OwK(ef;+gVl6--lUz8A39={0sn zq4m|l#`{m}Y91?MqgmrZmWf`W7D8!_wx@}neLbN400(vj_e%fOy0ekf$H#N0w4<&s zKzX6P7DtY8`6tkG_3P_gzJwi>`JmeUj--EE(hGo7nJ7L#<-Af>GM|g3{``v5$H$EX za{2Rnt~ovr-{E$~=Sei#n=ya~&jHz+aUHmWhe?Tvl zbvtP1^deR#FSL9Q3<7&3eKREt3g6oU{OkmFo&ufP9n2c{0nl@uqxi10|DV!6-}@u` zxDaVLcafd{Kj!w+^IeVO%iIomm|19F`I<};#|p5{=8D5i(8>QJ(*F{vJCDm3v0uvz zy<5_+m2`Jje3nZ)yQCep{M|zIyepWx&M4PzmGXC58YjVRUbb=j60w0^DStRC&buZ3 zE0PYBmrrp!MeH~7#)a?kf^#JP!V^aRBQl9TILZ0rQ zO0hna77IJO1z;nRJ}TD}wQ{{D>Fv@_zE=&M$;by9m#<~D`vuU+zB(7E_Tpzq`7=_U z)rp2RDgT%puhr6@pK<#5>z9k{V7$~gN^w>Nx~32tY?Ag5$o@Vpd0RN$CMc`M1oXQ> zr~W>b)!&CD{Rv4&xOh1LI?b=_`BIETDuJEsb4vdp?HtOoLtp5Te0F~aK+iQ_==}-B zze297y7cGN1oCGmpuaBd^vn6xBJJcMKPe7RX2oF|&)XulEoG1oDq^I##Cs40kB3`V@BW7Oj+LoI2 zZm+wko({M1?x;EraC+SyDd4GZVcz=NnrhZJ)IpBk5~msrWD@xISC>9@2|a!$FY^psrsb?Nc%mU#ki_hv9PxypGSbg4{48 zUVJozU?4Ijl8e!dN7CJZhEX&7Vj$@F_9xm5|QgwM+_D1SG^}fG*wB-G(2))* zW(G`r^|Bsc`|yTSul$jJbR1D0L{u;MK~0}dqyvwc#^j+!zZnzfGwI-Cri46yiC|We zFB`%Fl{~H@nYOH;S%D8ls3*D3bH48}(=AIad@Ukkj*oGCmR`^23Mk_A zB{?dNlfoa-b+p^aPix}a82j_&zBE@q!oCLq1ZFweFC`Toh~OLe8;mB8%!YTrb``5DrgXJm<0j~_nsh^Y1t%8G*O z`YN{rQ~QR>Y!fPUi=p&S$%=y25~uAoij%tkSNnCFK*KFhN?+|eDya4uA;JsUu$Mc4 z(4L-ZU+wECsGg&g|4L55ZP2GZLWQgS9|bkpShoL?%;eIf-%rJ!m*yZ?Kn zeyx;K`$-C_eNxh=m}Tof0vg4H{G+1I+bgK{Qw4YY_{YJp>#O}K1qYR)gz7m^!2?

Dl_=>z=RQjr2h5uugzSV6(f}fR42N7NruHbJ#CI6Ma+6O%RSM-H7#(swi<*w3K`-STN=c38L zsQgy#sysLdU3>d#U-9H((L#j)slQ5J!Sh-AOg>*Rso0&;6cweX;8>QvdhYC&`Xv+S zEAmBD$d>BAdfwb6^%HeUQa~*eWwcL5{g>h?uF_wSqKFE~Qn5podx9hW9+n1=$bE?q tf=t&M)o-WF{s*rlHr4 +#include "header/CyUSBSerial.h" #include -#include #include #include #include diff --git a/tool/CyUSBSerialCommandUtility b/tool/CyUSBSerialCommandUtility deleted file mode 100755 index eebd671f3c1ad83e5baf9c197a1e521d66351477..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26424 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 fBQE*|5xIthvK_(yLS6jccf2_XA#9i_ei diff --git a/tool/README.txt b/tool/README.txt deleted file mode 100644 index c255cd4..0000000 --- a/tool/README.txt +++ /dev/null @@ -1,137 +0,0 @@ -================================================================================ - Cypress Semiconductor Corporation - CyUSB Serial DVK test utility for I2C/SPI -================================================================================ - -This utility is used for testing I2C/SPI master mode functionality on the -Cypress CyUSBSerial DVK. - -The utility writes to I2C/SPI flash devices on the DVK, reads the data back -and verifies the data read for integrity. - -Release components: -================================================================================ -1. Test_Utility.c ==> Source file of the command line test utility -2. 90-cyusb.rules ==> udev rules for changing the mode of usb device node. -3. CyUSBSerial.sh ==> Script file for implementing hotplug feature in linux. -4. Makefile ==> make file for compiling and installing the application. -================================================================================ - - -Pre-requisites: -================================================================================ -1. libusb-1.0.9 is required for compilation and functioning of the APIs in the - USB Serial library. -2. The CyUSBSerial library (libcyusbserial.so) should be compiled and installed - on the test machine. -3. GNU Make and the GCC tool-chain are used for the build process. -================================================================================ - -Installation steps: -================================================================================ -1. Change to the folder where the utility source files are extracted. -2. Invoke 'make' to build compile the utility, and to install the configuration - files at the appropriate locations. This should be done from a super-user - (sudo) shell, because the configuration files need to be copied into system - folders (/usr/local/bin). -3. Use the CyUSBSerial command to start the test utility. - -Note: -The udev daemon needs to be restarted to reflect the udev rule changes that -are installed as part of the make command. -================================================================================ - -Using the test utility: -================================================================================ -1. On starting the utility, the Cypress USB Serial devices that are connected - are listed along with their device numbers, interface numbers and - functionalities (SPI or I2C). - - $ CyUSBSerial - ---------------------------------------------------------------------- - Device Number | VID | PID | INTERFACE NUMBER | FUNCTIONALITY - ---------------------------------------------------------------------- - 0 |4b4 |a | 0 | VENDOR_I2C - 0 |4b4 |a | 1 | VENDOR_SPI - 0 |4b4 |a | 2 | NA - ---------------------------------------------------------------------- - -2. A menu providing the various operations is also printed: - ---------------------------------------------------------------------- - 1: Print list of devices - 2: Select device...No device selected !! - 3: Enter I2C/SPI Flash page address and length to write/read. - 4: Verify data - 5: Exit - ---------------------------------------------------------------------- - -3. On selecting option 2, the utility prompts for the device and interface - number to be selected for testing. - - ----------------------------------- - Enter Device number to select: - 0 - Enter interface number: - 1 - ----------------------------------- - - Once the selections are made, the menu will be updated with the details. - ---------------------------------------------------------------------- - 1: Print list of devices - 2: Change device selection--selected device: [Device number 0] : [Interface No 1] : SPI - 3: Enter I2C/SPI Flash page address and length to write/read. - 4: Verify data - 5: Exit - ---------------------------------------------------------------------- - -4. Option 3 can be selected now to do data read/write to the I2C/SPI flash - device. The utility prompts for the page address to be written as well as - the length of data to be written. - - ------------------------------------------------ - Enter Page address ... (less than 65536) - 1234 - Enter length to read/write ... (less than 256) - 32 - ------------------------------------------------ - - Length needs to be less than or equal to 256 bytes in the case of SPI access, - and less than or equal to 64 bytes in the case of I2C access. Page address - needs to be less than 65536 in case of SPI and 256 in case of I2C. - - Once the values are selected, the menu is updated with the details as below: - ------------------------------------------------------------------- - 1: Print list of devices - 2: Change device selection--selected device: [Device number 0] : [Interface No 1] : SPI - 3: Change Flash page address and length ...Entered is page address 1234 and length 123 - 4: Verify data - 5: Exit - ------------------------------------------------------------------- - -5. Selecting option 4 causes the utility to write a randomly generated data - sequence to the flash device, read it back, and verify the data read back. - - The data pattern written and read back will be displayed as shown below: - -------------------------------------------------------------------- - 67 c6 69 73 51 ff 4a ec 29 cd ba ab f2 fb e3 46 7c c2 54 f8 1b e8 e7 8d 76 5a 2e 63 33 9f c9 9a - -------------------------------------------------------------------- - Data Read back is: - --------------------------------------------------------------------- - 67 c6 69 73 51 ff 4a ec 29 cd ba ab f2 fb e3 46 7c c2 54 f8 1b e8 e7 8d 76 5a 2e 63 33 9f c9 9a - --------------------------------------------------------------------- - Data verified successfully - ------------------------------------------------------------------- - -6. The utility runs through these menu options until the user selects the - exit option (5). - -7. If a new Cypress USB Serial device is attached or an existing device is - removed while the utility is running, a notification is printed on the - console. - - --------------------------------------- - Device of interest Removed/Added - --------------------------------------- -================================================================================ - -EOF diff --git a/tool/jbiexprt.h b/tool/jbiexprt.h deleted file mode 100644 index 9b38b4c..0000000 --- a/tool/jbiexprt.h +++ /dev/null @@ -1,224 +0,0 @@ -/********************************************************************************/ -/* */ -/* Module: jbiexprt.h */ -/* */ -/* Copyright (C) Altera Corporation 1998-2001 */ -/* */ -/* Description: Jam STAPL ByteCode Player Export Header File */ -/* */ -/* Revisions: */ -/* */ -/********************************************************************************/ - -#ifndef INC_JBIEXPRT_H -#define INC_JBIEXPRT_H - -/********************************************************************************/ -/* */ -/* Return codes from most JBI functions */ -/* */ -/********************************************************************************/ - -#define JBI_RETURN_TYPE int - -#define JBIC_SUCCESS 0 -#define JBIC_OUT_OF_MEMORY 1 -#define JBIC_IO_ERROR 2 -/* #define JAMC_SYNTAX_ERROR 3 */ -#define JBIC_UNEXPECTED_END 4 -#define JBIC_UNDEFINED_SYMBOL 5 -/* #define JAMC_REDEFINED_SYMBOL 6 */ -#define JBIC_INTEGER_OVERFLOW 7 -#define JBIC_DIVIDE_BY_ZERO 8 -#define JBIC_CRC_ERROR 9 -#define JBIC_INTERNAL_ERROR 10 -#define JBIC_BOUNDS_ERROR 11 -/* #define JAMC_TYPE_MISMATCH 12 */ -/* #define JAMC_ASSIGN_TO_CONST 13 */ -/* #define JAMC_NEXT_UNEXPECTED 14 */ -/* #define JAMC_POP_UNEXPECTED 15 */ -/* #define JAMC_RETURN_UNEXPECTED 16 */ -/* #define JAMC_ILLEGAL_SYMBOL 17 */ -#define JBIC_VECTOR_MAP_FAILED 18 -#define JBIC_USER_ABORT 19 -#define JBIC_STACK_OVERFLOW 20 -#define JBIC_ILLEGAL_OPCODE 21 -/* #define JAMC_PHASE_ERROR 22 */ -/* #define JAMC_SCOPE_ERROR 23 */ -#define JBIC_ACTION_NOT_FOUND 24 - -/********************************************************************************/ -/* */ -/* Macro Definitions */ -/* */ -/********************************************************************************/ - -/* -* For DOS port, program data is stored in a set of 16K pages, accessed -* through a pointer table. For 32-bit version, the buffer is continuous. -* The macro GET_BYTE gets a single byte for either case. -*/ -#if PORT==DOS -#define PROGRAM_PTR unsigned char ** -#else -#define PROGRAM_PTR unsigned char * -#endif - -#if PORT==DOS -#define GET_BYTE(x) (jbi_program[(x) >> 14L][(x) & 0x3fffL]) -#else -#define GET_BYTE(x) (program[x]) -#endif - -#define GET_WORD(x) \ - (((((unsigned short) GET_BYTE(x)) << 8) & 0xFF00) | \ - (((unsigned short) GET_BYTE((x)+1)) & 0x00FF)) - -#define GET_DWORD(x) \ - (((((unsigned long) GET_BYTE(x)) << 24L) & 0xFF000000L) | \ - ((((unsigned long) GET_BYTE((x)+1)) << 16L) & 0x00FF0000L) | \ - ((((unsigned long) GET_BYTE((x)+2)) << 8L) & 0x0000FF00L) | \ - (((unsigned long) GET_BYTE((x)+3)) & 0x000000FFL)) - -/********************************************************************************/ -/* */ -/* Structured Types */ -/* */ -/********************************************************************************/ - -typedef struct JBI_PROCINFO_STRUCT -{ - char *name; - unsigned char attributes; - struct JBI_PROCINFO_STRUCT *next; -} -JBI_PROCINFO; - -/********************************************************************************/ -/* */ -/* Global Data Prototypes */ -/* */ -/********************************************************************************/ - -#if PORT==DOS -extern unsigned char jbi_aca_out_buffer[8192 + 1024]; -#endif - -extern PROGRAM_PTR jbi_program; - -extern char *jbi_workspace; - -extern long jbi_workspace_size; - -/********************************************************************************/ -/* */ -/* Function Prototypes */ -/* */ -/********************************************************************************/ - -JBI_RETURN_TYPE jbi_execute -( - PROGRAM_PTR program, - long program_size, - char *workspace, - long workspace_size, - char *action, - char **init_list, - int reset_jtag, - long *error_address, - int *exit_code, - int *format_version -); - -JBI_RETURN_TYPE jbi_get_note -( - PROGRAM_PTR program, - long program_size, - long *offset, - char *key, - char *value, - int length -); - -JBI_RETURN_TYPE jbi_check_crc -( - PROGRAM_PTR program, - long program_size, - unsigned short *expected_crc, - unsigned short *actual_crc -); - -JBI_RETURN_TYPE jbi_get_file_info -( - PROGRAM_PTR program, - long program_size, - int *format_version, - int *action_count, - int *procedure_count -); - -JBI_RETURN_TYPE jbi_get_action_info -( - PROGRAM_PTR program, - long program_size, - int index, - char **name, - char **description, - JBI_PROCINFO **procedure_list -); - -int jbi_jtag_io -( - int tms, - int tdi, - int read_tdo -); - -void jbi_message -( - char *message_text -); - -void jbi_export_integer -( - char *key, - long value -); - -void jbi_export_boolean_array -( - char *key, - unsigned char *data, - long count -); - -void jbi_delay -( - long microseconds -); - -int jbi_vector_map -( - int signal_count, - char **signals -); - -int jbi_vector_io -( - int signal_count, - long *dir_vect, - long *data_vect, - long *capture_vect -); - -void *jbi_malloc -( - unsigned int size -); - -void jbi_free -( - void *ptr -); - -#endif /* INC_JBIEXPRT_H */ diff --git a/tool/jbiport.h b/tool/jbiport.h deleted file mode 100644 index f57533e..0000000 --- a/tool/jbiport.h +++ /dev/null @@ -1,43 +0,0 @@ -/****************************************************************************/ -/* */ -/* Module: jbiport.h */ -/* */ -/* Copyright (C) Altera Corporation 2000-2001 */ -/* */ -/* Description: Defines porting macros */ -/* */ -/****************************************************************************/ - -#ifndef INC_JBIPORT_H -#define INC_JBIPORT_H - -/* -* PORT defines the target platform: DOS, WINDOWS, UNIX, or EMBEDDED -* -* PORT = DOS means a 16-bit DOS console-mode application -* -* PORT = WINDOWS means a 32-bit WIN32 console-mode application for -* Windows 95, 98, 2000, ME or NT. On NT this will use the -* DeviceIoControl() API to access the Parallel Port. -* -* PORT = UNIX means any UNIX system. BitBlaster access is support via -* the standard ANSI system calls open(), read(), write(). -* The ByteBlaster is not supported. -* -* PORT = EMBEDDED means all DOS, WINDOWS, and UNIX code is excluded. -* Remaining code supports 16 and 32-bit compilers. -* Additional porting steps may be necessary. See readme -* file for more details. -*/ - -#define DOS 2 -#define WINDOWS 3 -#define UNIX 4 -#define EMBEDDED 5 - -#ifndef PORT -/* change this line to build a different port */ -#define PORT EMBEDDED -#endif - -#endif /* INC_JBIPORT_H */