From 6658905f18a1eebc148836f26c731dea9c1377dc Mon Sep 17 00:00:00 2001 From: "edouard@lafargue.name" Date: Thu, 9 Apr 2009 06:43:20 +0000 Subject: [PATCH] Initial commit for the firmware. Used the 20090306_ela version as baseline. It is identical to the popular 20081211, with the doob addition (20090301), a linux client, and two additional commands for LF analysis. Let me know if you find issues here! --- LICENSE.txt | 281 ++++++ LOG.txt | 3 + README-gj.txt | 28 + README.txt | 156 +++ armsrc/LCD.c | 123 +++ armsrc/LCD.h | 120 +++ armsrc/Makefile | 61 ++ armsrc/appmain.c | 757 +++++++++++++++ armsrc/apps.h | 77 ++ armsrc/example_lcd.c | 269 ++++++ armsrc/fonts.c | 300 ++++++ armsrc/fonts.h | 6 + armsrc/fpga.c | 222 +++++ armsrc/fpgaimg.c | 0 armsrc/iso14443.c | 988 +++++++++++++++++++ armsrc/iso14443a.c | 1815 +++++++++++++++++++++++++++++++++++ armsrc/iso15693.c | 1226 +++++++++++++++++++++++ armsrc/ldscript | 11 + armsrc/ldscript-fpga | 11 + armsrc/start.c | 12 + armsrc/util.c | 53 + bootrom/Makefile | 58 ++ bootrom/bootrom.c | 190 ++++ bootrom/flash-reset.s | 38 + bootrom/fromflash.c | 11 + bootrom/ldscript-flash | 11 + bootrom/ldscript-ram-jtag | 10 + bootrom/ram-reset.s | 10 + cockpit/0setpath.bat | 5 + cockpit/1makearm.bat | 5 + cockpit/2makeboot.bat | 5 + cockpit/3makewin.bat | 5 + cockpit/4flashos.bat | 3 + cockpit/5makeall.bat | 3 + cockpit/prox.bat | 3 + common/iso14443_crc.c | 35 + common/usb.c | 472 +++++++++ doc/CHANGES.TXT | 155 +++ doc/README.TXT | 39 + doc/component-placement.bmp | Bin 0 -> 66066 bytes doc/proxmark3.pdf | Bin 0 -> 76335 bytes doc/proxmark3.xls | Bin 0 -> 30208 bytes doc/schematics.pdf | Bin 0 -> 834286 bytes doc/system.txt | 276 ++++++ fpga/fpga.mpf | 239 +++++ fpga/fpga.ucf | 41 + fpga/fpga.v | 190 ++++ fpga/go.bat | 38 + fpga/hi_iso14443a.v | 360 +++++++ fpga/hi_read_rx_xcorr.v | 165 ++++ fpga/hi_read_tx.v | 76 ++ fpga/hi_simulate.v | 106 ++ fpga/lo_read.v | 102 ++ fpga/lo_simulate.v | 37 + fpga/sim.tcl | 27 + fpga/testbed_fpga.v | 50 + fpga/testbed_hi_read_tx.v | 109 +++ fpga/testbed_hi_simulate.v | 116 +++ fpga/testbed_lo_read.v | 105 ++ fpga/testbed_lo_simulate.v | 101 ++ fpga/util.v | 27 + fpga/xst.scr | 1 + include/at91sam7s128.h | 461 +++++++++ include/config_gpio.h | 40 + include/proxmark3.h | 62 ++ include/usb_cmd.h | 71 ++ linux/Makefile | 29 + linux/command.c | 2 + linux/flasher.c | 166 ++++ linux/gui.c | 54 ++ linux/guidummy.c | 17 + linux/proxgui.cpp | 58 ++ linux/proxgui.h | 20 + linux/proxguiqt.cpp | 309 ++++++ linux/proxguiqt.h | 56 ++ linux/proxmark3.c | 91 ++ linux/proxmark3.h | 11 + linux/snooper.c | 49 + linux/translate.h | 9 + linux/unbind-proxmark | 16 + linux/usb.c | 171 ++++ linux/windows.h | 0 winsrc/Makefile | 31 + winsrc/command.cpp | 1812 ++++++++++++++++++++++++++++++++++ winsrc/gui.cpp | 510 ++++++++++ winsrc/include/hidpi.h | 1787 ++++++++++++++++++++++++++++++++++ winsrc/include/hidsdi.h | 412 ++++++++ winsrc/include/hidusage.h | 263 +++++ winsrc/prox.cpp | 379 ++++++++ winsrc/prox.h | 32 + winsrc/vc90.pdb | Bin 0 -> 94208 bytes 91 files changed, 16661 insertions(+) create mode 100644 LICENSE.txt create mode 100644 LOG.txt create mode 100644 README-gj.txt create mode 100644 README.txt create mode 100644 armsrc/LCD.c create mode 100644 armsrc/LCD.h create mode 100644 armsrc/Makefile create mode 100644 armsrc/appmain.c create mode 100644 armsrc/apps.h create mode 100644 armsrc/example_lcd.c create mode 100644 armsrc/fonts.c create mode 100644 armsrc/fonts.h create mode 100644 armsrc/fpga.c create mode 100644 armsrc/fpgaimg.c create mode 100644 armsrc/iso14443.c create mode 100644 armsrc/iso14443a.c create mode 100644 armsrc/iso15693.c create mode 100644 armsrc/ldscript create mode 100644 armsrc/ldscript-fpga create mode 100644 armsrc/start.c create mode 100644 armsrc/util.c create mode 100644 bootrom/Makefile create mode 100644 bootrom/bootrom.c create mode 100644 bootrom/flash-reset.s create mode 100644 bootrom/fromflash.c create mode 100644 bootrom/ldscript-flash create mode 100644 bootrom/ldscript-ram-jtag create mode 100644 bootrom/ram-reset.s create mode 100644 cockpit/0setpath.bat create mode 100644 cockpit/1makearm.bat create mode 100644 cockpit/2makeboot.bat create mode 100644 cockpit/3makewin.bat create mode 100644 cockpit/4flashos.bat create mode 100644 cockpit/5makeall.bat create mode 100644 cockpit/prox.bat create mode 100644 common/iso14443_crc.c create mode 100644 common/usb.c create mode 100644 doc/CHANGES.TXT create mode 100644 doc/README.TXT create mode 100644 doc/component-placement.bmp create mode 100644 doc/proxmark3.pdf create mode 100644 doc/proxmark3.xls create mode 100644 doc/schematics.pdf create mode 100644 doc/system.txt create mode 100644 fpga/fpga.mpf create mode 100644 fpga/fpga.ucf create mode 100644 fpga/fpga.v create mode 100644 fpga/go.bat create mode 100644 fpga/hi_iso14443a.v create mode 100644 fpga/hi_read_rx_xcorr.v create mode 100644 fpga/hi_read_tx.v create mode 100644 fpga/hi_simulate.v create mode 100644 fpga/lo_read.v create mode 100644 fpga/lo_simulate.v create mode 100644 fpga/sim.tcl create mode 100644 fpga/testbed_fpga.v create mode 100644 fpga/testbed_hi_read_tx.v create mode 100644 fpga/testbed_hi_simulate.v create mode 100644 fpga/testbed_lo_read.v create mode 100644 fpga/testbed_lo_simulate.v create mode 100644 fpga/util.v create mode 100644 fpga/xst.scr create mode 100644 include/at91sam7s128.h create mode 100644 include/config_gpio.h create mode 100644 include/proxmark3.h create mode 100644 include/usb_cmd.h create mode 100644 linux/Makefile create mode 100644 linux/command.c create mode 100644 linux/flasher.c create mode 100644 linux/gui.c create mode 100644 linux/guidummy.c create mode 100644 linux/proxgui.cpp create mode 100644 linux/proxgui.h create mode 100644 linux/proxguiqt.cpp create mode 100644 linux/proxguiqt.h create mode 100644 linux/proxmark3.c create mode 100644 linux/proxmark3.h create mode 100644 linux/snooper.c create mode 100644 linux/translate.h create mode 100755 linux/unbind-proxmark create mode 100644 linux/usb.c create mode 100644 linux/windows.h create mode 100644 winsrc/Makefile create mode 100644 winsrc/command.cpp create mode 100644 winsrc/gui.cpp create mode 100644 winsrc/include/hidpi.h create mode 100644 winsrc/include/hidsdi.h create mode 100644 winsrc/include/hidusage.h create mode 100644 winsrc/prox.cpp create mode 100644 winsrc/prox.h create mode 100644 winsrc/vc90.pdb diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 000000000..8094a4ac5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,281 @@ + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/LOG.txt b/LOG.txt new file mode 100644 index 000000000..43d215c12 --- /dev/null +++ b/LOG.txt @@ -0,0 +1,3 @@ + +MAY 2008: Added ISO14443 type A support, Gerhard de Koning Gans + diff --git a/README-gj.txt b/README-gj.txt new file mode 100644 index 000000000..9ce279839 --- /dev/null +++ b/README-gj.txt @@ -0,0 +1,28 @@ +Modifications to 20081211 release by d18c7db on proxmark.org + +This compiles fine under the pre-built windows compile environment ProxSpace + +I make no apologies for the utterly cr@p coding. It's rubbish, you've been warned. + +Changes made to armsrc and winsrc, no changed to fpga code. Works fine with the bootloader and fpga images that you will build using the 20081211 release. + + +Extra functionality includes: + +ISO1443a support +================ + +i) Support for cascade 2 select (used for UID's longer than 4 bytes) +ii) Hard-coded (some) responses in for DESfire + + +ISO15563 support +================ + +i) demodulation all moved onto the arm +ii) Addition of a command, hi15reader (a reader simulator) +iii) Addition of a command, hi15sim (a tag simulator) - not working too well + + + +greg.jones@digitalassurance.com \ No newline at end of file diff --git a/README.txt b/README.txt new file mode 100644 index 000000000..541365c2f --- /dev/null +++ b/README.txt @@ -0,0 +1,156 @@ +INTRO: + +This file contains enough software, logic (for the FPGA), and design +documentation for the hardware that you could, at least in theory, +do something useful with a proxmark3. It has commands to: + + * read any kind of 125 kHz unidirectional tag + * simulate any kind of 125 kHz unidirectional tag + +(This is enough to perform all of the silly cloning attacks, like the +ones that I did at the Capitol in Sacramento, or anything involving +a Verichip. From a technical standpoint, these are not that exciting, +although the `software radio' architecture of the proxmark3 makes it +easy and fun to support new formats.) + +As a bonus, I include some code to use the 13.56 MHz hardware, so you can: + + * do anything that a (medium-range) ISO 15693 reader could + * read an ISO 14443 tag, if you know the higher-layer protocol + * pretend to be an ISO 14443 tag, if you know the higher-layer protocol + * snoop on an ISO 14443 transaction + +I am not actively developing any of this. I have other projects that +seem to be more useful. + +USING THE PACKAGE: + +The software tools required to build include: + + * cygwin or other unix-like tools for Windows + * the Microsoft Visual C++ compiler (I use Version 6) + * arm-elf-gcc; I use WinterMute's build, from http://www.devkitpro.org/ + * Xilinx's WebPack tools + * Modelsim (for test only) + * perl + +It is not necessary to build the FPGA image yourself; a pre-compiled +image is provided, as armsrc/fpgaimg.c. This is a generated file, +though, and you can rebuild it by running fpga/go.bat. + +Documentation is minimal, but see the doc/ directory for what exists. A +previous familiarity with the ARM, with digital signal processing, +and with embedded programming in general is assumed. + +The device is used through a specialized command line interface; for +example, to clone a Verichip, you might type: + + loread ; this reads the tag, and stores the + ; raw samples in memory on the ARM + + losamples ; then we download the samples to + ; the PC + + vchdemod clone ; demodulate the ID, and then put it + ; back in a format that we can replay + + losim ; and then replay it + +To read an ISO 15693 tag, you might type: + + hiread ; read the tag; this involves sending a + ; particular command, and then getting + ; the response (which is stored as raw + ; samples in memory on the ARM) + + hisamples ; then download those samples to the PC + + hi15demod ; and demod them to bits (and check the + ; CRC etc. at the same time) + +Notice that in both cases the signal processing mostly happened on the PC +side; that is of course not practical for a real reader, but it is easier +to initially write your code and debug on the PC side than on the ARM. As +long as you use integer math (and I do), it's trivial to port it over +when you're done. + +The USB driver and bootloader are documented (and available separately +for download, if you wish to use them in another project) at + + http://cq.cx/trivia.pl + + +OBTAINING HARDWARE: + +Most of the ultra-low-volume contract assemblers that have sprung up +(Screaming Circuits, the various cheap Asian suppliers, etc.) could put +something like this together with a reasonable yield. A run of around +a dozen units is probably cost-effective. The BOM includes (possibly- +outdated) component pricing, and everything is available from Digikey +and the usual distributors. + +If you've never assembled a modern circuit board by hand, then this is +not a good place to start. Some of the components (e.g. the crystals) +must not be assembled with a soldering iron, and require hot air. + +The schematics are included; the component values given are not +necessarily correct for all situations, but it should be possible to do +nearly anything you would want with appropriate population options. + +The printed circuit board artwork is also available, as Gerbers and an +Excellon drill file. + + +FUTURE PLANS, ENHANCEMENTS THAT YOU COULD MAKE: + +At some point I should write software involving a proper real-time +operating system for the ARM. I would then provide interrupt-driven +drivers for many of the peripherals that are polled now (the USB, +the data stream from the FPGA), which would make it easier to develop +complex applications. + +It would not be all that hard to implement the ISO 15693 reader properly +(with anticollision, all the commands supported, and so on)--the signal +processing is already written, so it is all straightforward applications +work. + +I have basic support for ISO 14443 as well: a sniffer, a simulated +tag, and a reader. It won't do anything useful unless you fill in the +high-layer protocol. + +Nicer (i.e., closer-to-optimal) implementations of all kinds of signal +processing would be useful as well. + +A practical implementation of the learning-the-tag's-ID-from-what-the- +reader-broadcasts-during-anticollision attacks would be relatively +straightforward. This would involve some signal processing on the FPGA, +but not much else after that. + +It would be neat to write a driver that could stream samples from the A/Ds +over USB to the PC, using the full available bandwidth of USB. I am not +yet sure what that would be good for, but surely something. This would +require a kernel-mode driver under Windows, though, which is more work. + + +LICENSING: + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Jonathan Westhues +user jwesthues, at host cq.cx + +May 2007, Cambridge MA + diff --git a/armsrc/LCD.c b/armsrc/LCD.c new file mode 100644 index 000000000..02c2f6962 --- /dev/null +++ b/armsrc/LCD.c @@ -0,0 +1,123 @@ +#include +#include "apps.h" +#include "LCD.h" + +void LCDSend(unsigned int data) +{ + // 9th bit set for data, clear for command + while ((SPI_STATUS & SPI_STATUS_TX_EMPTY) == 0); // wait for the transfer to complete + // For clarity's sake we pass data with 9th bit clear and commands with 9th + // bit set since they're implemented as defines, se we need to invert bit + SPI_TX_DATA = data^0x100; // Send the data/command +} + +void LCDSetXY(unsigned char x, unsigned char y) +{ + LCDSend(PPASET); // page start/end ram + LCDSend(y); // Start Page to display to + LCDSend(131); // End Page to display to + + LCDSend(PCASET); // column start/end ram + LCDSend(x); // Start Column to display to + LCDSend(131); // End Column to display to +} + +void LCDSetPixel(unsigned char x, unsigned char y, unsigned char color) +{ + LCDSetXY(x,y); // Set position + LCDSend(PRAMWR); // Now write the pixel to the display + LCDSend(color); // Write the data in the specified Color +} + +void LCDFill (unsigned char xs,unsigned char ys,unsigned char width,unsigned char height, unsigned char color) +{ + unsigned char i,j; + + for (i=0;i < height;i++) // Number of horizontal lines + { + LCDSetXY(xs,ys+i); // Goto start of fill area (Top Left) + LCDSend(PRAMWR); // Write to display + + for (j=0;j < width;j++) // pixels per line + LCDSend(color); + } +} + +void LCDString (char *lcd_string, const char *font_style,unsigned char x, unsigned char y, unsigned char fcolor, unsigned char bcolor) +{ + unsigned int i; + unsigned char mask=0, px, py, xme, yme, offset; + const char *data; + + data = font_style; // point to the start of the font table + + xme = *data; // get font x width + data++; + yme = *data; // get font y length + data++; + offset = *data; // get data bytes per font + + do + { + // point to data in table to be loaded + data = (font_style + offset) + (offset * (int)(*lcd_string - 32)); + + for (i=0;i < yme;i++) { + mask |=0x80; + + for (px=x; px < (x + xme); px++) { + py= y + i; + + if (*data & mask) LCDSetPixel (px,py,fcolor); + else LCDSetPixel (px,py,bcolor); + + mask>>=1; + } + data++; + } + x+=xme; + + lcd_string++; // next character in string + + } while(*lcd_string !='\0'); // keep spitting chars out until end of string +} + +void LCDReset(void) +{ + LED_A_ON(); + SetupSpi(SPI_LCD_MODE); + LCD_RESET_LOW(); + SpinDelay(100); + + LCD_RESET_HIGH(); + SpinDelay(100); + LED_A_OFF(); +} + +void LCDInit(void) +{ + int i; + + LCDReset(); + + LCDSend(PSWRESET); // software reset + SpinDelay(100); + LCDSend(PSLEEPOUT); // exit sleep mode + LCDSend(PBSTRON); // booster on + LCDSend(PDISPON); // display on + LCDSend(PNORON); // normal on + LCDSend(PMADCTL); // rotate display 180 deg + LCDSend(0xC0); + + LCDSend(PCOLMOD); // color mode + LCDSend(0x02); // 8bpp color mode + + LCDSend(PSETCON); // set contrast + LCDSend(0xDC); + + // clear display + LCDSetXY(0,0); + LCDSend(PRAMWR); // Write to display + i=LCD_XRES*LCD_YRES; + while(i--) LCDSend(WHITE); +} diff --git a/armsrc/LCD.h b/armsrc/LCD.h new file mode 100644 index 000000000..27971eba4 --- /dev/null +++ b/armsrc/LCD.h @@ -0,0 +1,120 @@ +#ifndef __LCD +#define __LCD + +#define LCD_RESET_HIGH() PIO_OUTPUT_DATA_SET |= (1< +#include "apps.h" +#include "fonts.h" +#include "LCD.h" + +// The large multi-purpose buffer, typically used to hold A/D samples, +// maybe pre-processed in some way. +DWORD BigBuf[16000]; + +//============================================================================= +// A buffer where we can queue things up to be sent through the FPGA, for +// any purpose (fake tag, as reader, whatever). We go MSB first, since that +// is the order in which they go out on the wire. +//============================================================================= + +BYTE ToSend[256]; +int ToSendMax; +static int ToSendBit; + +void ToSendReset(void) +{ + ToSendMax = -1; + ToSendBit = 8; +} + +void ToSendStuffBit(int b) +{ + if(ToSendBit >= 8) { + ToSendMax++; + ToSend[ToSendMax] = 0; + ToSendBit = 0; + } + + if(b) { + ToSend[ToSendMax] |= (1 << (7 - ToSendBit)); + } + + ToSendBit++; + + if(ToSendBit >= sizeof(ToSend)) { + ToSendBit = 0; + DbpString("ToSendStuffBit overflowed!"); + } +} + +//============================================================================= +// Debug print functions, to go out over USB, to the usual PC-side client. +//============================================================================= + +void DbpString(char *str) +{ + UsbCommand c; + c.cmd = CMD_DEBUG_PRINT_STRING; + c.ext1 = strlen(str); + memcpy(c.d.asBytes, str, c.ext1); + + UsbSendPacket((BYTE *)&c, sizeof(c)); + // TODO fix USB so stupid things like this aren't req'd + SpinDelay(50); +} + +void DbpIntegers(int x1, int x2, int x3) +{ + UsbCommand c; + c.cmd = CMD_DEBUG_PRINT_INTEGERS; + c.ext1 = x1; + c.ext2 = x2; + c.ext3 = x3; + + UsbSendPacket((BYTE *)&c, sizeof(c)); + // XXX + SpinDelay(50); +} + +void AcquireRawAdcSamples125k(BOOL at134khz) +{ + BYTE *dest = (BYTE *)BigBuf; + int n = sizeof(BigBuf); + int i; + + memset(dest,0,n); + + if(at134khz) { + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER | FPGA_LF_READER_USE_134_KHZ); + } else { + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER | FPGA_LF_READER_USE_125_KHZ); + } + + // Connect the A/D to the peak-detected low-frequency path. + SetAdcMuxFor(GPIO_MUXSEL_LOPKD); + + // Give it a bit of time for the resonant antenna to settle. + SpinDelay(50); + + // Now set up the SSC to get the ADC samples that are now streaming at us. + FpgaSetupSsc(); + + i = 0; + for(;;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = 0x43; + LED_D_ON(); + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + dest[i] = (BYTE)SSC_RECEIVE_HOLDING; + i++; + LED_D_OFF(); + if(i >= n) { + break; + } + } + } + DbpIntegers(dest[0], dest[1], at134khz); +} + +//----------------------------------------------------------------------------- +// Read an ADC channel and block till it completes, then return the result +// in ADC units (0 to 1023). Also a routine to average sixteen samples and +// return that. +//----------------------------------------------------------------------------- +static int ReadAdc(int ch) +{ + DWORD d; + + ADC_CONTROL = ADC_CONTROL_RESET; + ADC_MODE = ADC_MODE_PRESCALE(32) | ADC_MODE_STARTUP_TIME(16) | + ADC_MODE_SAMPLE_HOLD_TIME(8); + ADC_CHANNEL_ENABLE = ADC_CHANNEL(ch); + + ADC_CONTROL = ADC_CONTROL_START; + while(!(ADC_STATUS & ADC_END_OF_CONVERSION(ch))) + ; + d = ADC_CHANNEL_DATA(ch); + + return d; +} + +static int AvgAdc(int ch) +{ + int i; + int a = 0; + + for(i = 0; i < 32; i++) { + a += ReadAdc(ch); + } + + return (a + 15) >> 5; +} + +void MeasureAntennaTuning(void) +{ +// Impedances are Zc = 1/(j*omega*C), in ohms +#define LF_TUNING_CAP_Z 1273 // 1 nF @ 125 kHz +#define HF_TUNING_CAP_Z 235 // 50 pF @ 13.56 MHz + + int vLf125, vLf134, vHf; // in mV + + UsbCommand c; + + // Let the FPGA drive the low-frequency antenna around 125 kHz. + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER | FPGA_LF_READER_USE_125_KHZ); + SpinDelay(20); + vLf125 = AvgAdc(4); + // Vref = 3.3V, and a 10000:240 voltage divider on the input + // can measure voltages up to 137500 mV + vLf125 = (137500 * vLf125) >> 10; + + // Let the FPGA drive the low-frequency antenna around 134 kHz. + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER | FPGA_LF_READER_USE_134_KHZ); + SpinDelay(20); + vLf134 = AvgAdc(4); + // Vref = 3.3V, and a 10000:240 voltage divider on the input + // can measure voltages up to 137500 mV + vLf134 = (137500 * vLf134) >> 10; + + // Let the FPGA drive the high-frequency antenna around 13.56 MHz. + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); + SpinDelay(20); + vHf = AvgAdc(5); + // Vref = 3300mV, and an 10:1 voltage divider on the input + // can measure voltages up to 33000 mV + vHf = (33000 * vHf) >> 10; + + c.cmd = CMD_MEASURED_ANTENNA_TUNING; + c.ext1 = (vLf125 << 0) | (vLf134 << 16); + c.ext2 = vHf; + c.ext3 = (LF_TUNING_CAP_Z << 0) | (HF_TUNING_CAP_Z << 16); + UsbSendPacket((BYTE *)&c, sizeof(c)); +} + +void SimulateTagLowFrequency(int period) +{ + int i; + BYTE *tab = (BYTE *)BigBuf; + + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_SIMULATOR); + + PIO_ENABLE = (1 << GPIO_SSC_DOUT) | (1 << GPIO_SSC_CLK); + + PIO_OUTPUT_ENABLE = (1 << GPIO_SSC_DOUT); + PIO_OUTPUT_DISABLE = (1 << GPIO_SSC_CLK); + +#define SHORT_COIL() LOW(GPIO_SSC_DOUT) +#define OPEN_COIL() HIGH(GPIO_SSC_DOUT) + + i = 0; + for(;;) { + while(!(PIO_PIN_DATA_STATUS & (1<0xFFF) { + DbpString("Tags can only have 44 bits."); + return; + } + fc(0,&n); + // special start of frame marker containing invalid bit sequences + fc(8, &n); fc(8, &n); // invalid + fc(8, &n); fc(10, &n); // logical 0 + fc(10, &n); fc(10, &n); // invalid + fc(8, &n); fc(10, &n); // logical 0 + + WDT_HIT(); + // manchester encode bits 43 to 32 + for (i=11; i>=0; i--) { + if ((i%4)==3) fc(0,&n); + if ((hi>>i)&1) { + fc(10, &n); fc(8, &n); // low-high transition + } else { + fc(8, &n); fc(10, &n); // high-low transition + } + } + + WDT_HIT(); + // manchester encode bits 31 to 0 + for (i=31; i>=0; i--) { + if ((i%4)==3) fc(0,&n); + if ((lo>>i)&1) { + fc(10, &n); fc(8, &n); // low-high transition + } else { + fc(8, &n); fc(10, &n); // high-low transition + } + } + + LED_A_ON(); + SimulateTagLowFrequency(n); + LED_A_OFF(); +} + +// loop to capture raw HID waveform then FSK demodulate the TAG ID from it +static void CmdHIDdemodFSK(void) +{ + BYTE *dest = (BYTE *)BigBuf; + int m=0, n=0, i=0, idx=0, found=0, lastval=0; + DWORD hi=0, lo=0; + + FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER | FPGA_LF_READER_USE_125_KHZ); + + // Connect the A/D to the peak-detected low-frequency path. + SetAdcMuxFor(GPIO_MUXSEL_LOPKD); + + // Give it a bit of time for the resonant antenna to settle. + SpinDelay(50); + + // Now set up the SSC to get the ADC samples that are now streaming at us. + FpgaSetupSsc(); + + for(;;) { + WDT_HIT(); + LED_A_ON(); + if(BUTTON_PRESS()) { + LED_A_OFF(); + return; + } + + i = 0; + m = sizeof(BigBuf); + memset(dest,128,m); + for(;;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = 0x43; + LED_D_ON(); + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + dest[i] = (BYTE)SSC_RECEIVE_HOLDING; + // we don't care about actual value, only if it's more or less than a + // threshold essentially we capture zero crossings for later analysis + if(dest[i] < 127) dest[i] = 0; else dest[i] = 1; + i++; + LED_D_OFF(); + if(i >= m) { + break; + } + } + } + + // FSK demodulator + + // sync to first lo-hi transition + for( idx=1; idx>1)&0xffff); + hi=0; + lo=0; + found=0; + } + } + if (found) { + if (dest[idx] && (!dest[idx+1]) ) { + hi=(hi<<1)|(lo>>31); + lo=(lo<<1)|0; + } else if ( (!dest[idx]) && dest[idx+1]) { + hi=(hi<<1)|(lo>>31); + lo=(lo<<1)|1; + } else { + found=0; + hi=0; + lo=0; + } + idx++; + } + if ( dest[idx] && dest[idx+1] && dest[idx+2] && (!dest[idx+3]) && (!dest[idx+4]) && (!dest[idx+5]) ) + { + found=1; + idx+=6; + if (found && (hi|lo)) { + DbpString("TAG ID"); + DbpIntegers(hi, lo, (lo>>1)&0xffff); + hi=0; + lo=0; + found=0; + } + } + } + WDT_HIT(); + } +} + +void SimulateTagHfListen(void) +{ + BYTE *dest = (BYTE *)BigBuf; + int n = sizeof(BigBuf); + BYTE v = 0; + int i; + int p = 0; + + // We're using this mode just so that I can test it out; the simulated + // tag mode would work just as well and be simpler. + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ | FPGA_HF_READER_RX_XCORR_SNOOP); + + // We need to listen to the high-frequency, peak-detected path. + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + + FpgaSetupSsc(); + + i = 0; + for(;;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = 0xff; + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + BYTE r = (BYTE)SSC_RECEIVE_HOLDING; + + v <<= 1; + if(r & 1) { + v |= 1; + } + p++; + + if(p >= 8) { + dest[i] = v; + v = 0; + p = 0; + i++; + + if(i >= n) { + break; + } + } + } + } + DbpString("simulate tag (now type bitsamples)"); +} + +void UsbPacketReceived(BYTE *packet, int len) +{ + UsbCommand *c = (UsbCommand *)packet; + + switch(c->cmd) { + case CMD_ACQUIRE_RAW_ADC_SAMPLES_125K: + AcquireRawAdcSamples125k(c->ext1); + break; + + case CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_15693: + AcquireRawAdcSamplesIso15693(); + break; + + case CMD_READER_ISO_15693: + ReaderIso15693(c->ext1); + break; + + case CMD_SIMTAG_ISO_15693: + SimTagIso15693(c->ext1); + break; + + + case CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443: + AcquireRawAdcSamplesIso14443(c->ext1); + break; + + case CMD_READER_ISO_14443a: + ReaderIso14443a(c->ext1); + break; + + case CMD_SNOOP_ISO_14443: + SnoopIso14443(); + break; + + case CMD_SNOOP_ISO_14443a: + SnoopIso14443a(); + break; + + case CMD_SIMULATE_TAG_HF_LISTEN: + SimulateTagHfListen(); + break; + + case CMD_SIMULATE_TAG_ISO_14443: + SimulateIso14443Tag(); + break; + + case CMD_SIMULATE_TAG_ISO_14443a: + SimulateIso14443aTag(c->ext1, c->ext2); // ## Simulate iso14443a tag - pass tag type & UID + break; + + case CMD_MEASURE_ANTENNA_TUNING: + MeasureAntennaTuning(); + break; + + case CMD_HID_DEMOD_FSK: + CmdHIDdemodFSK(); // Demodulate HID tag + break; + + case CMD_HID_SIM_TAG: + CmdHIDsimTAG(c->ext1, c->ext2); // Simulate HID tag by ID + break; + + case CMD_FPGA_MAJOR_MODE_OFF: // ## FPGA Control + LED_C_ON(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + SpinDelay(200); + LED_C_OFF(); + break; + + case CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K: + case CMD_DOWNLOAD_RAW_BITS_TI_TYPE: { + UsbCommand n; + if(c->cmd == CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K) { + n.cmd = CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K; + } else { + n.cmd = CMD_DOWNLOADED_RAW_BITS_TI_TYPE; + } + n.ext1 = c->ext1; + memcpy(n.d.asDwords, BigBuf+c->ext1, 12*sizeof(DWORD)); + UsbSendPacket((BYTE *)&n, sizeof(n)); + break; + } + case CMD_DOWNLOADED_SIM_SAMPLES_125K: { + BYTE *b = (BYTE *)BigBuf; + memcpy(b+c->ext1, c->d.asBytes, 48); + break; + } + case CMD_SIMULATE_TAG_125K: + LED_A_ON(); + SimulateTagLowFrequency(c->ext1); + LED_A_OFF(); + break; + + case CMD_LCD_RESET: + LCDReset(); + break; + + case CMD_LCD: + LCDSend(c->ext1); + break; + + case CMD_SETUP_WRITE: + case CMD_FINISH_WRITE: + USB_D_PLUS_PULLUP_OFF(); + SpinDelay(1000); + SpinDelay(1000); + RSTC_CONTROL = RST_CONTROL_KEY | RST_CONTROL_PROCESSOR_RESET; + for(;;) { + // We're going to reset, and the bootrom will take control. + } + break; + + default: + DbpString("unknown command"); + break; + } +} + +void AppMain(void) +{ + memset(BigBuf,0,sizeof(BigBuf)); + SpinDelay(100); + + LED_D_OFF(); + LED_C_OFF(); + LED_B_OFF(); + LED_A_OFF(); + + UsbStart(); + + // The FPGA gets its clock from us from PCK0 output, so set that up. + PIO_PERIPHERAL_B_SEL = (1 << GPIO_PCK0); + PIO_DISABLE = (1 << GPIO_PCK0); + PMC_SYS_CLK_ENABLE = PMC_SYS_CLK_PROGRAMMABLE_CLK_0; + // PCK0 is PLL clock / 4 = 96Mhz / 4 = 24Mhz + PMC_PROGRAMMABLE_CLK_0 = PMC_CLK_SELECTION_PLL_CLOCK | + PMC_CLK_PRESCALE_DIV_4; + PIO_OUTPUT_ENABLE = (1 << GPIO_PCK0); + + // Reset SPI + SPI_CONTROL = SPI_CONTROL_RESET; + // Reset SSC + SSC_CONTROL = SSC_CONTROL_RESET; + + // Load the FPGA image, which we have stored in our flash. + FpgaDownloadAndGo(); + + LCDInit(); + + // test text on different colored backgrounds + LCDString(" The quick brown fox ", &FONT6x8,1,1+8*0,WHITE ,BLACK ); + LCDString(" jumped over the ", &FONT6x8,1,1+8*1,BLACK ,WHITE ); + LCDString(" lazy dog. ", &FONT6x8,1,1+8*2,YELLOW ,RED ); + LCDString(" AaBbCcDdEeFfGgHhIiJj ", &FONT6x8,1,1+8*3,RED ,GREEN ); + LCDString(" KkLlMmNnOoPpQqRrSsTt ", &FONT6x8,1,1+8*4,MAGENTA,BLUE ); + LCDString("UuVvWwXxYyZz0123456789", &FONT6x8,1,1+8*5,BLUE ,YELLOW); + LCDString("`-=[]_;',./~!@#$%^&*()", &FONT6x8,1,1+8*6,BLACK ,CYAN ); + LCDString(" _+{}|:\\\"<>? ",&FONT6x8,1,1+8*7,BLUE ,MAGENTA); + + // color bands + LCDFill(0, 1+8* 8, 132, 8, BLACK); + LCDFill(0, 1+8* 9, 132, 8, WHITE); + LCDFill(0, 1+8*10, 132, 8, RED); + LCDFill(0, 1+8*11, 132, 8, GREEN); + LCDFill(0, 1+8*12, 132, 8, BLUE); + LCDFill(0, 1+8*13, 132, 8, YELLOW); + LCDFill(0, 1+8*14, 132, 8, CYAN); + LCDFill(0, 1+8*15, 132, 8, MAGENTA); + + for(;;) { + UsbPoll(FALSE); + WDT_HIT(); + } +} + +void SpinDelay(int ms) +{ + int ticks = (48000*ms) >> 10; + + // Borrow a PWM unit for my real-time clock + PWM_ENABLE = PWM_CHANNEL(0); + // 48 MHz / 1024 gives 46.875 kHz + PWM_CH_MODE(0) = PWM_CH_MODE_PRESCALER(10); + PWM_CH_DUTY_CYCLE(0) = 0; + PWM_CH_PERIOD(0) = 0xffff; + + WORD start = (WORD)PWM_CH_COUNTER(0); + + for(;;) { + WORD now = (WORD)PWM_CH_COUNTER(0); + if(now == (WORD)(start + ticks)) { + return; + } + WDT_HIT(); + } +} diff --git a/armsrc/apps.h b/armsrc/apps.h new file mode 100644 index 000000000..e09c8357d --- /dev/null +++ b/armsrc/apps.h @@ -0,0 +1,77 @@ +//----------------------------------------------------------------------------- +// Definitions internal to the app source. +// Jonathan Westhues, Aug 2005 +// Added ISO14443-A support by Gerhard de Koning Gans, April 2008 +//----------------------------------------------------------------------------- + +#ifndef __APPS_H +#define __APPS_H + +/// appmain.c +void AppMain(void); +void DbpIntegers(int a, int b, int c); +void DbpString(char *str); +void SpinDelay(int ms); +void ToSendStuffBit(int b); +void ToSendReset(void); +extern int ToSendMax; +extern BYTE ToSend[]; +extern DWORD BigBuf[]; + +/// fpga.c +void FpgaWriteConfWord(BYTE v); +void FpgaDownloadAndGo(void); +void FpgaSetupSsc(void); +void SetupSpi(int mode); +void FpgaSetupSscDma(BYTE *buf, int len); +void SetAdcMuxFor(int whichGpio); + +// Definitions for the FPGA configuration word. +#define FPGA_MAJOR_MODE_LF_READER (0<<5) +#define FPGA_MAJOR_MODE_LF_SIMULATOR (1<<5) +#define FPGA_MAJOR_MODE_HF_READER_TX (2<<5) +#define FPGA_MAJOR_MODE_HF_READER_RX_XCORR (3<<5) +#define FPGA_MAJOR_MODE_HF_SIMULATOR (4<<5) +#define FPGA_MAJOR_MODE_HF_ISO14443A (5<<5) +#define FPGA_MAJOR_MODE_UNUSED (6<<5) +#define FPGA_MAJOR_MODE_OFF (7<<5) +// Options for the LF reader +#define FPGA_LF_READER_USE_125_KHZ (1<<3) +#define FPGA_LF_READER_USE_134_KHZ (0<<3) +// Options for the HF reader, tx to tag +#define FPGA_HF_READER_TX_SHALLOW_MOD (1<<0) +// Options for the HF reader, correlating against rx from tag +#define FPGA_HF_READER_RX_XCORR_848_KHZ (1<<0) +#define FPGA_HF_READER_RX_XCORR_SNOOP (1<<1) +// Options for the HF simulated tag, how to modulate +#define FPGA_HF_SIMULATOR_NO_MODULATION (0<<0) +#define FPGA_HF_SIMULATOR_MODULATE_BPSK (1<<0) +// Options for ISO14443A +#define FPGA_HF_ISO14443A_SNIFFER (0<<0) +#define FPGA_HF_ISO14443A_TAGSIM_LISTEN (1<<0) +#define FPGA_HF_ISO14443A_TAGSIM_MOD (2<<0) +#define FPGA_HF_ISO14443A_READER_LISTEN (3<<0) +#define FPGA_HF_ISO14443A_READER_MOD (4<<0) + +/// iso14443.h +void SimulateIso14443Tag(void); +void AcquireRawAdcSamplesIso14443(DWORD parameter); +void SnoopIso14443(void); + +/// iso14443a.h +void SnoopIso14443a(void); +void SimulateIso14443aTag(int tagType, int TagUid); // ## simulate iso14443a tag +void ReaderIso14443a(DWORD parameter); + +/// iso15693.h +void AcquireRawAdcSamplesIso15693(void); +void ReaderIso15693(DWORD parameter); // Simulate an ISO15693 reader - greg +void SimTagIso15693(DWORD parameter); // simulate an ISO15693 tag - greg + +/// util.h +int strlen(char *str); +void *memcpy(void *dest, const void *src, int len); +void *memset(void *dest, int c, int len); +int memcmp(const void *av, const void *bv, int len); + +#endif diff --git a/armsrc/example_lcd.c b/armsrc/example_lcd.c new file mode 100644 index 000000000..a2267ba99 --- /dev/null +++ b/armsrc/example_lcd.c @@ -0,0 +1,269 @@ +unsigned char somestring[25]; + +//********************************************************************* +//******************** SYSTERM HEARTBEAT @ 10 ms ********************* +//********************************************************************* +void InitSPI (void) +{ + //set functionalite to pins: + //port0.11 -> NPCS0 + //port0.12 -> MISO + //port0.13 -> MOSI + //port0.14 -> SPCK + PIOA_PDR = BIT11 | BIT12 | BIT13 | BIT14; + PIOA_ASR = BIT11 | BIT12 | BIT13 | BIT14; + PIOA_BSR = 0; + + + PMC_PCER |= 1 << 5; // Enable SPI timer clock. + + /**** Fixed mode ****/ + SPI_CR = 0x81; //SPI Enable, Sowtware reset + SPI_CR = 0x01; //SPI Enable + + + + SPI_MR = 0x000E0011; //Master mode + SPI_CSR0 = 0x01010B11; //9 bit + +} + +//********************************************************************* +//*************************** Task 1 ******************************** +//********************************************************************* +void Task_1(void *p) +{ + char beat=0; // just flash the onboard LED for Heatbeat + + while(1) + { + if(beat) + { + PIOA_SODR = BIT18; + beat=0; + } + else + { + PIOA_CODR = BIT18; + beat=1; + } + + ctl_timeout_wait(ctl_get_current_time()+ 150); + + } +} +//********************************************************************* +//*************************** Task 2 ******************************** +//********************************************************************* +void Task_2(void *p) +{ + unsigned long z; + unsigned int x,y; + unsigned char a,b,c,d,e; + + char seconds,minutes,hours; + + unsigned int nowold,tenths; + + + InitLCD(); + + +/******* Put smiley face up in 4096 color mode *******/ + LCD_Fill(0,0,132,132,Black); + + LCD_Set_Resolution(HIGH_RES); // set 4096 color mode + +// ShowImage_4096(0,0,smiley); + LCD_Set_Resolution(LOW_RES); // set 256 color mode + + ctl_timeout_wait(ctl_get_current_time()+ 4000); // wait 4 seconds to view it + +/******* Do some static on screen *******/ + + LCD_Fill(0,0,132,132,Black); + + for(z=0;z<100000;z++) + { + while( (a = rand()) > 132); + while( (b = rand()) > 132); + c = rand(); + LCD_PixelPut(a,b,c); + } + +/******* Do some lines on screen *******/ + LCD_Fill(0,0,132,132,Black); + + for(z=1;z<300;z++) + { + while( (a = rand()) > 132); + while( (b = rand()) > 132); + while( (c = rand()) > 132); + while( (d = rand()) > 132); + e = rand(); // pick color + + LCD_Line(a,b,c,d,e); + ctl_timeout_wait(ctl_get_current_time()+ 10); + } + +/******* Do some Boxes on screen *******/ + LCD_Fill(0,0,132,132,Black); + + for(z=0;z<300;z++) + { + + while( (a = rand()) > 132); + while( (b = rand()) > 132); + while( (c = rand()) > 132); + while( (d = rand()) > 132); + + e = rand(); // pick color + LCD_Box(a,b,c,d,e); + + ctl_timeout_wait(ctl_get_current_time()+ 10); + } +/******* Do some Circles on screen *******/ + LCD_Fill(0,0,132,132,Black); + + for(z=0;z<100;z++) + { + + while( (a = rand()) > 132); + while( (b = rand()) > 132); + while( (c = rand()) > 127); // diameter + + d = rand(); // pick color + LCD_Circle(a,b,c,d); + + ctl_timeout_wait(ctl_get_current_time()+ 10); + } + +/******* Do some Thick Circles on screen *******/ + LCD_Fill(0,0,132,132,Black); + + for(z=0;z<25;z++) + { + while( (a = rand()) > 132); + while( (b = rand()) > 132); + while( (c = rand()) > 40); // diameter + while( (d = rand()) > 10); // wall thicknes + e = rand(); // pick color + LCD_Thick_Circle(a,b,c,d,e); + + ctl_timeout_wait(ctl_get_current_time()+ 1); + } + +/******* Do something funky to wipe screen *******/ + b=0; + + for(a=0;a<131;a++) + { + LCD_Line(a,b,65,65,0x62); + } + for(b=0;b<131;b++) + { + LCD_Line(a,b,65,65,0x62); + } + for(;a>1;a--) + { + LCD_Line(a,b,65,65,0x62); + } + for(;b>1;b--) + { + LCD_Line(a,b,65,65,0x62); + } + + ctl_timeout_wait(ctl_get_current_time()+ 1000); + +/******* Show Image scrolling *******/ + LCD_Fill(0,0,132,132,Black); + + ShowImage(0,50,sparkfun); + + sprintf(somestring,"Thanks SparkFun"); + LCD_String(somestring,&FONT8x8F[0][0],5,10,LightGreen,Black); + + ctl_timeout_wait(ctl_get_current_time()+ 2000); // hold sparkfun image for a bit + + for(y=50;y<140;y++) + { + LCD_Line(0,y-1,132,y-1,Black); // wipe the white line as it moves down + ShowImage(0,y,sparkfun); // move image to Y location + ctl_timeout_wait(ctl_get_current_time()+ 25); // wait a bit + } + +/******* Run radar in loop with example fonts displayed *******/ + LCD_Fill(0,0,132,132,Black); + + LCD_Thick_Circle(66,66,30,2,DarkBlue); + + y=0; + + while (1) + { + LCD_Circle_Line(66,66,28,0,y,LightGreen); + + ctl_timeout_wait(ctl_get_current_time()+ 1); + + tenths = ctl_current_time / 1000; + + if(tenths != nowold) + { + nowold = tenths; + + if(++seconds == 60) + { + seconds = 0; + + if(++minutes == 60) + { + minutes=0; + hours++; + } + } + } + + + printf("a=%6lu - b=%6lu - c=%6lu - d=%6lu : Time=%lu\r\n",a,b,c,d,ctl_current_time); + + sprintf(somestring,"%05lu",y); + LCD_String(somestring,&FONT6x8[0][0],52,25,White,Black); + + sprintf(somestring,"Time:%02u:%02u:%02u",hours,minutes,seconds); + LCD_String(somestring,&FONT8x8F[0][0],14,10,DarkRed,Black); + + sprintf(somestring,"Time:%02u:%02u:%02u",hours,minutes,seconds); + LCD_String(somestring,&FONT8x16[0][0],14,115,LightGreen,Black); + + LCD_Circle_Line(66,66,28,0,y,Black); + + if(++y==360) + { + y=0; + } + + ctl_timeout_wait(ctl_get_current_time()+ 10); + + } +} + +/************************************************************************* + ********************* Main Module ************************* + ********************* ************************* + ********************* Initialize Program ************************* + ********************* Sequences ************************* + ********************* ************************* + *************************************************************************/ +int main(void) +{ + BoardInit(); + + InitSPI(); + + while (1) + { + Idle(); + } + + return 0; +} diff --git a/armsrc/fonts.c b/armsrc/fonts.c new file mode 100644 index 000000000..81e99ce5b --- /dev/null +++ b/armsrc/fonts.c @@ -0,0 +1,300 @@ +const char FONT6x8[97][8] = { + {0x06,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns, rows, bytes per char + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space + {0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00}, // ! + {0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00}, // " + {0x50,0x50,0xF8,0x50,0xF8,0x50,0x50,0x00}, // # + {0x20,0x78,0xA0,0x70,0x28,0xF0,0x20,0x00}, // $ + {0xC0,0xC8,0x10,0x20,0x40,0x98,0x18,0x00}, // % + {0x40,0xA0,0xA0,0x40,0xA8,0x90,0x68,0x00}, // & + {0x30,0x30,0x20,0x40,0x00,0x00,0x00,0x00}, // ' + {0x10,0x20,0x40,0x40,0x40,0x20,0x10,0x00}, // ( + {0x40,0x20,0x10,0x10,0x10,0x20,0x40,0x00}, // ) + {0x00,0x20,0xA8,0x70,0x70,0xA8,0x20,0x00}, // * + {0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00}, // + + {0x00,0x00,0x00,0x00,0x30,0x30,0x20,0x40}, // , + {0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00}, // - + {0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00}, // . + {0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00}, // / + {0x70,0x88,0x88,0xA8,0x88,0x88,0x70,0x00}, // 0 + {0x20,0x60,0x20,0x20,0x20,0x20,0x70,0x00}, // 1 + {0x70,0x88,0x08,0x70,0x80,0x80,0xF8,0x00}, // 2 + {0xF8,0x08,0x10,0x30,0x08,0x88,0x70,0x00}, // 3 + {0x10,0x30,0x50,0x90,0xF8,0x10,0x10,0x00}, // 4 + {0xF8,0x80,0xF0,0x08,0x08,0x88,0x70,0x00}, // 5 + {0x38,0x40,0x80,0xF0,0x88,0x88,0x70,0x00}, // 6 + {0xF8,0x08,0x08,0x10,0x20,0x40,0x80,0x00}, // 7 + {0x70,0x88,0x88,0x70,0x88,0x88,0x70,0x00}, // 8 + {0x70,0x88,0x88,0x78,0x08,0x10,0xE0,0x00}, // 9 + {0x00,0x00,0x20,0x00,0x20,0x00,0x00,0x00}, // : + {0x00,0x00,0x20,0x00,0x20,0x20,0x40,0x00}, // ; + {0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x00}, // < + {0x00,0x00,0xF8,0x00,0xF8,0x00,0x00,0x00}, // = + {0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x00}, // > + {0x70,0x88,0x08,0x30,0x20,0x00,0x20,0x00}, // ? + {0x70,0x88,0xA8,0xB8,0xB0,0x80,0x78,0x00}, // @ + {0x20,0x50,0x88,0x88,0xF8,0x88,0x88,0x00}, // A + {0xF0,0x88,0x88,0xF0,0x88,0x88,0xF0,0x00}, // B + {0x70,0x88,0x80,0x80,0x80,0x88,0x70,0x00}, // C + {0xF0,0x88,0x88,0x88,0x88,0x88,0xF0,0x00}, // D + {0xF8,0x80,0x80,0xF0,0x80,0x80,0xF8,0x00}, // E + {0xF8,0x80,0x80,0xF0,0x80,0x80,0x80,0x00}, // F + {0x78,0x88,0x80,0x80,0x98,0x88,0x78,0x00}, // G + {0x88,0x88,0x88,0xF8,0x88,0x88,0x88,0x00}, // H + {0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x00}, // I + {0x38,0x10,0x10,0x10,0x10,0x90,0x60,0x00}, // J + {0x88,0x90,0xA0,0xC0,0xA0,0x90,0x88,0x00}, // K + {0x80,0x80,0x80,0x80,0x80,0x80,0xF8,0x00}, // L + {0x88,0xD8,0xA8,0xA8,0xA8,0x88,0x88,0x00}, // M + {0x88,0x88,0xC8,0xA8,0x98,0x88,0x88,0x00}, // N + {0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00}, // O + {0xF0,0x88,0x88,0xF0,0x80,0x80,0x80,0x00}, // P + {0x70,0x88,0x88,0x88,0xA8,0x90,0x68,0x00}, // Q + {0xF0,0x88,0x88,0xF0,0xA0,0x90,0x88,0x00}, // R + {0x70,0x88,0x80,0x70,0x08,0x88,0x70,0x00}, // S + {0xF8,0xA8,0x20,0x20,0x20,0x20,0x20,0x00}, // T + {0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00}, // U + {0x88,0x88,0x88,0x88,0x88,0x50,0x20,0x00}, // V + {0x88,0x88,0x88,0xA8,0xA8,0xA8,0x50,0x00}, // W + {0x88,0x88,0x50,0x20,0x50,0x88,0x88,0x00}, // X + {0x88,0x88,0x50,0x20,0x20,0x20,0x20,0x00}, // Y + {0xF8,0x08,0x10,0x70,0x40,0x80,0xF8,0x00}, // Z + {0x78,0x40,0x40,0x40,0x40,0x40,0x78,0x00}, // [ + {0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00}, // backslash + {0x78,0x08,0x08,0x08,0x08,0x08,0x78,0x00}, // ] + {0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00}, // ^ + {0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00}, // _ + {0x60,0x60,0x20,0x10,0x00,0x00,0x00,0x00}, // ` + {0x00,0x00,0x60,0x10,0x70,0x90,0x78,0x00}, // a + {0x80,0x80,0xB0,0xC8,0x88,0xC8,0xB0,0x00}, // b + {0x00,0x00,0x70,0x88,0x80,0x88,0x70,0x00}, // c + {0x08,0x08,0x68,0x98,0x88,0x98,0x68,0x00}, // d + {0x00,0x00,0x70,0x88,0xF8,0x80,0x70,0x00}, // e + {0x10,0x28,0x20,0x70,0x20,0x20,0x20,0x00}, // f + {0x00,0x00,0x70,0x98,0x98,0x68,0x08,0x70}, // g + {0x80,0x80,0xB0,0xC8,0x88,0x88,0x88,0x00}, // h + {0x20,0x00,0x60,0x20,0x20,0x20,0x70,0x00}, // i + {0x10,0x00,0x10,0x10,0x10,0x90,0x60,0x00}, // j + {0x80,0x80,0x90,0xA0,0xC0,0xA0,0x90,0x00}, // k + {0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00}, // l + {0x00,0x00,0xD0,0xA8,0xA8,0xA8,0xA8,0x00}, // m + {0x00,0x00,0xB0,0xC8,0x88,0x88,0x88,0x00}, // n + {0x00,0x00,0x70,0x88,0x88,0x88,0x70,0x00}, // o + {0x00,0x00,0xB0,0xC8,0xC8,0xB0,0x80,0x80}, // p + {0x00,0x00,0x68,0x98,0x98,0x68,0x08,0x08}, // q + {0x00,0x00,0xB0,0xC8,0x80,0x80,0x80,0x00}, // r + {0x00,0x00,0x78,0x80,0x70,0x08,0xF0,0x00}, // s + {0x20,0x20,0xF8,0x20,0x20,0x28,0x10,0x00}, // t + {0x00,0x00,0x88,0x88,0x88,0x98,0x68,0x00}, // u + {0x00,0x00,0x88,0x88,0x88,0x50,0x20,0x00}, // v + {0x00,0x00,0x88,0x88,0xA8,0xA8,0x50,0x00}, // w + {0x00,0x00,0x88,0x50,0x20,0x50,0x88,0x00}, // x + {0x00,0x00,0x88,0x88,0x78,0x08,0x88,0x70}, // y + {0x00,0x00,0xF8,0x10,0x20,0x40,0xF8,0x00}, // z + {0x10,0x20,0x20,0x40,0x20,0x20,0x10,0x00}, // { + {0x20,0x20,0x20,0x00,0x20,0x20,0x20,0x00}, // | + {0x40,0x20,0x20,0x10,0x20,0x20,0x40,0x00}, // } + {0x40,0xA8,0x10,0x00,0x00,0x00,0x00,0x00}, // ~ + {0x70,0xD8,0xD8,0x70,0x00,0x00,0x00,0x00} // DEL +}; +/* +const char FONT8x8F[97][8] = { + {0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns, rows, bytes per char + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space + {0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00}, // ! + {0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00}, // " + {0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00}, // # + {0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00}, // $ + {0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00}, // % + {0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00}, // & + {0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00}, // ' + {0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00}, // ( + {0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00}, // ) + {0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00}, // * + {0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00}, // + + {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30}, // , + {0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00}, // - + {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00}, // . + {0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00}, // / + {0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00}, // 0 + {0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00}, // 1 + {0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00}, // 2 + {0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00}, // 3 + {0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00}, // 4 + {0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00}, // 5 + {0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00}, // 6 + {0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00}, // 7 + {0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00}, // 8 + {0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00}, // 9 + {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00}, // : + {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30}, // ; + {0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00}, // < + {0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00}, // = + {0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00}, // > + {0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00}, // ? + {0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00}, // @ + {0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00}, // A + {0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00}, // B + {0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00}, // C + {0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00}, // D + {0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00}, // E + {0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00}, // F + {0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00}, // G + {0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00}, // H + {0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // I + {0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00}, // J + {0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00}, // K + {0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00}, // L + {0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00}, // M + {0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00}, // N + {0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00}, // O + {0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00}, // P + {0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00}, // Q + {0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00}, // R + {0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00}, // S + {0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00}, // T + {0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00}, // U + {0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00}, // V + {0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00}, // W + {0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00}, // X + {0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00}, // Y + {0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00}, // Z + {0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00}, // [ + {0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00}, // backslash + {0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00}, // ] + {0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00}, // ^ + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF}, // _ + {0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00}, // ` + {0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00}, // a + {0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00}, // b + {0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00}, // c + {0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00}, // d + {0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00}, // e + {0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00}, // f + {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C}, // g + {0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00}, // h + {0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00}, // i + {0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C}, // j + {0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00}, // k + {0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // l + {0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00}, // m + {0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00}, // n + {0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00}, // o + {0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78}, // p + {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F}, // q + {0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00}, // r + {0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00}, // s + {0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00}, // t + {0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00}, // u + {0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00}, // v + {0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00}, // w + {0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00}, // x + {0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C}, // y + {0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00}, // z + {0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00}, // { + {0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00}, // | + {0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00}, // } + {0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00}, // ~ + {0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00} // DEL +}; + +const char FONT8x16[97][16] = { + {0x08,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // columns, rows, bytes per char + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space + {0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00}, // ! + {0x00,0x63,0x63,0x63,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // " + {0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,0x36,0x7F,0x36,0x36,0x00,0x00,0x00,0x00}, // # + {0x0C,0x0C,0x3E,0x63,0x61,0x60,0x3E,0x03,0x03,0x43,0x63,0x3E,0x0C,0x0C,0x00,0x00}, // $ + {0x00,0x00,0x00,0x00,0x00,0x61,0x63,0x06,0x0C,0x18,0x33,0x63,0x00,0x00,0x00,0x00}, // % + {0x00,0x00,0x00,0x1C,0x36,0x36,0x1C,0x3B,0x6E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00}, // & + {0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // ' + {0x00,0x00,0x0C,0x18,0x18,0x30,0x30,0x30,0x30,0x18,0x18,0x0C,0x00,0x00,0x00,0x00}, // ( + {0x00,0x00,0x18,0x0C,0x0C,0x06,0x06,0x06,0x06,0x0C,0x0C,0x18,0x00,0x00,0x00,0x00}, // ) + {0x00,0x00,0x00,0x00,0x42,0x66,0x3C,0xFF,0x3C,0x66,0x42,0x00,0x00,0x00,0x00,0x00}, // * + {0x00,0x00,0x00,0x00,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00}, // + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00}, // , + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // - + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00}, // . + {0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00}, // / + {0x00,0x00,0x3E,0x63,0x63,0x63,0x6B,0x6B,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00}, // 0 + {0x00,0x00,0x0C,0x1C,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3F,0x00,0x00,0x00,0x00}, // 1 + {0x00,0x00,0x3E,0x63,0x03,0x06,0x0C,0x18,0x30,0x61,0x63,0x7F,0x00,0x00,0x00,0x00}, // 2 + {0x00,0x00,0x3E,0x63,0x03,0x03,0x1E,0x03,0x03,0x03,0x63,0x3E,0x00,0x00,0x00,0x00}, // 3 + {0x00,0x00,0x06,0x0E,0x1E,0x36,0x66,0x66,0x7F,0x06,0x06,0x0F,0x00,0x00,0x00,0x00}, // 4 + {0x00,0x00,0x7F,0x60,0x60,0x60,0x7E,0x03,0x03,0x63,0x73,0x3E,0x00,0x00,0x00,0x00}, // 5 + {0x00,0x00,0x1C,0x30,0x60,0x60,0x7E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00}, // 6 + {0x00,0x00,0x7F,0x63,0x03,0x06,0x06,0x0C,0x0C,0x18,0x18,0x18,0x00,0x00,0x00,0x00}, // 7 + {0x00,0x00,0x3E,0x63,0x63,0x63,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00}, // 8 + {0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x3F,0x03,0x03,0x06,0x3C,0x00,0x00,0x00,0x00}, // 9 + {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00}, // : + {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00}, // ; + {0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00}, // < + {0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00}, // = + {0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00}, // > + {0x00,0x00,0x3E,0x63,0x63,0x06,0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00}, // ? + {0x00,0x00,0x3E,0x63,0x63,0x6F,0x6B,0x6B,0x6E,0x60,0x60,0x3E,0x00,0x00,0x00,0x00}, // @ + {0x00,0x00,0x08,0x1C,0x36,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x00,0x00,0x00,0x00}, // A + {0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x33,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,0x00}, // B + {0x00,0x00,0x1E,0x33,0x61,0x60,0x60,0x60,0x60,0x61,0x33,0x1E,0x00,0x00,0x00,0x00}, // C + {0x00,0x00,0x7C,0x36,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x7C,0x00,0x00,0x00,0x00}, // D + {0x00,0x00,0x7F,0x33,0x31,0x34,0x3C,0x34,0x30,0x31,0x33,0x7F,0x00,0x00,0x00,0x00}, // E + {0x00,0x00,0x7F,0x33,0x31,0x34,0x3C,0x34,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00}, // F + {0x00,0x00,0x1E,0x33,0x61,0x60,0x60,0x6F,0x63,0x63,0x37,0x1D,0x00,0x00,0x00,0x00}, // G + {0x00,0x00,0x63,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00,0x00}, // H + {0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00}, // I + {0x00,0x00,0x0F,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00}, // J + {0x00,0x00,0x73,0x33,0x36,0x36,0x3C,0x36,0x36,0x33,0x33,0x73,0x00,0x00,0x00,0x00}, // K + {0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x33,0x7F,0x00,0x00,0x00,0x00}, // L + {0x00,0x00,0x63,0x77,0x7F,0x6B,0x63,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00,0x00}, // M + {0x00,0x00,0x63,0x63,0x73,0x7B,0x7F,0x6F,0x67,0x63,0x63,0x63,0x00,0x00,0x00,0x00}, // N + {0x00,0x00,0x1C,0x36,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x00,0x00,0x00,0x00}, // O + {0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00}, // P + {0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x63,0x6B,0x6F,0x3E,0x06,0x07,0x00,0x00}, // Q + {0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x36,0x36,0x33,0x33,0x73,0x00,0x00,0x00,0x00}, // R + {0x00,0x00,0x3E,0x63,0x63,0x30,0x1C,0x06,0x03,0x63,0x63,0x3E,0x00,0x00,0x00,0x00}, // S + {0x00,0x00,0xFF,0xDB,0x99,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00}, // T + {0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00}, // U + {0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x08,0x00,0x00,0x00,0x00}, // V + {0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x6B,0x6B,0x7F,0x36,0x36,0x00,0x00,0x00,0x00}, // W + {0x00,0x00,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x3C,0x66,0xC3,0xC3,0x00,0x00,0x00,0x00}, // X + {0x00,0x00,0xC3,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00}, // Y + {0x00,0x00,0x7F,0x63,0x43,0x06,0x0C,0x18,0x30,0x61,0x63,0x7F,0x00,0x00,0x00,0x00}, // Z + {0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00,0x00,0x00,0x00}, // [ + {0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00}, // backslash + {0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00,0x00}, // ] + {0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // ^ + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00}, // _ + {0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // ` + {0x00,0x00,0x00,0x00,0x00,0x3C,0x46,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00}, // a + {0x00,0x00,0x70,0x30,0x30,0x3C,0x36,0x33,0x33,0x33,0x33,0x6E,0x00,0x00,0x00,0x00}, // b + {0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x60,0x60,0x60,0x63,0x3E,0x00,0x00,0x00,0x00}, // c + {0x00,0x00,0x0E,0x06,0x06,0x1E,0x36,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00}, // d + {0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x7E,0x60,0x63,0x3E,0x00,0x00,0x00,0x00}, // e + {0x00,0x00,0x1C,0x36,0x32,0x30,0x7C,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00}, // f + {0x00,0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x66,0x3E,0x06,0x66,0x3C,0x00,0x00}, // g + {0x00,0x00,0x70,0x30,0x30,0x36,0x3B,0x33,0x33,0x33,0x33,0x73,0x00,0x00,0x00,0x00}, // h + {0x00,0x00,0x0C,0x0C,0x00,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00}, // i + {0x00,0x00,0x06,0x06,0x00,0x0E,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00}, // j + {0x00,0x00,0x70,0x30,0x30,0x33,0x33,0x36,0x3C,0x36,0x33,0x73,0x00,0x00,0x00,0x00}, // k + {0x00,0x00,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00}, // l + {0x00,0x00,0x00,0x00,0x00,0x6E,0x7F,0x6B,0x6B,0x6B,0x6B,0x6B,0x00,0x00,0x00,0x00}, // m + {0x00,0x00,0x00,0x00,0x00,0x6E,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00,0x00}, // n + {0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00}, // o + {0x00,0x00,0x00,0x00,0x00,0x6E,0x33,0x33,0x33,0x33,0x3E,0x30,0x30,0x78,0x00,0x00}, // p + {0x00,0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,0x0F,0x00,0x00}, // q + {0x00,0x00,0x00,0x00,0x00,0x6E,0x3B,0x33,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00}, // r + {0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x38,0x0E,0x03,0x63,0x3E,0x00,0x00,0x00,0x00}, // s + {0x00,0x00,0x08,0x18,0x18,0x7E,0x18,0x18,0x18,0x18,0x1B,0x0E,0x00,0x00,0x00,0x00}, // t + {0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00}, // u + {0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x36,0x36,0x1C,0x1C,0x08,0x00,0x00,0x00,0x00}, // v + {0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x6B,0x6B,0x7F,0x36,0x00,0x00,0x00,0x00}, // w + {0x00,0x00,0x00,0x00,0x00,0x63,0x36,0x1C,0x1C,0x1C,0x36,0x63,0x00,0x00,0x00,0x00}, // x + {0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x3F,0x03,0x06,0x3C,0x00,0x00}, // y + {0x00,0x00,0x00,0x00,0x00,0x7F,0x66,0x0C,0x18,0x30,0x63,0x7F,0x00,0x00,0x00,0x00}, // z + {0x00,0x00,0x0E,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x00}, // { + {0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00}, // | + {0x00,0x00,0x70,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x18,0x70,0x00,0x00,0x00,0x00}, // } + {0x00,0x00,0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // ~ + {0x00,0x70,0xD8,0xD8,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00} // DEL +}; +*/ diff --git a/armsrc/fonts.h b/armsrc/fonts.h new file mode 100644 index 000000000..621a7f56e --- /dev/null +++ b/armsrc/fonts.h @@ -0,0 +1,6 @@ +#ifndef __FONTS_H +#define __FONTS_H +extern const char FONT6x8[97][8]; +extern const char FONT8x8F[97][8]; +extern const char FONT8x16[97][16]; +#endif diff --git a/armsrc/fpga.c b/armsrc/fpga.c new file mode 100644 index 000000000..2bcade280 --- /dev/null +++ b/armsrc/fpga.c @@ -0,0 +1,222 @@ +//----------------------------------------------------------------------------- +// Routines to load the FPGA image, and then to configure the FPGA's major +// mode once it is configured. +// +// Jonathan Westhues, April 2006 +//----------------------------------------------------------------------------- +#include +#include "apps.h" + +//----------------------------------------------------------------------------- +// Set up the Serial Peripheral Interface as master +// Used to write the FPGA config word +// May also be used to write to other SPI attached devices like an LCD +//----------------------------------------------------------------------------- +void SetupSpi(int mode) +{ + // PA10 -> SPI_NCS2 chip select (LCD) + // PA11 -> SPI_NCS0 chip select (FPGA) + // PA12 -> SPI_MISO Master-In Slave-Out + // PA13 -> SPI_MOSI Master-Out Slave-In + // PA14 -> SPI_SPCK Serial Clock + + // Disable PIO control of the following pins, allows use by the SPI peripheral + PIO_DISABLE = (1 << GPIO_NCS0) | + (1 << GPIO_NCS2) | + (1 << GPIO_MISO) | + (1 << GPIO_MOSI) | + (1 << GPIO_SPCK); + + PIO_PERIPHERAL_A_SEL = (1 << GPIO_NCS0) | + (1 << GPIO_MISO) | + (1 << GPIO_MOSI) | + (1 << GPIO_SPCK); + + PIO_PERIPHERAL_B_SEL = (1 << GPIO_NCS2); + + //enable the SPI Peripheral clock + PMC_PERIPHERAL_CLK_ENABLE = (1< +#include "apps.h" +#include "..\common\iso14443_crc.c" + + +//static void GetSamplesFor14443(BOOL weTx, int n); + +#define DMA_BUFFER_SIZE 256 + +//============================================================================= +// An ISO 14443 Type B tag. We listen for commands from the reader, using +// a UART kind of thing that's implemented in software. When we get a +// frame (i.e., a group of bytes between SOF and EOF), we check the CRC. +// If it's good, then we can do something appropriate with it, and send +// a response. +//============================================================================= + +//----------------------------------------------------------------------------- +// Code up a string of octets at layer 2 (including CRC, we don't generate +// that here) so that they can be transmitted to the reader. Doesn't transmit +// them yet, just leaves them ready to send in ToSend[]. +//----------------------------------------------------------------------------- +static void CodeIso14443bAsTag(const BYTE *cmd, int len) +{ + int i; + + ToSendReset(); + + // Transmit a burst of ones, as the initial thing that lets the + // reader get phase sync. This (TR1) must be > 80/fs, per spec, + // but tag that I've tried (a Paypass) exceeds that by a fair bit, + // so I will too. + for(i = 0; i < 20; i++) { + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + } + + // Send SOF. + for(i = 0; i < 10; i++) { + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + } + for(i = 0; i < 2; i++) { + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + } + + for(i = 0; i < len; i++) { + int j; + BYTE b = cmd[i]; + + // Start bit + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + + // Data bits + for(j = 0; j < 8; j++) { + if(b & 1) { + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + } else { + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + } + b >>= 1; + } + + // Stop bit + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + } + + // Send SOF. + for(i = 0; i < 10; i++) { + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + } + for(i = 0; i < 10; i++) { + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + } + + // Convert from last byte pos to length + ToSendMax++; + + // Add a few more for slop + ToSendMax += 2; +} + +//----------------------------------------------------------------------------- +// The software UART that receives commands from the reader, and its state +// variables. +//----------------------------------------------------------------------------- +static struct { + enum { + STATE_UNSYNCD, + STATE_GOT_FALLING_EDGE_OF_SOF, + STATE_AWAITING_START_BIT, + STATE_RECEIVING_DATA, + STATE_ERROR_WAIT + } state; + WORD shiftReg; + int bitCnt; + int byteCnt; + int byteCntMax; + int posCnt; + BYTE *output; +} Uart; + +static BOOL Handle14443UartBit(int bit) +{ + switch(Uart.state) { + case STATE_UNSYNCD: + if(!bit) { + // we went low, so this could be the beginning + // of an SOF + Uart.state = STATE_GOT_FALLING_EDGE_OF_SOF; + Uart.posCnt = 0; + Uart.bitCnt = 0; + } + break; + + case STATE_GOT_FALLING_EDGE_OF_SOF: + Uart.posCnt++; + if(Uart.posCnt == 2) { + if(bit) { + if(Uart.bitCnt >= 10) { + // we've seen enough consecutive + // zeros that it's a valid SOF + Uart.posCnt = 0; + Uart.byteCnt = 0; + Uart.state = STATE_AWAITING_START_BIT; + } else { + // didn't stay down long enough + // before going high, error + Uart.state = STATE_ERROR_WAIT; + } + } else { + // do nothing, keep waiting + } + Uart.bitCnt++; + } + if(Uart.posCnt >= 4) Uart.posCnt = 0; + if(Uart.bitCnt > 14) { + // Give up if we see too many zeros without + // a one, too. + Uart.state = STATE_ERROR_WAIT; + } + break; + + case STATE_AWAITING_START_BIT: + Uart.posCnt++; + if(bit) { + if(Uart.posCnt > 25) { + // stayed high for too long between + // characters, error + Uart.state = STATE_ERROR_WAIT; + } + } else { + // falling edge, this starts the data byte + Uart.posCnt = 0; + Uart.bitCnt = 0; + Uart.shiftReg = 0; + Uart.state = STATE_RECEIVING_DATA; + } + break; + + case STATE_RECEIVING_DATA: + Uart.posCnt++; + if(Uart.posCnt == 2) { + // time to sample a bit + Uart.shiftReg >>= 1; + if(bit) { + Uart.shiftReg |= 0x200; + } + Uart.bitCnt++; + } + if(Uart.posCnt >= 4) { + Uart.posCnt = 0; + } + if(Uart.bitCnt == 10) { + if((Uart.shiftReg & 0x200) && !(Uart.shiftReg & 0x001)) + { + // this is a data byte, with correct + // start and stop bits + Uart.output[Uart.byteCnt] = (Uart.shiftReg >> 1) & 0xff; + Uart.byteCnt++; + + if(Uart.byteCnt >= Uart.byteCntMax) { + // Buffer overflowed, give up + Uart.posCnt = 0; + Uart.state = STATE_ERROR_WAIT; + } else { + // so get the next byte now + Uart.posCnt = 0; + Uart.state = STATE_AWAITING_START_BIT; + } + } else if(Uart.shiftReg == 0x000) { + // this is an EOF byte + return TRUE; + } else { + // this is an error + Uart.posCnt = 0; + Uart.state = STATE_ERROR_WAIT; + } + } + break; + + case STATE_ERROR_WAIT: + // We're all screwed up, so wait a little while + // for whatever went wrong to finish, and then + // start over. + Uart.posCnt++; + if(Uart.posCnt > 10) { + Uart.state = STATE_UNSYNCD; + } + break; + + default: + Uart.state = STATE_UNSYNCD; + break; + } + + return FALSE; +} + +//----------------------------------------------------------------------------- +// Receive a command (from the reader to us, where we are the simulated tag), +// and store it in the given buffer, up to the given maximum length. Keeps +// spinning, waiting for a well-framed command, until either we get one +// (returns TRUE) or someone presses the pushbutton on the board (FALSE). +// +// Assume that we're called with the SSC (to the FPGA) and ADC path set +// correctly. +//----------------------------------------------------------------------------- +static BOOL GetIso14443CommandFromReader(BYTE *received, int *len, int maxLen) +{ + BYTE mask; + int i, bit; + + // Set FPGA mode to "simulated ISO 14443 tag", no modulation (listen + // only, since we are receiving, not transmitting). + FpgaWriteConfWord( + FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_NO_MODULATION); + + + // Now run a `software UART' on the stream of incoming samples. + Uart.output = received; + Uart.byteCntMax = maxLen; + Uart.state = STATE_UNSYNCD; + + for(;;) { + WDT_HIT(); + + if(BUTTON_PRESS()) return FALSE; + + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = 0x00; + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + BYTE b = (BYTE)SSC_RECEIVE_HOLDING; + + mask = 0x80; + for(i = 0; i < 8; i++, mask >>= 1) { + bit = (b & mask); + if(Handle14443UartBit(bit)) { + *len = Uart.byteCnt; + return TRUE; + } + } + } + } +} + +//----------------------------------------------------------------------------- +// Main loop of simulated tag: receive commands from reader, decide what +// response to send, and send it. +//----------------------------------------------------------------------------- +void SimulateIso14443Tag(void) +{ + static const BYTE cmd1[] = { 0x05, 0x00, 0x08, 0x39, 0x73 }; + static const BYTE response1[] = { + 0x50, 0x82, 0x0d, 0xe1, 0x74, 0x20, 0x38, 0x19, 0x22, + 0x00, 0x21, 0x85, 0x5e, 0xd7 + }; + + BYTE *resp; + int respLen; + + BYTE *resp1 = (((BYTE *)BigBuf) + 800); + int resp1Len; + + BYTE *receivedCmd = (BYTE *)BigBuf; + int len; + + int i; + + int cmdsRecvd = 0; + + memset(receivedCmd, 0x44, 400); + + CodeIso14443bAsTag(response1, sizeof(response1)); + memcpy(resp1, ToSend, ToSendMax); resp1Len = ToSendMax; + + // We need to listen to the high-frequency, peak-detected path. + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + FpgaSetupSsc(); + + cmdsRecvd = 0; + + for(;;) { + BYTE b1, b2; + + if(!GetIso14443CommandFromReader(receivedCmd, &len, 100)) { + DbpIntegers(cmdsRecvd, 0, 0); + DbpString("button press"); + break; + } + + // Good, look at the command now. + + if(len == sizeof(cmd1) && memcmp(receivedCmd, cmd1, len)==0) { + resp = resp1; respLen = resp1Len; + } else { + DbpString("new cmd from reader:"); + DbpIntegers(len, 0x1234, cmdsRecvd); + // And print whether the CRC fails, just for good measure + ComputeCrc14443(CRC_14443_B, receivedCmd, len-2, &b1, &b2); + if(b1 != receivedCmd[len-2] || b2 != receivedCmd[len-1]) { + // Not so good, try again. + DbpString("+++CRC fail"); + } else { + DbpString("CRC passes"); + } + break; + } + + memset(receivedCmd, 0x44, 32); + + cmdsRecvd++; + + if(cmdsRecvd > 0x30) { + DbpString("many commands later..."); + break; + } + + if(respLen <= 0) continue; + + // Modulate BPSK + FpgaWriteConfWord( + FPGA_MAJOR_MODE_HF_SIMULATOR | FPGA_HF_SIMULATOR_MODULATE_BPSK); + SSC_TRANSMIT_HOLDING = 0xff; + FpgaSetupSsc(); + + // Transmit the response. + i = 0; + for(;;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + BYTE b = resp[i]; + + SSC_TRANSMIT_HOLDING = b; + + i++; + if(i > respLen) { + break; + } + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + volatile BYTE b = (BYTE)SSC_RECEIVE_HOLDING; + (void)b; + } + } + } +} + +//============================================================================= +// An ISO 14443 Type B reader. We take layer two commands, code them +// appropriately, and then send them to the tag. We then listen for the +// tag's response, which we leave in the buffer to be demodulated on the +// PC side. +//============================================================================= + +static struct { + enum { + DEMOD_UNSYNCD, + DEMOD_PHASE_REF_TRAINING, + DEMOD_AWAITING_FALLING_EDGE_OF_SOF, + DEMOD_GOT_FALLING_EDGE_OF_SOF, + DEMOD_AWAITING_START_BIT, + DEMOD_RECEIVING_DATA, + DEMOD_ERROR_WAIT + } state; + int bitCount; + int posCount; + int thisBit; + int metric; + int metricN; + WORD shiftReg; + BYTE *output; + int len; + int sumI; + int sumQ; +} Demod; + +static BOOL Handle14443SamplesDemod(int ci, int cq) +{ + int v; + + // The soft decision on the bit uses an estimate of just the + // quadrant of the reference angle, not the exact angle. +#define MAKE_SOFT_DECISION() { \ + if(Demod.sumI > 0) { \ + v = ci; \ + } else { \ + v = -ci; \ + } \ + if(Demod.sumQ > 0) { \ + v += cq; \ + } else { \ + v -= cq; \ + } \ + } + + switch(Demod.state) { + case DEMOD_UNSYNCD: + v = ci; + if(v < 0) v = -v; + if(cq > 0) { + v += cq; + } else { + v -= cq; + } + if(v > 40) { + Demod.posCount = 0; + Demod.state = DEMOD_PHASE_REF_TRAINING; + Demod.sumI = 0; + Demod.sumQ = 0; + } + break; + + case DEMOD_PHASE_REF_TRAINING: + if(Demod.posCount < 8) { + Demod.sumI += ci; + Demod.sumQ += cq; + } else if(Demod.posCount > 100) { + // error, waited too long + Demod.state = DEMOD_UNSYNCD; + } else { + MAKE_SOFT_DECISION(); + if(v < 0) { + Demod.state = DEMOD_AWAITING_FALLING_EDGE_OF_SOF; + Demod.posCount = 0; + } + } + Demod.posCount++; + break; + + case DEMOD_AWAITING_FALLING_EDGE_OF_SOF: + MAKE_SOFT_DECISION(); + if(v < 0) { + Demod.state = DEMOD_GOT_FALLING_EDGE_OF_SOF; + Demod.posCount = 0; + } else { + if(Demod.posCount > 100) { + Demod.state = DEMOD_UNSYNCD; + } + } + Demod.posCount++; + break; + + case DEMOD_GOT_FALLING_EDGE_OF_SOF: + MAKE_SOFT_DECISION(); + if(v > 0) { + if(Demod.posCount < 12) { + Demod.state = DEMOD_UNSYNCD; + } else { + Demod.state = DEMOD_AWAITING_START_BIT; + Demod.posCount = 0; + Demod.len = 0; + Demod.metricN = 0; + Demod.metric = 0; + } + } else { + if(Demod.posCount > 100) { + Demod.state = DEMOD_UNSYNCD; + } + } + Demod.posCount++; + break; + + case DEMOD_AWAITING_START_BIT: + MAKE_SOFT_DECISION(); + if(v > 0) { + if(Demod.posCount > 10) { + Demod.state = DEMOD_UNSYNCD; + } + } else { + Demod.bitCount = 0; + Demod.posCount = 1; + Demod.thisBit = v; + Demod.shiftReg = 0; + Demod.state = DEMOD_RECEIVING_DATA; + } + break; + + case DEMOD_RECEIVING_DATA: + MAKE_SOFT_DECISION(); + if(Demod.posCount == 0) { + Demod.thisBit = v; + Demod.posCount = 1; + } else { + Demod.thisBit += v; + + if(Demod.thisBit > 0) { + Demod.metric += Demod.thisBit; + } else { + Demod.metric -= Demod.thisBit; + } + (Demod.metricN)++; + + Demod.shiftReg >>= 1; + if(Demod.thisBit > 0) { + Demod.shiftReg |= 0x200; + } + + Demod.bitCount++; + if(Demod.bitCount == 10) { + WORD s = Demod.shiftReg; + if((s & 0x200) && !(s & 0x001)) { + BYTE b = (s >> 1); + Demod.output[Demod.len] = b; + Demod.len++; + Demod.state = DEMOD_AWAITING_START_BIT; + } else if(s == 0x000) { + // This is EOF + return TRUE; + Demod.state = DEMOD_UNSYNCD; + } else { + Demod.state = DEMOD_UNSYNCD; + } + } + Demod.posCount = 0; + } + break; + + default: + Demod.state = DEMOD_UNSYNCD; + break; + } + + return FALSE; +} + +static void GetSamplesFor14443Demod(BOOL weTx, int n) +{ + int max = 0; + BOOL gotFrame = FALSE; + +//# define DMA_BUFFER_SIZE 8 + SBYTE *dmaBuf; + + int lastRxCounter; + SBYTE *upTo; + + int ci, cq; + + int samples = 0; + + // Clear out the state of the "UART" that receives from the tag. + memset(BigBuf, 0x44, 400); + Demod.output = (BYTE *)BigBuf; + Demod.len = 0; + Demod.state = DEMOD_UNSYNCD; + + // And the UART that receives from the reader + Uart.output = (((BYTE *)BigBuf) + 1024); + Uart.byteCntMax = 100; + Uart.state = STATE_UNSYNCD; + + // Setup for the DMA. + dmaBuf = (SBYTE *)(BigBuf + 32); + upTo = dmaBuf; + lastRxCounter = DMA_BUFFER_SIZE; + FpgaSetupSscDma((BYTE *)dmaBuf, DMA_BUFFER_SIZE); + + // And put the FPGA in the appropriate mode + FpgaWriteConfWord( + FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ | + (weTx ? 0 : FPGA_HF_READER_RX_XCORR_SNOOP)); + + for(;;) { + int behindBy = lastRxCounter - PDC_RX_COUNTER(SSC_BASE); + if(behindBy > max) max = behindBy; + + LED_D_ON(); + while(((lastRxCounter-PDC_RX_COUNTER(SSC_BASE)) & (DMA_BUFFER_SIZE-1)) + > 2) + { + ci = upTo[0]; + cq = upTo[1]; + upTo += 2; + if(upTo - dmaBuf > DMA_BUFFER_SIZE) { + upTo -= DMA_BUFFER_SIZE; + PDC_RX_NEXT_POINTER(SSC_BASE) = (DWORD)upTo; + PDC_RX_NEXT_COUNTER(SSC_BASE) = DMA_BUFFER_SIZE; + } + lastRxCounter -= 2; + if(lastRxCounter <= 0) { + lastRxCounter += DMA_BUFFER_SIZE; + } + + samples += 2; + + Handle14443UartBit(1); + Handle14443UartBit(1); + + if(Handle14443SamplesDemod(ci, cq)) { + gotFrame = 1; + } + } + LED_D_OFF(); + + if(samples > 2000) { + break; + } + } + PDC_CONTROL(SSC_BASE) = PDC_RX_DISABLE; + DbpIntegers(max, gotFrame, -1); +} + +//----------------------------------------------------------------------------- +// Read the tag's response. We just receive a stream of slightly-processed +// samples from the FPGA, which we will later do some signal processing on, +// to get the bits. +//----------------------------------------------------------------------------- +/*static void GetSamplesFor14443(BOOL weTx, int n) +{ + BYTE *dest = (BYTE *)BigBuf; + int c; + + FpgaWriteConfWord( + FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ | + (weTx ? 0 : FPGA_HF_READER_RX_XCORR_SNOOP)); + + c = 0; + for(;;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = 0x43; + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + SBYTE b; + b = (SBYTE)SSC_RECEIVE_HOLDING; + + dest[c++] = (BYTE)b; + + if(c >= n) { + break; + } + } + } +}*/ + +//----------------------------------------------------------------------------- +// Transmit the command (to the tag) that was placed in ToSend[]. +//----------------------------------------------------------------------------- +static void TransmitFor14443(void) +{ + int c; + + FpgaSetupSsc(); + + while(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = 0xff; + } + + FpgaWriteConfWord( + FPGA_MAJOR_MODE_HF_READER_TX | FPGA_HF_READER_TX_SHALLOW_MOD); + + for(c = 0; c < 10;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = 0xff; + c++; + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + volatile DWORD r = SSC_RECEIVE_HOLDING; + (void)r; + } + WDT_HIT(); + } + + c = 0; + for(;;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = ToSend[c]; + c++; + if(c >= ToSendMax) { + break; + } + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + volatile DWORD r = SSC_RECEIVE_HOLDING; + (void)r; + } + WDT_HIT(); + } +} + +//----------------------------------------------------------------------------- +// Code a layer 2 command (string of octets, including CRC) into ToSend[], +// so that it is ready to transmit to the tag using TransmitFor14443(). +//----------------------------------------------------------------------------- +void CodeIso14443bAsReader(const BYTE *cmd, int len) +{ + int i, j; + BYTE b; + + ToSendReset(); + + // Establish initial reference level + for(i = 0; i < 40; i++) { + ToSendStuffBit(1); + } + // Send SOF + for(i = 0; i < 10; i++) { + ToSendStuffBit(0); + } + + for(i = 0; i < len; i++) { + // Stop bits/EGT + ToSendStuffBit(1); + ToSendStuffBit(1); + // Start bit + ToSendStuffBit(0); + // Data bits + b = cmd[i]; + for(j = 0; j < 8; j++) { + if(b & 1) { + ToSendStuffBit(1); + } else { + ToSendStuffBit(0); + } + b >>= 1; + } + } + // Send EOF + ToSendStuffBit(1); + for(i = 0; i < 10; i++) { + ToSendStuffBit(0); + } + for(i = 0; i < 8; i++) { + ToSendStuffBit(1); + } + + // And then a little more, to make sure that the last character makes + // it out before we switch to rx mode. + for(i = 0; i < 24; i++) { + ToSendStuffBit(1); + } + + // Convert from last character reference to length + ToSendMax++; +} + +//----------------------------------------------------------------------------- +// Read an ISO 14443 tag. We send it some set of commands, and record the +// responses. +//----------------------------------------------------------------------------- +void AcquireRawAdcSamplesIso14443(DWORD parameter) +{ +// BYTE cmd1[] = { 0x05, 0x00, 0x00, 0x71, 0xff }; + BYTE cmd1[] = { 0x05, 0x00, 0x08, 0x39, 0x73 }; + + // Make sure that we start from off, since the tags are stateful; + // confusing things will happen if we don't reset them between reads. + LED_D_OFF(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + SpinDelay(200); + + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + FpgaSetupSsc(); + + // Now give it time to spin up. + FpgaWriteConfWord( + FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ); + SpinDelay(200); + + CodeIso14443bAsReader(cmd1, sizeof(cmd1)); + TransmitFor14443(); + LED_A_ON(); + GetSamplesFor14443Demod(TRUE, 2000); + LED_A_OFF(); +} + +//============================================================================= +// Finally, the `sniffer' combines elements from both the reader and +// simulated tag, to show both sides of the conversation. +//============================================================================= + +//----------------------------------------------------------------------------- +// Record the sequence of commands sent by the reader to the tag, with +// triggering so that we start recording at the point that the tag is moved +// near the reader. +//----------------------------------------------------------------------------- +void SnoopIso14443(void) +{ + // We won't start recording the frames that we acquire until we trigger; + // a good trigger condition to get started is probably when we see a + // response from the tag. + BOOL triggered = FALSE; + + // The command (reader -> tag) that we're working on receiving. + BYTE *receivedCmd = (((BYTE *)BigBuf) + 1024); + // The response (tag -> reader) that we're working on receiving. + BYTE *receivedResponse = (((BYTE *)BigBuf) + 1536); + + // As we receive stuff, we copy it from receivedCmd or receivedResponse + // into trace, along with its length and other annotations. + BYTE *trace = (BYTE *)BigBuf; + int traceLen = 0; + + // The DMA buffer, used to stream samples from the FPGA. +//# define DMA_BUFFER_SIZE 256 + SBYTE *dmaBuf = ((SBYTE *)BigBuf) + 2048; + int lastRxCounter; + SBYTE *upTo; + int ci, cq; + int maxBehindBy = 0; + + // Count of samples received so far, so that we can include timing + // information in the trace buffer. + int samples = 0; + + memset(trace, 0x44, 1000); + + // Set up the demodulator for tag -> reader responses. + Demod.output = receivedResponse; + Demod.len = 0; + Demod.state = DEMOD_UNSYNCD; + + // And the reader -> tag commands + memset(&Uart, 0, sizeof(Uart)); + Uart.output = receivedCmd; + Uart.byteCntMax = 100; + Uart.state = STATE_UNSYNCD; + + // And put the FPGA in the appropriate mode + FpgaWriteConfWord( + FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ | + FPGA_HF_READER_RX_XCORR_SNOOP); + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + + // Setup for the DMA. + FpgaSetupSsc(); + upTo = dmaBuf; + lastRxCounter = DMA_BUFFER_SIZE; + FpgaSetupSscDma((BYTE *)dmaBuf, DMA_BUFFER_SIZE); + + LED_A_ON(); + + // And now we loop, receiving samples. + for(;;) { + int behindBy = (lastRxCounter - PDC_RX_COUNTER(SSC_BASE)) & + (DMA_BUFFER_SIZE-1); + if(behindBy > maxBehindBy) { + maxBehindBy = behindBy; + if(behindBy > 100) { + DbpString("blew circular buffer!"); + goto done; + } + } + if(behindBy < 2) continue; + + ci = upTo[0]; + cq = upTo[1]; + upTo += 2; + lastRxCounter -= 2; + if(upTo - dmaBuf > DMA_BUFFER_SIZE) { + upTo -= DMA_BUFFER_SIZE; + lastRxCounter += DMA_BUFFER_SIZE; + PDC_RX_NEXT_POINTER(SSC_BASE) = (DWORD)upTo; + PDC_RX_NEXT_COUNTER(SSC_BASE) = DMA_BUFFER_SIZE; + } + + samples += 2; + +#define HANDLE_BIT_IF_BODY \ + if(triggered) { \ + trace[traceLen++] = ((samples >> 0) & 0xff); \ + trace[traceLen++] = ((samples >> 8) & 0xff); \ + trace[traceLen++] = ((samples >> 16) & 0xff); \ + trace[traceLen++] = ((samples >> 24) & 0xff); \ + trace[traceLen++] = 0; \ + trace[traceLen++] = 0; \ + trace[traceLen++] = 0; \ + trace[traceLen++] = 0; \ + trace[traceLen++] = Uart.byteCnt; \ + memcpy(trace+traceLen, receivedCmd, Uart.byteCnt); \ + traceLen += Uart.byteCnt; \ + if(traceLen > 1000) break; \ + } \ + /* And ready to receive another command. */ \ + memset(&Uart, 0, sizeof(Uart)); \ + Uart.output = receivedCmd; \ + Uart.byteCntMax = 100; \ + Uart.state = STATE_UNSYNCD; \ + /* And also reset the demod code, which might have been */ \ + /* false-triggered by the commands from the reader. */ \ + memset(&Demod, 0, sizeof(Demod)); \ + Demod.output = receivedResponse; \ + Demod.state = DEMOD_UNSYNCD; \ + + if(Handle14443UartBit(ci & 1)) { + HANDLE_BIT_IF_BODY + } + if(Handle14443UartBit(cq & 1)) { + HANDLE_BIT_IF_BODY + } + + if(Handle14443SamplesDemod(ci, cq)) { + // timestamp, as a count of samples + trace[traceLen++] = ((samples >> 0) & 0xff); + trace[traceLen++] = ((samples >> 8) & 0xff); + trace[traceLen++] = ((samples >> 16) & 0xff); + trace[traceLen++] = 0x80 | ((samples >> 24) & 0xff); + // correlation metric (~signal strength estimate) + if(Demod.metricN != 0) { + Demod.metric /= Demod.metricN; + } + trace[traceLen++] = ((Demod.metric >> 0) & 0xff); + trace[traceLen++] = ((Demod.metric >> 8) & 0xff); + trace[traceLen++] = ((Demod.metric >> 16) & 0xff); + trace[traceLen++] = ((Demod.metric >> 24) & 0xff); + // length + trace[traceLen++] = Demod.len; + memcpy(trace+traceLen, receivedResponse, Demod.len); + traceLen += Demod.len; + if(traceLen > 1000) break; + + triggered = TRUE; + LED_A_OFF(); + LED_B_ON(); + + // And ready to receive another response. + memset(&Demod, 0, sizeof(Demod)); + Demod.output = receivedResponse; + Demod.state = DEMOD_UNSYNCD; + } + + if(BUTTON_PRESS()) { + DbpString("cancelled"); + goto done; + } + } + + DbpString("in done pt"); + + DbpIntegers(maxBehindBy, Uart.state, Uart.byteCnt); + DbpIntegers(Uart.byteCntMax, traceLen, 0x23); + +done: + PDC_CONTROL(SSC_BASE) = PDC_RX_DISABLE; + LED_A_OFF(); + LED_B_OFF(); +} diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c new file mode 100644 index 000000000..a687d8779 --- /dev/null +++ b/armsrc/iso14443a.c @@ -0,0 +1,1815 @@ +//----------------------------------------------------------------------------- +// Routines to support ISO 14443 type A. +// +// Gerhard de Koning Gans - May 2008 +//----------------------------------------------------------------------------- +#include +#include "apps.h" +#include "..\common\iso14443_crc.c" + +typedef enum { + SEC_D = 1, + SEC_E = 2, + SEC_F = 3, + SEC_X = 4, + SEC_Y = 5, + SEC_Z = 6 +} SecType; + +//----------------------------------------------------------------------------- +// The software UART that receives commands from the reader, and its state +// variables. +//----------------------------------------------------------------------------- +static struct { + enum { + STATE_UNSYNCD, + STATE_START_OF_COMMUNICATION, + STATE_MILLER_X, + STATE_MILLER_Y, + STATE_MILLER_Z, + STATE_ERROR_WAIT + } state; + WORD shiftReg; + int bitCnt; + int byteCnt; + int byteCntMax; + int posCnt; + int syncBit; + int parityBits; + int samples; + int highCnt; + int bitBuffer; + enum { + DROP_NONE, + DROP_FIRST_HALF, + DROP_SECOND_HALF + } drop; + BYTE *output; +} Uart; + +static BOOL MillerDecoding(int bit) +{ + int error = 0; + int bitright; + + if(!Uart.bitBuffer) { + Uart.bitBuffer = bit ^ 0xFF0; + return FALSE; + } + else { + Uart.bitBuffer <<= 4; + Uart.bitBuffer ^= bit; + } + + BOOL EOC = FALSE; + + if(Uart.state != STATE_UNSYNCD) { + Uart.posCnt++; + + if((Uart.bitBuffer & Uart.syncBit) ^ Uart.syncBit) { + bit = 0x00; + } + else { + bit = 0x01; + } + if(((Uart.bitBuffer << 1) & Uart.syncBit) ^ Uart.syncBit) { + bitright = 0x00; + } + else { + bitright = 0x01; + } + if(bit != bitright) { bit = bitright; } + + if(Uart.posCnt == 1) { + // measurement first half bitperiod + if(!bit) { + Uart.drop = DROP_FIRST_HALF; + } + } + else { + // measurement second half bitperiod + if(!bit & (Uart.drop == DROP_NONE)) { + Uart.drop = DROP_SECOND_HALF; + } + else if(!bit) { + // measured a drop in first and second half + // which should not be possible + Uart.state = STATE_ERROR_WAIT; + error = 0x01; + } + + Uart.posCnt = 0; + + switch(Uart.state) { + case STATE_START_OF_COMMUNICATION: + Uart.shiftReg = 0; + if(Uart.drop == DROP_SECOND_HALF) { + // error, should not happen in SOC + Uart.state = STATE_ERROR_WAIT; + error = 0x02; + } + else { + // correct SOC + Uart.state = STATE_MILLER_Z; + } + break; + + case STATE_MILLER_Z: + Uart.bitCnt++; + Uart.shiftReg >>= 1; + if(Uart.drop == DROP_NONE) { + // logic '0' followed by sequence Y + // end of communication + Uart.state = STATE_UNSYNCD; + EOC = TRUE; + } + // if(Uart.drop == DROP_FIRST_HALF) { + // Uart.state = STATE_MILLER_Z; stay the same + // we see a logic '0' } + if(Uart.drop == DROP_SECOND_HALF) { + // we see a logic '1' + Uart.shiftReg |= 0x100; + Uart.state = STATE_MILLER_X; + } + break; + + case STATE_MILLER_X: + Uart.shiftReg >>= 1; + if(Uart.drop == DROP_NONE) { + // sequence Y, we see a '0' + Uart.state = STATE_MILLER_Y; + Uart.bitCnt++; + } + if(Uart.drop == DROP_FIRST_HALF) { + // Would be STATE_MILLER_Z + // but Z does not follow X, so error + Uart.state = STATE_ERROR_WAIT; + error = 0x03; + } + if(Uart.drop == DROP_SECOND_HALF) { + // We see a '1' and stay in state X + Uart.shiftReg |= 0x100; + Uart.bitCnt++; + } + break; + + case STATE_MILLER_Y: + Uart.bitCnt++; + Uart.shiftReg >>= 1; + if(Uart.drop == DROP_NONE) { + // logic '0' followed by sequence Y + // end of communication + Uart.state = STATE_UNSYNCD; + EOC = TRUE; + } + if(Uart.drop == DROP_FIRST_HALF) { + // we see a '0' + Uart.state = STATE_MILLER_Z; + } + if(Uart.drop == DROP_SECOND_HALF) { + // We see a '1' and go to state X + Uart.shiftReg |= 0x100; + Uart.state = STATE_MILLER_X; + } + break; + + case STATE_ERROR_WAIT: + // That went wrong. Now wait for at least two bit periods + // and try to sync again + if(Uart.drop == DROP_NONE) { + Uart.highCnt = 6; + Uart.state = STATE_UNSYNCD; + } + break; + + default: + Uart.state = STATE_UNSYNCD; + Uart.highCnt = 0; + break; + } + + Uart.drop = DROP_NONE; + + // should have received at least one whole byte... + if((Uart.bitCnt == 2) && EOC && (Uart.byteCnt > 0)) { + return TRUE; + } + + if(Uart.bitCnt == 9) { + Uart.output[Uart.byteCnt] = (Uart.shiftReg & 0xff); + Uart.byteCnt++; + + Uart.parityBits <<= 1; + Uart.parityBits ^= ((Uart.shiftReg >> 8) & 0x01); + + if(EOC) { + // when End of Communication received and + // all data bits processed.. + return TRUE; + } + Uart.bitCnt = 0; + } + + /*if(error) { + Uart.output[Uart.byteCnt] = 0xAA; + Uart.byteCnt++; + Uart.output[Uart.byteCnt] = error & 0xFF; + Uart.byteCnt++; + Uart.output[Uart.byteCnt] = 0xAA; + Uart.byteCnt++; + Uart.output[Uart.byteCnt] = (Uart.bitBuffer >> 8) & 0xFF; + Uart.byteCnt++; + Uart.output[Uart.byteCnt] = Uart.bitBuffer & 0xFF; + Uart.byteCnt++; + Uart.output[Uart.byteCnt] = (Uart.syncBit >> 3) & 0xFF; + Uart.byteCnt++; + Uart.output[Uart.byteCnt] = 0xAA; + Uart.byteCnt++; + return TRUE; + }*/ + } + + } + else { + bit = Uart.bitBuffer & 0xf0; + bit >>= 4; + bit ^= 0x0F; + if(bit) { + // should have been high or at least (4 * 128) / fc + // according to ISO this should be at least (9 * 128 + 20) / fc + if(Uart.highCnt == 8) { + // we went low, so this could be start of communication + // it turns out to be safer to choose a less significant + // syncbit... so we check whether the neighbour also represents the drop + Uart.posCnt = 1; // apparently we are busy with our first half bit period + Uart.syncBit = bit & 8; + Uart.samples = 3; + if(!Uart.syncBit) { Uart.syncBit = bit & 4; Uart.samples = 2; } + else if(bit & 4) { Uart.syncBit = bit & 4; Uart.samples = 2; bit <<= 2; } + if(!Uart.syncBit) { Uart.syncBit = bit & 2; Uart.samples = 1; } + else if(bit & 2) { Uart.syncBit = bit & 2; Uart.samples = 1; bit <<= 1; } + if(!Uart.syncBit) { Uart.syncBit = bit & 1; Uart.samples = 0; + if(Uart.syncBit & (Uart.bitBuffer & 8)) { + Uart.syncBit = 8; + + // the first half bit period is expected in next sample + Uart.posCnt = 0; + Uart.samples = 3; + } + } + else if(bit & 1) { Uart.syncBit = bit & 1; Uart.samples = 0; } + + Uart.syncBit <<= 4; + Uart.state = STATE_START_OF_COMMUNICATION; + Uart.drop = DROP_FIRST_HALF; + Uart.bitCnt = 0; + Uart.byteCnt = 0; + Uart.parityBits = 0; + error = 0; + } + else { + Uart.highCnt = 0; + } + } + else { + if(Uart.highCnt < 8) { + Uart.highCnt++; + } + } + } + + return FALSE; +} + +//============================================================================= +// ISO 14443 Type A - Manchester +//============================================================================= + +static struct { + enum { + DEMOD_UNSYNCD, + DEMOD_START_OF_COMMUNICATION, + DEMOD_MANCHESTER_D, + DEMOD_MANCHESTER_E, + DEMOD_MANCHESTER_F, + DEMOD_ERROR_WAIT + } state; + int bitCount; + int posCount; + int syncBit; + int parityBits; + WORD shiftReg; + int buffer; + int buff; + int samples; + int len; + enum { + SUB_NONE, + SUB_FIRST_HALF, + SUB_SECOND_HALF + } sub; + BYTE *output; +} Demod; + +static BOOL ManchesterDecoding(int v) +{ + int bit; + int modulation; + int error = 0; + + if(!Demod.buff) { + Demod.buff = 1; + Demod.buffer = v; + return FALSE; + } + else { + bit = Demod.buffer; + Demod.buffer = v; + } + + if(Demod.state==DEMOD_UNSYNCD) { + Demod.output[Demod.len] = 0xfa; + Demod.syncBit = 0; + //Demod.samples = 0; + Demod.posCount = 1; // This is the first half bit period, so after syncing handle the second part + if(bit & 0x08) { Demod.syncBit = 0x08; } + if(!Demod.syncBit) { + if(bit & 0x04) { Demod.syncBit = 0x04; } + } + else if(bit & 0x04) { Demod.syncBit = 0x04; bit <<= 4; } + if(!Demod.syncBit) { + if(bit & 0x02) { Demod.syncBit = 0x02; } + } + else if(bit & 0x02) { Demod.syncBit = 0x02; bit <<= 4; } + if(!Demod.syncBit) { + if(bit & 0x01) { Demod.syncBit = 0x01; } + + if(Demod.syncBit & (Demod.buffer & 0x08)) { + Demod.syncBit = 0x08; + + // The first half bitperiod is expected in next sample + Demod.posCount = 0; + Demod.output[Demod.len] = 0xfb; + } + } + else if(bit & 0x01) { Demod.syncBit = 0x01; } + + if(Demod.syncBit) { + Demod.len = 0; + Demod.state = DEMOD_START_OF_COMMUNICATION; + Demod.sub = SUB_FIRST_HALF; + Demod.bitCount = 0; + Demod.shiftReg = 0; + Demod.parityBits = 0; + Demod.samples = 0; + if(Demod.posCount) { + switch(Demod.syncBit) { + case 0x08: Demod.samples = 3; break; + case 0x04: Demod.samples = 2; break; + case 0x02: Demod.samples = 1; break; + case 0x01: Demod.samples = 0; break; + } + } + error = 0; + } + } + else { + //modulation = bit & Demod.syncBit; + modulation = ((bit << 1) ^ ((Demod.buffer & 0x08) >> 3)) & Demod.syncBit; + + Demod.samples += 4; + + if(Demod.posCount==0) { + Demod.posCount = 1; + if(modulation) { + Demod.sub = SUB_FIRST_HALF; + } + else { + Demod.sub = SUB_NONE; + } + } + else { + Demod.posCount = 0; + if(modulation && (Demod.sub == SUB_FIRST_HALF)) { + if(Demod.state!=DEMOD_ERROR_WAIT) { + Demod.state = DEMOD_ERROR_WAIT; + Demod.output[Demod.len] = 0xaa; + error = 0x01; + } + } + else if(modulation) { + Demod.sub = SUB_SECOND_HALF; + } + + switch(Demod.state) { + case DEMOD_START_OF_COMMUNICATION: + if(Demod.sub == SUB_FIRST_HALF) { + Demod.state = DEMOD_MANCHESTER_D; + } + else { + Demod.output[Demod.len] = 0xab; + Demod.state = DEMOD_ERROR_WAIT; + error = 0x02; + } + break; + + case DEMOD_MANCHESTER_D: + case DEMOD_MANCHESTER_E: + if(Demod.sub == SUB_FIRST_HALF) { + Demod.bitCount++; + Demod.shiftReg = (Demod.shiftReg >> 1) ^ 0x100; + Demod.state = DEMOD_MANCHESTER_D; + } + else if(Demod.sub == SUB_SECOND_HALF) { + Demod.bitCount++; + Demod.shiftReg >>= 1; + Demod.state = DEMOD_MANCHESTER_E; + } + else { + Demod.state = DEMOD_MANCHESTER_F; + } + break; + + case DEMOD_MANCHESTER_F: + // Tag response does not need to be a complete byte! + if(Demod.len > 0 || Demod.bitCount > 0) { + if(Demod.bitCount > 0) { + Demod.shiftReg >>= (9 - Demod.bitCount); + Demod.output[Demod.len] = Demod.shiftReg & 0xff; + Demod.len++; + // No parity bit, so just shift a 0 + Demod.parityBits <<= 1; + } + + Demod.state = DEMOD_UNSYNCD; + return TRUE; + } + else { + Demod.output[Demod.len] = 0xad; + Demod.state = DEMOD_ERROR_WAIT; + error = 0x03; + } + break; + + case DEMOD_ERROR_WAIT: + Demod.state = DEMOD_UNSYNCD; + break; + + default: + Demod.output[Demod.len] = 0xdd; + Demod.state = DEMOD_UNSYNCD; + break; + } + + if(Demod.bitCount>=9) { + Demod.output[Demod.len] = Demod.shiftReg & 0xff; + Demod.len++; + + Demod.parityBits <<= 1; + Demod.parityBits ^= ((Demod.shiftReg >> 8) & 0x01); + + Demod.bitCount = 0; + Demod.shiftReg = 0; + } + + /*if(error) { + Demod.output[Demod.len] = 0xBB; + Demod.len++; + Demod.output[Demod.len] = error & 0xFF; + Demod.len++; + Demod.output[Demod.len] = 0xBB; + Demod.len++; + Demod.output[Demod.len] = bit & 0xFF; + Demod.len++; + Demod.output[Demod.len] = Demod.buffer & 0xFF; + Demod.len++; + Demod.output[Demod.len] = Demod.syncBit & 0xFF; + Demod.len++; + Demod.output[Demod.len] = 0xBB; + Demod.len++; + return TRUE; + }*/ + + } + + } // end (state != UNSYNCED) + + return FALSE; +} + +//============================================================================= +// Finally, a `sniffer' for ISO 14443 Type A +// Both sides of communication! +//============================================================================= + +//----------------------------------------------------------------------------- +// Record the sequence of commands sent by the reader to the tag, with +// triggering so that we start recording at the point that the tag is moved +// near the reader. +//----------------------------------------------------------------------------- +void SnoopIso14443a(void) +{ + + // BIG CHANGE - UNDERSTAND THIS BEFORE WE COMMIT + + #define RECV_CMD_OFFSET 3032 + #define RECV_RES_OFFSET 3096 + #define DMA_BUFFER_OFFSET 3160 + #define DMA_BUFFER_SIZE 4096 + #define TRACE_LENGTH 3000 + +// #define RECV_CMD_OFFSET 2032 // original (working as of 21/2/09) values +// #define RECV_RES_OFFSET 2096 // original (working as of 21/2/09) values +// #define DMA_BUFFER_OFFSET 2160 // original (working as of 21/2/09) values +// #define DMA_BUFFER_SIZE 4096 // original (working as of 21/2/09) values +// #define TRACE_LENGTH 2000 // original (working as of 21/2/09) values + + // We won't start recording the frames that we acquire until we trigger; + // a good trigger condition to get started is probably when we see a + // response from the tag. + BOOL triggered = TRUE; // FALSE to wait first for card + + // The command (reader -> tag) that we're receiving. + // The length of a received command will in most cases be no more than 18 bytes. + // So 32 should be enough! + BYTE *receivedCmd = (((BYTE *)BigBuf) + RECV_CMD_OFFSET); + // The response (tag -> reader) that we're receiving. + BYTE *receivedResponse = (((BYTE *)BigBuf) + RECV_RES_OFFSET); + + // As we receive stuff, we copy it from receivedCmd or receivedResponse + // into trace, along with its length and other annotations. + BYTE *trace = (BYTE *)BigBuf; + int traceLen = 0; + + // The DMA buffer, used to stream samples from the FPGA + SBYTE *dmaBuf = ((SBYTE *)BigBuf) + DMA_BUFFER_OFFSET; + int lastRxCounter; + SBYTE *upTo; + int smpl; + int maxBehindBy = 0; + + // Count of samples received so far, so that we can include timing + // information in the trace buffer. + int samples = 0; + int rsamples = 0; + + memset(trace, 0x44, RECV_CMD_OFFSET); + + // Set up the demodulator for tag -> reader responses. + Demod.output = receivedResponse; + Demod.len = 0; + Demod.state = DEMOD_UNSYNCD; + + // And the reader -> tag commands + memset(&Uart, 0, sizeof(Uart)); + Uart.output = receivedCmd; + Uart.byteCntMax = 32; // was 100 (greg)//////////////////////////////////////////////////////////////////////// + Uart.state = STATE_UNSYNCD; + + // And put the FPGA in the appropriate mode + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_SNIFFER); + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + + // Setup for the DMA. + FpgaSetupSsc(); + upTo = dmaBuf; + lastRxCounter = DMA_BUFFER_SIZE; + FpgaSetupSscDma((BYTE *)dmaBuf, DMA_BUFFER_SIZE); + + LED_A_ON(); + + // And now we loop, receiving samples. + for(;;) { + WDT_HIT(); + int behindBy = (lastRxCounter - PDC_RX_COUNTER(SSC_BASE)) & + (DMA_BUFFER_SIZE-1); + if(behindBy > maxBehindBy) { + maxBehindBy = behindBy; + if(behindBy > 400) { + DbpString("blew circular buffer!"); + goto done; + } + } + if(behindBy < 1) continue; + + smpl = upTo[0]; + upTo++; + lastRxCounter -= 1; + if(upTo - dmaBuf > DMA_BUFFER_SIZE) { + upTo -= DMA_BUFFER_SIZE; + lastRxCounter += DMA_BUFFER_SIZE; + PDC_RX_NEXT_POINTER(SSC_BASE) = (DWORD)upTo; + PDC_RX_NEXT_COUNTER(SSC_BASE) = DMA_BUFFER_SIZE; + } + + samples += 4; +#define HANDLE_BIT_IF_BODY \ + LED_C_ON(); \ + if(triggered) { \ + trace[traceLen++] = ((rsamples >> 0) & 0xff); \ + trace[traceLen++] = ((rsamples >> 8) & 0xff); \ + trace[traceLen++] = ((rsamples >> 16) & 0xff); \ + trace[traceLen++] = ((rsamples >> 24) & 0xff); \ + trace[traceLen++] = ((Uart.parityBits >> 0) & 0xff); \ + trace[traceLen++] = ((Uart.parityBits >> 8) & 0xff); \ + trace[traceLen++] = ((Uart.parityBits >> 16) & 0xff); \ + trace[traceLen++] = ((Uart.parityBits >> 24) & 0xff); \ + trace[traceLen++] = Uart.byteCnt; \ + memcpy(trace+traceLen, receivedCmd, Uart.byteCnt); \ + traceLen += Uart.byteCnt; \ + if(traceLen > TRACE_LENGTH) break; \ + } \ + /* And ready to receive another command. */ \ + Uart.state = STATE_UNSYNCD; \ + /* And also reset the demod code, which might have been */ \ + /* false-triggered by the commands from the reader. */ \ + Demod.state = DEMOD_UNSYNCD; \ + LED_B_OFF(); \ + + if(MillerDecoding((smpl & 0xF0) >> 4)) { + rsamples = samples - Uart.samples; + HANDLE_BIT_IF_BODY + } + if(ManchesterDecoding(smpl & 0x0F)) { + rsamples = samples - Demod.samples; + LED_B_ON(); + + // timestamp, as a count of samples + trace[traceLen++] = ((rsamples >> 0) & 0xff); + trace[traceLen++] = ((rsamples >> 8) & 0xff); + trace[traceLen++] = ((rsamples >> 16) & 0xff); + trace[traceLen++] = 0x80 | ((rsamples >> 24) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 0) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 8) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 16) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 24) & 0xff); + // length + trace[traceLen++] = Demod.len; + memcpy(trace+traceLen, receivedResponse, Demod.len); + traceLen += Demod.len; + if(traceLen > TRACE_LENGTH) break; + + triggered = TRUE; + + // And ready to receive another response. + memset(&Demod, 0, sizeof(Demod)); + Demod.output = receivedResponse; + Demod.state = DEMOD_UNSYNCD; + LED_C_OFF(); + } + + if(BUTTON_PRESS()) { + DbpString("cancelled_a"); + goto done; + } + } + + DbpString("COMMAND FINISHED"); + + DbpIntegers(maxBehindBy, Uart.state, Uart.byteCnt); + DbpIntegers(Uart.byteCntMax, traceLen, (int)Uart.output[0]); + +done: + PDC_CONTROL(SSC_BASE) = PDC_RX_DISABLE; + DbpIntegers(maxBehindBy, Uart.state, Uart.byteCnt); + DbpIntegers(Uart.byteCntMax, traceLen, (int)Uart.output[0]); + LED_A_OFF(); + LED_B_OFF(); + LED_C_OFF(); + LED_D_OFF(); +} + +// Prepare communication bits to send to FPGA +void Sequence(SecType seq) +{ + ToSendMax++; + switch(seq) { + // CARD TO READER + case SEC_D: + // Sequence D: 11110000 + // modulation with subcarrier during first half + ToSend[ToSendMax] = 0xf0; + break; + case SEC_E: + // Sequence E: 00001111 + // modulation with subcarrier during second half + ToSend[ToSendMax] = 0x0f; + break; + case SEC_F: + // Sequence F: 00000000 + // no modulation with subcarrier + ToSend[ToSendMax] = 0x00; + break; + // READER TO CARD + case SEC_X: + // Sequence X: 00001100 + // drop after half a period + ToSend[ToSendMax] = 0x0c; + break; + case SEC_Y: + default: + // Sequence Y: 00000000 + // no drop + ToSend[ToSendMax] = 0x00; + break; + case SEC_Z: + // Sequence Z: 11000000 + // drop at start + ToSend[ToSendMax] = 0xc0; + break; + } +} + +//----------------------------------------------------------------------------- +// Prepare tag messages +//----------------------------------------------------------------------------- +static void CodeIso14443aAsTag(const BYTE *cmd, int len) +{ + int i; + int oddparity; + + ToSendReset(); + + // Correction bit, might be removed when not needed + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(1); // 1 + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + + // Send startbit + Sequence(SEC_D); + + for(i = 0; i < len; i++) { + int j; + BYTE b = cmd[i]; + + // Data bits + oddparity = 0x01; + for(j = 0; j < 8; j++) { + oddparity ^= (b & 1); + if(b & 1) { + Sequence(SEC_D); + } else { + Sequence(SEC_E); + } + b >>= 1; + } + + // Parity bit + if(oddparity) { + Sequence(SEC_D); + } else { + Sequence(SEC_E); + } + } + + // Send stopbit + Sequence(SEC_F); + + // Flush the buffer in FPGA!! + for(i = 0; i < 5; i++) { + Sequence(SEC_F); + } + + // Convert from last byte pos to length + ToSendMax++; + + // Add a few more for slop + ToSend[ToSendMax++] = 0x00; + ToSend[ToSendMax++] = 0x00; + //ToSendMax += 2; +} + +//----------------------------------------------------------------------------- +// This is to send a NACK kind of answer, its only 3 bits, I know it should be 4 +//----------------------------------------------------------------------------- +static void CodeStrangeAnswer() +{ + int i; + + ToSendReset(); + + // Correction bit, might be removed when not needed + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(1); // 1 + ToSendStuffBit(0); + ToSendStuffBit(0); + ToSendStuffBit(0); + + // Send startbit + Sequence(SEC_D); + + // 0 + Sequence(SEC_E); + + // 0 + Sequence(SEC_E); + + // 1 + Sequence(SEC_D); + + // Send stopbit + Sequence(SEC_F); + + // Flush the buffer in FPGA!! + for(i = 0; i < 5; i++) { + Sequence(SEC_F); + } + + // Convert from last byte pos to length + ToSendMax++; + + // Add a few more for slop + ToSend[ToSendMax++] = 0x00; + ToSend[ToSendMax++] = 0x00; + //ToSendMax += 2; +} + +//----------------------------------------------------------------------------- +// Wait for commands from reader +// Stop when button is pressed +// Or return TRUE when command is captured +//----------------------------------------------------------------------------- +static BOOL GetIso14443aCommandFromReader(BYTE *received, int *len, int maxLen) +{ + // Set FPGA mode to "simulated ISO 14443 tag", no modulation (listen + // only, since we are receiving, not transmitting). + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_TAGSIM_LISTEN); + + // Now run a `software UART' on the stream of incoming samples. + Uart.output = received; + Uart.byteCntMax = maxLen; + Uart.state = STATE_UNSYNCD; + + for(;;) { + WDT_HIT(); + + if(BUTTON_PRESS()) return FALSE; + + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = 0x00; + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + BYTE b = (BYTE)SSC_RECEIVE_HOLDING; + if(MillerDecoding((b & 0xf0) >> 4)) { + *len = Uart.byteCnt; + return TRUE; + } + if(MillerDecoding(b & 0x0f)) { + *len = Uart.byteCnt; + return TRUE; + } + } + } +} + +//----------------------------------------------------------------------------- +// Main loop of simulated tag: receive commands from reader, decide what +// response to send, and send it. +//----------------------------------------------------------------------------- +void SimulateIso14443aTag(int tagType, int TagUid) +{ + // This function contains the tag emulation + + // Prepare protocol messages + // static const BYTE cmd1[] = { 0x26 }; +// static const BYTE response1[] = { 0x02, 0x00 }; // Says: I am Mifare 4k - original line - greg +// + static const BYTE response1[] = { 0x44, 0x03 }; // Says: I am a DESFire Tag, ph33r me +// static const BYTE response1[] = { 0x44, 0x00 }; // Says: I am a ULTRALITE Tag, 0wn me + + // UID response + // static const BYTE cmd2[] = { 0x93, 0x20 }; + //static const BYTE response2[] = { 0x9a, 0xe5, 0xe4, 0x43, 0xd8 }; // original value - greg + + + +// my desfire + static const BYTE response2[] = { 0x88, 0x04, 0x21, 0x3f, 0x4d }; // known uid - note cascade (0x88), 2nd byte (0x04) = NXP/Phillips + + +// When reader selects us during cascade1 it will send cmd3 +//BYTE response3[] = { 0x04, 0x00, 0x00 }; // SAK Select (cascade1) successful response (ULTRALITE) +BYTE response3[] = { 0x24, 0x00, 0x00 }; // SAK Select (cascade1) successful response (DESFire) +ComputeCrc14443(CRC_14443_A, response3, 1, &response3[1], &response3[2]); + +// send cascade2 2nd half of UID +static const BYTE response2a[] = { 0x51, 0x48, 0x1d, 0x80, 0x84 }; // uid - cascade2 - 2nd half (4 bytes) of UID+ BCCheck +// NOTE : THE CRC on the above may be wrong as I have obfuscated the actual UID + + +// When reader selects us during cascade2 it will send cmd3a +//BYTE response3a[] = { 0x00, 0x00, 0x00 }; // SAK Select (cascade2) successful response (ULTRALITE) +BYTE response3a[] = { 0x20, 0x00, 0x00 }; // SAK Select (cascade2) successful response (DESFire) +ComputeCrc14443(CRC_14443_A, response3a, 1, &response3a[1], &response3a[2]); + +// When reader tries to authenticate + // static const BYTE cmd5[] = { 0x60, 0x00, 0xf5, 0x7b }; + static const BYTE response5[] = { 0x00, 0x00, 0x00, 0x00 }; // Very random tag nonce + + BYTE *resp; + int respLen; + + // Longest possible response will be 16 bytes + 2 CRC = 18 bytes + // This will need + // 144 data bits (18 * 8) + // 18 parity bits + // 2 Start and stop + // 1 Correction bit (Answer in 1172 or 1236 periods, see FPGA) + // 1 just for the case + // ----------- + + // 166 + // + // 166 bytes, since every bit that needs to be send costs us a byte + // + + + // Respond with card type + BYTE *resp1 = (((BYTE *)BigBuf) + 800); + int resp1Len; + + // Anticollision cascade1 - respond with uid + BYTE *resp2 = (((BYTE *)BigBuf) + 970); + int resp2Len; + + // Anticollision cascade2 - respond with 2nd half of uid if asked + // we're only going to be asked if we set the 1st byte of the UID (during cascade1) to 0x88 + BYTE *resp2a = (((BYTE *)BigBuf) + 1140); + int resp2aLen; + + // Acknowledge select - cascade 1 + BYTE *resp3 = (((BYTE *)BigBuf) + 1310); + int resp3Len; + + // Acknowledge select - cascade 2 + BYTE *resp3a = (((BYTE *)BigBuf) + 1480); + int resp3aLen; + + // Response to a read request - not implemented atm + BYTE *resp4 = (((BYTE *)BigBuf) + 1550); + int resp4Len; + + // Authenticate response - nonce + BYTE *resp5 = (((BYTE *)BigBuf) + 1720); + int resp5Len; + + BYTE *receivedCmd = (BYTE *)BigBuf; + int len; + + int i; + int u; + BYTE b; + + // To control where we are in the protocol + int order = 0; + int lastorder; + + // Just to allow some checks + int happened = 0; + int happened2 = 0; + + int cmdsRecvd = 0; + + BOOL fdt_indicator; + + memset(receivedCmd, 0x44, 400); + + // Prepare the responses of the anticollision phase + // there will be not enough time to do this at the moment the reader sends it REQA + + // Answer to request + CodeIso14443aAsTag(response1, sizeof(response1)); + memcpy(resp1, ToSend, ToSendMax); resp1Len = ToSendMax; + + // Send our UID (cascade 1) + CodeIso14443aAsTag(response2, sizeof(response2)); + memcpy(resp2, ToSend, ToSendMax); resp2Len = ToSendMax; + + // Answer to select (cascade1) + CodeIso14443aAsTag(response3, sizeof(response3)); + memcpy(resp3, ToSend, ToSendMax); resp3Len = ToSendMax; + + // Send the cascade 2 2nd part of the uid + CodeIso14443aAsTag(response2a, sizeof(response2a)); + memcpy(resp2a, ToSend, ToSendMax); resp2aLen = ToSendMax; + + // Answer to select (cascade 2) + CodeIso14443aAsTag(response3a, sizeof(response3a)); + memcpy(resp3a, ToSend, ToSendMax); resp3aLen = ToSendMax; + + // Strange answer is an example of rare message size (3 bits) + CodeStrangeAnswer(); + memcpy(resp4, ToSend, ToSendMax); resp4Len = ToSendMax; + + // Authentication answer (random nonce) + CodeIso14443aAsTag(response5, sizeof(response5)); + memcpy(resp5, ToSend, ToSendMax); resp5Len = ToSendMax; + + // We need to listen to the high-frequency, peak-detected path. + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + FpgaSetupSsc(); + + cmdsRecvd = 0; + + LED_A_ON(); + for(;;) { + + if(!GetIso14443aCommandFromReader(receivedCmd, &len, 100)) { + DbpString("button press"); + break; + } + // doob - added loads of debug strings so we can see what the reader is saying to us during the sim as hi14alist is not populated + // Okay, look at the command now. + lastorder = order; + i = 1; // first byte transmitted + if(receivedCmd[0] == 0x26) { + // Received a REQUEST + resp = resp1; respLen = resp1Len; order = 1; + //DbpString("Hello request from reader:"); + } else if(receivedCmd[0] == 0x52) { + // Received a WAKEUP + resp = resp1; respLen = resp1Len; order = 6; +// //DbpString("Wakeup request from reader:"); + + } else if(receivedCmd[1] == 0x20 && receivedCmd[0] == 0x93) { // greg - cascade 1 anti-collision + // Received request for UID (cascade 1) + resp = resp2; respLen = resp2Len; order = 2; +// DbpString("UID (cascade 1) request from reader:"); +// DbpIntegers(receivedCmd[0], receivedCmd[1], receivedCmd[2]); + + + } else if(receivedCmd[1] == 0x20 && receivedCmd[0] ==0x95) { // greg - cascade 2 anti-collision + // Received request for UID (cascade 2) + resp = resp2a; respLen = resp2aLen; order = 20; +// DbpString("UID (cascade 2) request from reader:"); +// DbpIntegers(receivedCmd[0], receivedCmd[1], receivedCmd[2]); + + + } else if(receivedCmd[1] == 0x70 && receivedCmd[0] ==0x93) { // greg - cascade 1 select + // Received a SELECT + resp = resp3; respLen = resp3Len; order = 3; +// DbpString("Select (cascade 1) request from reader:"); +// DbpIntegers(receivedCmd[0], receivedCmd[1], receivedCmd[2]); + + + } else if(receivedCmd[1] == 0x70 && receivedCmd[0] ==0x95) { // greg - cascade 2 select + // Received a SELECT + resp = resp3a; respLen = resp3aLen; order = 30; +// DbpString("Select (cascade 2) request from reader:"); +// DbpIntegers(receivedCmd[0], receivedCmd[1], receivedCmd[2]); + + + } else if(receivedCmd[0] == 0x30) { + // Received a READ + resp = resp4; respLen = resp4Len; order = 4; // Do nothing + DbpString("Read request from reader:"); + DbpIntegers(receivedCmd[0], receivedCmd[1], receivedCmd[2]); + + + } else if(receivedCmd[0] == 0x50) { + // Received a HALT + resp = resp1; respLen = 0; order = 5; // Do nothing + DbpString("Reader requested we HALT!:"); + + } else if(receivedCmd[0] == 0x60) { + // Received an authentication request + resp = resp5; respLen = resp5Len; order = 7; + DbpString("Authenticate request from reader:"); + DbpIntegers(receivedCmd[0], receivedCmd[1], receivedCmd[2]); + + } else if(receivedCmd[0] == 0xE0) { + // Received a RATS request + resp = resp1; respLen = 0;order = 70; + DbpString("RATS request from reader:"); + DbpIntegers(receivedCmd[0], receivedCmd[1], receivedCmd[2]); + } else { + // Never seen this command before + DbpString("Unknown command received from reader:"); + DbpIntegers(receivedCmd[0], receivedCmd[1], receivedCmd[2]); + DbpIntegers(receivedCmd[3], receivedCmd[4], receivedCmd[5]); + DbpIntegers(receivedCmd[6], receivedCmd[7], receivedCmd[8]); + + // Do not respond + resp = resp1; respLen = 0; order = 0; + } + + // Count number of wakeups received after a halt + if(order == 6 && lastorder == 5) { happened++; } + + // Count number of other messages after a halt + if(order != 6 && lastorder == 5) { happened2++; } + + // Look at last parity bit to determine timing of answer + if((Uart.parityBits & 0x01) || receivedCmd[0] == 0x52) { + // 1236, so correction bit needed + i = 0; + } + + memset(receivedCmd, 0x44, 32); + + if(cmdsRecvd > 999) { + DbpString("1000 commands later..."); + break; + } + else { + cmdsRecvd++; + } + + if(respLen <= 0) continue; + + // Modulate Manchester + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_TAGSIM_MOD); + SSC_TRANSMIT_HOLDING = 0x00; + FpgaSetupSsc(); + + // ### Transmit the response ### + u = 0; + b = 0x00; + fdt_indicator = FALSE; + for(;;) { + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + volatile BYTE b = (BYTE)SSC_RECEIVE_HOLDING; + (void)b; + } + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + if(i > respLen) { + b = 0x00; + u++; + } else { + b = resp[i]; + i++; + } + SSC_TRANSMIT_HOLDING = b; + + if(u > 4) { + break; + } + } + if(BUTTON_PRESS()) { + break; + } + } + + } + + DbpIntegers(happened, happened2, cmdsRecvd); + LED_A_OFF(); +} + +//----------------------------------------------------------------------------- +// Transmit the command (to the tag) that was placed in ToSend[]. +//----------------------------------------------------------------------------- +static void TransmitFor14443a(const BYTE *cmd, int len, int *samples, int *wait) +{ + int c; + + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_READER_MOD); + + if(*wait < 10) { *wait = 10; } + + for(c = 0; c < *wait;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = 0x00; // For exact timing! + c++; + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + volatile DWORD r = SSC_RECEIVE_HOLDING; + (void)r; + } + WDT_HIT(); + } + + c = 0; + for(;;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = cmd[c]; + c++; + if(c >= len) { + break; + } + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + volatile DWORD r = SSC_RECEIVE_HOLDING; + (void)r; + } + WDT_HIT(); + } + *samples = (c + *wait) << 3; +} + +//----------------------------------------------------------------------------- +// To generate an arbitrary stream from reader +// +//----------------------------------------------------------------------------- +void ArbitraryFromReader(const BYTE *cmd, int parity, int len) +{ + int i; + int j; + int last; + BYTE b; + + ToSendReset(); + + // Start of Communication (Seq. Z) + Sequence(SEC_Z); + last = 0; + + for(i = 0; i < len; i++) { + // Data bits + b = cmd[i]; + for(j = 0; j < 8; j++) { + if(b & 1) { + // Sequence X + Sequence(SEC_X); + last = 1; + } else { + if(last == 0) { + // Sequence Z + Sequence(SEC_Z); + } + else { + // Sequence Y + Sequence(SEC_Y); + last = 0; + } + } + b >>= 1; + + } + + // Predefined parity bit, the flipper flips when needed, because of flips in byte sent + if(((parity >> (len - i - 1)) & 1)) { + // Sequence X + Sequence(SEC_X); + last = 1; + } else { + if(last == 0) { + // Sequence Z + Sequence(SEC_Z); + } + else { + // Sequence Y + Sequence(SEC_Y); + last = 0; + } + } + } + + // End of Communication + if(last == 0) { + // Sequence Z + Sequence(SEC_Z); + } + else { + // Sequence Y + Sequence(SEC_Y); + last = 0; + } + // Sequence Y + Sequence(SEC_Y); + + // Just to be sure! + Sequence(SEC_Y); + Sequence(SEC_Y); + Sequence(SEC_Y); + + // Convert from last character reference to length + ToSendMax++; +} + +//----------------------------------------------------------------------------- +// Code a 7-bit command without parity bit +// This is especially for 0x26 and 0x52 (REQA and WUPA) +//----------------------------------------------------------------------------- +void ShortFrameFromReader(const BYTE *cmd) +{ + int j; + int last; + BYTE b; + + ToSendReset(); + + // Start of Communication (Seq. Z) + Sequence(SEC_Z); + last = 0; + + b = cmd[0]; + for(j = 0; j < 7; j++) { + if(b & 1) { + // Sequence X + Sequence(SEC_X); + last = 1; + } else { + if(last == 0) { + // Sequence Z + Sequence(SEC_Z); + } + else { + // Sequence Y + Sequence(SEC_Y); + last = 0; + } + } + b >>= 1; + } + + // End of Communication + if(last == 0) { + // Sequence Z + Sequence(SEC_Z); + } + else { + // Sequence Y + Sequence(SEC_Y); + last = 0; + } + // Sequence Y + Sequence(SEC_Y); + + // Just to be sure! + Sequence(SEC_Y); + Sequence(SEC_Y); + Sequence(SEC_Y); + + // Convert from last character reference to length + ToSendMax++; +} + +//----------------------------------------------------------------------------- +// Prepare reader command to send to FPGA +// +//----------------------------------------------------------------------------- +void CodeIso14443aAsReader(const BYTE *cmd, int len) +{ + int i, j; + int last; + int oddparity; + BYTE b; + + ToSendReset(); + + // Start of Communication (Seq. Z) + Sequence(SEC_Z); + last = 0; + + for(i = 0; i < len; i++) { + // Data bits + b = cmd[i]; + oddparity = 0x01; + for(j = 0; j < 8; j++) { + oddparity ^= (b & 1); + if(b & 1) { + // Sequence X + Sequence(SEC_X); + last = 1; + } else { + if(last == 0) { + // Sequence Z + Sequence(SEC_Z); + } + else { + // Sequence Y + Sequence(SEC_Y); + last = 0; + } + } + b >>= 1; + } + + // Parity bit + if(oddparity) { + // Sequence X + Sequence(SEC_X); + last = 1; + } else { + if(last == 0) { + // Sequence Z + Sequence(SEC_Z); + } + else { + // Sequence Y + Sequence(SEC_Y); + last = 0; + } + } + } + + // End of Communication + if(last == 0) { + // Sequence Z + Sequence(SEC_Z); + } + else { + // Sequence Y + Sequence(SEC_Y); + last = 0; + } + // Sequence Y + Sequence(SEC_Y); + + // Just to be sure! + Sequence(SEC_Y); + Sequence(SEC_Y); + Sequence(SEC_Y); + + // Convert from last character reference to length + ToSendMax++; +} + + +//----------------------------------------------------------------------------- +// Wait a certain time for tag response +// If a response is captured return TRUE +// If it takes to long return FALSE +//----------------------------------------------------------------------------- +static BOOL GetIso14443aAnswerFromTag(BYTE *receivedResponse, int maxLen, int *samples, int *elapsed) //BYTE *buffer +{ + // buffer needs to be 512 bytes + int c; + + // Set FPGA mode to "simulated ISO 14443 tag", no modulation (listen + // only, since we are receiving, not transmitting). + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_READER_LISTEN); + + // Now get the answer from the card + Demod.output = receivedResponse; + Demod.len = 0; + Demod.state = DEMOD_UNSYNCD; + + BYTE b; + *elapsed = 0; + + c = 0; + for(;;) { + WDT_HIT(); + + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = 0x00; // To make use of exact timing of next command from reader!! + (*elapsed)++; + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + if(c < 512) { c++; } else { return FALSE; } + b = (BYTE)SSC_RECEIVE_HOLDING; + if(ManchesterDecoding((b & 0xf0) >> 4)) { + *samples = ((c - 1) << 3) + 4; + return TRUE; + } + if(ManchesterDecoding(b & 0x0f)) { + *samples = c << 3; + return TRUE; + } + } + } +} + +//----------------------------------------------------------------------------- +// Read an ISO 14443a tag. Send out commands and store answers. +// +//----------------------------------------------------------------------------- +void ReaderIso14443a(DWORD parameter) +{ + // Anticollision + static const BYTE cmd1[] = { 0x52 }; // or 0x26 + static const BYTE cmd2[] = { 0x93,0x20 }; + // UID = 0x2a,0x69,0x8d,0x43,0x8d, last two bytes are CRC bytes + BYTE cmd3[] = { 0x93,0x70,0x2a,0x69,0x8d,0x43,0x8d,0x52,0x55 }; + + // For Ultralight add an extra anticollission layer -> 95 20 and then 95 70 + + // greg - here we will add our cascade level 2 anticolission and select functions to deal with ultralight // and 7-byte UIDs in generall... + BYTE cmd4[] = {0x95,0x20}; // ask for cascade 2 select + // 95 20 + //BYTE cmd3a[] = { 0x95,0x70,0x2a,0x69,0x8d,0x43,0x8d,0x52,0x55 }; + // 95 70 + + // cascade 2 select + BYTE cmd5[] = { 0x95,0x70,0x2a,0x69,0x8d,0x43,0x8d,0x52,0x55 }; + + + // RATS (request for answer to select) + //BYTE cmd6[] = { 0xe0,0x50,0xbc,0xa5 }; // original RATS + BYTE cmd6[] = { 0xe0,0x21,0xb2,0xc7 }; // Desfire RATS + + int reqaddr = 2024; // was 2024 - tied to other size changes + int reqsize = 60; + + BYTE *req1 = (((BYTE *)BigBuf) + reqaddr); + int req1Len; + + BYTE *req2 = (((BYTE *)BigBuf) + reqaddr + reqsize); + int req2Len; + + BYTE *req3 = (((BYTE *)BigBuf) + reqaddr + (reqsize * 2)); + int req3Len; + +// greg added req 4 & 5 to deal with cascade 2 section + BYTE *req4 = (((BYTE *)BigBuf) + reqaddr + (reqsize * 3)); + int req4Len; + + BYTE *req5 = (((BYTE *)BigBuf) + reqaddr + (reqsize * 4)); + int req5Len; + + BYTE *req6 = (((BYTE *)BigBuf) + reqaddr + (reqsize * 5)); + int req6Len; + + //BYTE *req7 = (((BYTE *)BigBuf) + reqaddr + (reqsize * 6)); + //int req7Len; + + BYTE *receivedAnswer = (((BYTE *)BigBuf) + 3560); // was 3560 - tied to other size changes + + BYTE *trace = (BYTE *)BigBuf; + int traceLen = 0; + int rsamples = 0; + + memset(trace, 0x44, 2000); // was 2000 - tied to oter size chnages + // setting it to 3000 causes no tag responses to be detected (2900 is ok) + // setting it to 1000 causes no tag responses to be detected + + // Prepare some commands! + ShortFrameFromReader(cmd1); + memcpy(req1, ToSend, ToSendMax); req1Len = ToSendMax; + + CodeIso14443aAsReader(cmd2, sizeof(cmd2)); + memcpy(req2, ToSend, ToSendMax); req2Len = ToSendMax; + + CodeIso14443aAsReader(cmd3, sizeof(cmd3)); + memcpy(req3, ToSend, ToSendMax); req3Len = ToSendMax; + + + CodeIso14443aAsReader(cmd4, sizeof(cmd4)); // 4 is cascade 2 request + memcpy(req4, ToSend, ToSendMax); req4Len = ToSendMax; + + + CodeIso14443aAsReader(cmd5, sizeof(cmd5)); // 5 is cascade 2 select + memcpy(req5, ToSend, ToSendMax); req5Len = ToSendMax; + + + CodeIso14443aAsReader(cmd6, sizeof(cmd6)); + memcpy(req6, ToSend, ToSendMax); req6Len = ToSendMax; + + // Setup SSC + FpgaSetupSsc(); + + // Start from off (no field generated) + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + SpinDelay(200); + + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + FpgaSetupSsc(); + + // Now give it time to spin up. + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_READER_MOD); + SpinDelay(200); + + LED_A_ON(); + LED_B_OFF(); + LED_C_OFF(); + LED_D_OFF(); + + int samples = 0; + int tsamples = 0; + int wait = 0; + int elapsed = 0; + + for(;;) { + // Send WUPA (or REQA) + TransmitFor14443a(req1, req1Len, &tsamples, &wait); + // Store answer in buffer + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 1; + memcpy(trace+traceLen, cmd1, 1); + traceLen += 1; + if(traceLen > TRACE_LENGTH) goto done; + + while(!GetIso14443aAnswerFromTag(receivedAnswer, 100, &samples, &elapsed)) { + if(BUTTON_PRESS()) goto done; + + // No answer, just continue polling + TransmitFor14443a(req1, req1Len, &tsamples, &wait); + // Store answer in buffer + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 1; + memcpy(trace+traceLen, cmd1, 1); + traceLen += 1; + if(traceLen > TRACE_LENGTH) goto done; + } + + // Store answer in buffer + rsamples = rsamples + (samples - Demod.samples); + trace[traceLen++] = ((rsamples >> 0) & 0xff); + trace[traceLen++] = ((rsamples >> 8) & 0xff); + trace[traceLen++] = ((rsamples >> 16) & 0xff); + trace[traceLen++] = 0x80 | ((rsamples >> 24) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 0) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 8) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 16) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 24) & 0xff); + trace[traceLen++] = Demod.len; + memcpy(trace+traceLen, receivedAnswer, Demod.len); + traceLen += Demod.len; + if(traceLen > TRACE_LENGTH) goto done; + + // Ask for card UID + TransmitFor14443a(req2, req2Len, &tsamples, &wait); + // Store answer in buffer + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 2; + memcpy(trace+traceLen, cmd2, 2); + traceLen += 2; + if(traceLen > TRACE_LENGTH) goto done; + + if(!GetIso14443aAnswerFromTag(receivedAnswer, 100, &samples, &elapsed)) { + continue; + } + + // Store answer in buffer + rsamples = rsamples + (samples - Demod.samples); + trace[traceLen++] = ((rsamples >> 0) & 0xff); + trace[traceLen++] = ((rsamples >> 8) & 0xff); + trace[traceLen++] = ((rsamples >> 16) & 0xff); + trace[traceLen++] = 0x80 | ((rsamples >> 24) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 0) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 8) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 16) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 24) & 0xff); + trace[traceLen++] = Demod.len; + memcpy(trace+traceLen, receivedAnswer, Demod.len); + traceLen += Demod.len; + if(traceLen > TRACE_LENGTH) goto done; + + // Construct SELECT UID command + // First copy the 5 bytes (Mifare Classic) after the 93 70 + memcpy(cmd3+2,receivedAnswer,5); + // Secondly compute the two CRC bytes at the end + ComputeCrc14443(CRC_14443_A, cmd3, 7, &cmd3[7], &cmd3[8]); + // Prepare the bit sequence to modulate the subcarrier + // Store answer in buffer + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 9; + memcpy(trace+traceLen, cmd3, 9); + traceLen += 9; + if(traceLen > TRACE_LENGTH) goto done; + CodeIso14443aAsReader(cmd3, sizeof(cmd3)); + memcpy(req3, ToSend, ToSendMax); req3Len = ToSendMax; + + // Select the card + TransmitFor14443a(req3, req3Len, &samples, &wait); + if(!GetIso14443aAnswerFromTag(receivedAnswer, 100, &samples, &elapsed)) { + continue; + } + + // Store answer in buffer + rsamples = rsamples + (samples - Demod.samples); + trace[traceLen++] = ((rsamples >> 0) & 0xff); + trace[traceLen++] = ((rsamples >> 8) & 0xff); + trace[traceLen++] = ((rsamples >> 16) & 0xff); + trace[traceLen++] = 0x80 | ((rsamples >> 24) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 0) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 8) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 16) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 24) & 0xff); + trace[traceLen++] = Demod.len; + memcpy(trace+traceLen, receivedAnswer, Demod.len); + traceLen += Demod.len; + if(traceLen > TRACE_LENGTH) goto done; + +// OK we have selected at least at cascade 1, lets see if first byte of UID was 0x88 in +// which case we need to make a cascade 2 request and select - this is a long UID + if (receivedAnswer[0] = 0x88) + { + // Do cascade level 2 stuff + /////////////////////////////////////////////////////////////////// + // First issue a '95 20' identify request + // Ask for card UID (part 2) + TransmitFor14443a(req4, req4Len, &tsamples, &wait); + // Store answer in buffer + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 2; + memcpy(trace+traceLen, cmd4, 2); + traceLen += 2; + if(traceLen > TRACE_LENGTH) { + DbpString("Bugging out, just popped tracelength"); + goto done;} + + if(!GetIso14443aAnswerFromTag(receivedAnswer, 100, &samples, &elapsed)) { + continue; + } + // Store answer in buffer + rsamples = rsamples + (samples - Demod.samples); + trace[traceLen++] = ((rsamples >> 0) & 0xff); + trace[traceLen++] = ((rsamples >> 8) & 0xff); + trace[traceLen++] = ((rsamples >> 16) & 0xff); + trace[traceLen++] = 0x80 | ((rsamples >> 24) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 0) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 8) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 16) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 24) & 0xff); + trace[traceLen++] = Demod.len; + memcpy(trace+traceLen, receivedAnswer, Demod.len); + traceLen += Demod.len; + if(traceLen > TRACE_LENGTH) goto done; + ////////////////////////////////////////////////////////////////// + // Then Construct SELECT UID (cascasde 2) command + DbpString("Just about to copy the UID out of the cascade 2 id req"); + // First copy the 5 bytes (Mifare Classic) after the 95 70 + memcpy(cmd5+2,receivedAnswer,5); + // Secondly compute the two CRC bytes at the end + ComputeCrc14443(CRC_14443_A, cmd4, 7, &cmd5[7], &cmd5[8]); + // Prepare the bit sequence to modulate the subcarrier + // Store answer in buffer + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 9; + memcpy(trace+traceLen, cmd5, 9); + traceLen += 9; + if(traceLen > TRACE_LENGTH) goto done; + CodeIso14443aAsReader(cmd5, sizeof(cmd5)); + memcpy(req5, ToSend, ToSendMax); req5Len = ToSendMax; + + // Select the card + TransmitFor14443a(req4, req4Len, &samples, &wait); + if(!GetIso14443aAnswerFromTag(receivedAnswer, 100, &samples, &elapsed)) { + continue; + } + + // Store answer in buffer + rsamples = rsamples + (samples - Demod.samples); + trace[traceLen++] = ((rsamples >> 0) & 0xff); + trace[traceLen++] = ((rsamples >> 8) & 0xff); + trace[traceLen++] = ((rsamples >> 16) & 0xff); + trace[traceLen++] = 0x80 | ((rsamples >> 24) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 0) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 8) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 16) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 24) & 0xff); + trace[traceLen++] = Demod.len; + memcpy(trace+traceLen, receivedAnswer, Demod.len); + traceLen += Demod.len; + if(traceLen > TRACE_LENGTH) goto done; + + + + + + + } + + + + // Secondly compute the two CRC bytes at the end + ComputeCrc14443(CRC_14443_A, cmd5, 2, &cmd5[2], &cmd5[3]); + // Send authentication request (Mifare Classic) + TransmitFor14443a(req5, req5Len, &samples, &wait); + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; trace[traceLen++] = 0; + trace[traceLen++] = 4; + memcpy(trace+traceLen, cmd5, 4); + traceLen += 4; + if(traceLen > TRACE_LENGTH) goto done; + if(GetIso14443aAnswerFromTag(receivedAnswer, 100, &samples, &elapsed)) { + rsamples++; + // We received probably a random, continue and trace! + } + else { + // Received nothing + continue; + } + + // Trace the random, i'm curious + rsamples = rsamples + (samples - Demod.samples); + trace[traceLen++] = ((rsamples >> 0) & 0xff); + trace[traceLen++] = ((rsamples >> 8) & 0xff); + trace[traceLen++] = ((rsamples >> 16) & 0xff); + trace[traceLen++] = 0x80 | ((rsamples >> 24) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 0) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 8) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 16) & 0xff); + trace[traceLen++] = ((Demod.parityBits >> 24) & 0xff); + trace[traceLen++] = Demod.len; + memcpy(trace+traceLen, receivedAnswer, Demod.len); + traceLen += Demod.len; + if(traceLen > TRACE_LENGTH) goto done; + + // Thats it... + } + +done: + LED_A_OFF(); + LED_B_OFF(); + LED_C_OFF(); + LED_D_OFF(); + DbpIntegers(rsamples, 0xCC, 0xCC); + DbpString("ready.."); +} diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c new file mode 100644 index 000000000..2592cbfe6 --- /dev/null +++ b/armsrc/iso15693.c @@ -0,0 +1,1226 @@ +//----------------------------------------------------------------------------- +// Routines to support ISO 15693. This includes both the reader software and +// the `fake tag' modes, but at the moment I've implemented only the reader +// stuff, and that barely. +// Jonathan Westhues, split Nov 2006 + +// Modified by Greg Jones, Jan 2009 to perform modulation onboard in arm rather than on PC +// Also added additional reader commands (SELECT, READ etc.) + +//----------------------------------------------------------------------------- +#include +#include "apps.h" +#include +#include + +// FROM winsrc\prox.h ////////////////////////////////// +#define arraylen(x) (sizeof(x)/sizeof((x)[0])) + +//----------------------------------------------------------------------------- +// Map a sequence of octets (~layer 2 command) into the set of bits to feed +// to the FPGA, to transmit that command to the tag. +//----------------------------------------------------------------------------- + + + + + // The sampling rate is 106.353 ksps/s, for T = 18.8 us + + // SOF defined as + // 1) Unmodulated time of 56.64us + // 2) 24 pulses of 423.75khz + // 3) logic '1' (unmodulated for 18.88us followed by 8 pulses of 423.75khz) + + static const int FrameSOF[] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + -1, -1, -1, -1, + -1, -1, -1, -1, + 1, 1, 1, 1, + 1, 1, 1, 1 + }; + static const int Logic0[] = { + 1, 1, 1, 1, + 1, 1, 1, 1, + -1, -1, -1, -1, + -1, -1, -1, -1 + }; + static const int Logic1[] = { + -1, -1, -1, -1, + -1, -1, -1, -1, + 1, 1, 1, 1, + 1, 1, 1, 1 + }; + + // EOF defined as + // 1) logic '0' (8 pulses of 423.75khz followed by unmodulated for 18.88us) + // 2) 24 pulses of 423.75khz + // 3) Unmodulated time of 56.64us + + static const int FrameEOF[] = { + 1, 1, 1, 1, + 1, 1, 1, 1, + -1, -1, -1, -1, + -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + }; + + + + +static void CodeIso15693AsReader(BYTE *cmd, int n) +{ + int i, j; + + ToSendReset(); + + // Give it a bit of slack at the beginning + for(i = 0; i < 24; i++) { + ToSendStuffBit(1); + } + + ToSendStuffBit(0); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(0); + ToSendStuffBit(1); + ToSendStuffBit(1); + for(i = 0; i < n; i++) { + for(j = 0; j < 8; j += 2) { + int these = (cmd[i] >> j) & 3; + switch(these) { + case 0: + ToSendStuffBit(1); + ToSendStuffBit(0); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + break; + case 1: + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(0); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + break; + case 2: + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(0); + ToSendStuffBit(1); + ToSendStuffBit(1); + break; + case 3: + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(0); + break; + } + } + } + ToSendStuffBit(1); + ToSendStuffBit(1); + ToSendStuffBit(0); + ToSendStuffBit(1); + + // And slack at the end, too. + for(i = 0; i < 24; i++) { + ToSendStuffBit(1); + } +} + +//----------------------------------------------------------------------------- +// The CRC used by ISO 15693. +//----------------------------------------------------------------------------- +static WORD Crc(BYTE *v, int n) +{ + DWORD reg; + int i, j; + + reg = 0xffff; + for(i = 0; i < n; i++) { + reg = reg ^ ((DWORD)v[i]); + for (j = 0; j < 8; j++) { + if (reg & 0x0001) { + reg = (reg >> 1) ^ 0x8408; + } else { + reg = (reg >> 1); + } + } + } + + return ~reg; +} + +////////////////////////////////////////// code to do 'itoa' + + + +/* reverse: reverse string s in place */ +void reverse(char s[]) +{ + int c, i, j; + + for (i = 0, j = strlen(s)-1; i 0); /* delete it */ + if (sign < 0) + s[i++] = '-'; + s[i] = '\0'; + reverse(s); +} + +//////////////////////////////////////// END 'itoa' CODE + + +//----------------------------------------------------------------------------- +// Encode (into the ToSend buffers) an identify request, which is the first +// thing that you must send to a tag to get a response. +//----------------------------------------------------------------------------- +static void BuildIdentifyRequest(void) +{ + BYTE cmd[5]; + + WORD crc; + // one sub-carrier, inventory, 1 slot, fast rate + // AFI is at bit 5 (1<<4) when doing an INVENTORY + cmd[0] = (1 << 2) | (1 << 5) | (1 << 1); + // inventory command code + cmd[1] = 0x01; + // no mask + cmd[2] = 0x00; + //Now the CRC + crc = Crc(cmd, 3); + cmd[3] = crc & 0xff; + cmd[4] = crc >> 8; + + CodeIso15693AsReader(cmd, sizeof(cmd)); +} + +static void BuildSysInfoRequest(BYTE *uid) +{ + BYTE cmd[12]; + + WORD crc; + // If we set the Option_Flag in this request, the VICC will respond with the secuirty status of the block + // followed by teh block data + // one sub-carrier, inventory, 1 slot, fast rate + cmd[0] = (1 << 5) | (1 << 1); // no SELECT bit + // System Information command code + cmd[1] = 0x2B; + // UID may be optionally specified here + // 64-bit UID + cmd[2] = 0x32; + cmd[3]= 0x4b; + cmd[4] = 0x03; + cmd[5] = 0x01; + cmd[6] = 0x00; + cmd[7] = 0x10; + cmd[8] = 0x05; + cmd[9]= 0xe0; // always e0 (not exactly unique) + //Now the CRC + crc = Crc(cmd, 10); // the crc needs to be calculated over 2 bytes + cmd[10] = crc & 0xff; + cmd[11] = crc >> 8; + + CodeIso15693AsReader(cmd, sizeof(cmd)); +} + +static void BuildSelectRequest( BYTE uid[]) +{ + +// uid[6]=0x31; // this is getting ignored - the uid array is not happening... + BYTE cmd[12]; + + WORD crc; + // one sub-carrier, inventory, 1 slot, fast rate + //cmd[0] = (1 << 2) | (1 << 5) | (1 << 1); // INVENTROY FLAGS + cmd[0] = (1 << 4) | (1 << 5) | (1 << 1); // Select and addressed FLAGS + // SELECT command code + cmd[1] = 0x25; + // 64-bit UID +// cmd[2] = uid[0];//0x32; +// cmd[3]= uid[1];//0x4b; +// cmd[4] = uid[2];//0x03; +// cmd[5] = uid[3];//0x01; +// cmd[6] = uid[4];//0x00; +// cmd[7] = uid[5];//0x10; +// cmd[8] = uid[6];//0x05; + cmd[2] = 0x32;// + cmd[3]= 0x4b; + cmd[4] = 0x03; + cmd[5] = 0x01; + cmd[6] = 0x00; + cmd[7] = 0x10; + cmd[8] = 0x05; // infineon? + + cmd[9]= 0xe0; // always e0 (not exactly unique) + +// DbpIntegers(cmd[8],cmd[7],cmd[6]); + // Now the CRC + crc = Crc(cmd, 10); // the crc needs to be calculated over 10 bytes + cmd[10] = crc & 0xff; + cmd[11] = crc >> 8; + + CodeIso15693AsReader(cmd, sizeof(cmd)); +} + +static void BuildReadBlockRequest(BYTE *uid, BYTE blockNumber ) +{ + BYTE cmd[13]; + + WORD crc; + // If we set the Option_Flag in this request, the VICC will respond with the secuirty status of the block + // followed by teh block data + // one sub-carrier, inventory, 1 slot, fast rate + cmd[0] = (1 << 6)| (1 << 5) | (1 << 1); // no SELECT bit + // READ BLOCK command code + cmd[1] = 0x20; + // UID may be optionally specified here + // 64-bit UID + cmd[2] = 0x32; + cmd[3]= 0x4b; + cmd[4] = 0x03; + cmd[5] = 0x01; + cmd[6] = 0x00; + cmd[7] = 0x10; + cmd[8] = 0x05; + cmd[9]= 0xe0; // always e0 (not exactly unique) + // Block number to read + cmd[10] = blockNumber;//0x00; + //Now the CRC + crc = Crc(cmd, 11); // the crc needs to be calculated over 2 bytes + cmd[11] = crc & 0xff; + cmd[12] = crc >> 8; + + CodeIso15693AsReader(cmd, sizeof(cmd)); +} + + +static void BuildReadMultiBlockRequest(BYTE *uid) +{ + BYTE cmd[14]; + + WORD crc; + // If we set the Option_Flag in this request, the VICC will respond with the secuirty status of the block + // followed by teh block data + // one sub-carrier, inventory, 1 slot, fast rate + cmd[0] = (1 << 5) | (1 << 1); // no SELECT bit + // READ Multi BLOCK command code + cmd[1] = 0x23; + // UID may be optionally specified here + // 64-bit UID + cmd[2] = 0x32; + cmd[3]= 0x4b; + cmd[4] = 0x03; + cmd[5] = 0x01; + cmd[6] = 0x00; + cmd[7] = 0x10; + cmd[8] = 0x05; + cmd[9]= 0xe0; // always e0 (not exactly unique) + // First Block number to read + cmd[10] = 0x00; + // Number of Blocks to read + cmd[11] = 0x2f; // read quite a few + //Now the CRC + crc = Crc(cmd, 12); // the crc needs to be calculated over 2 bytes + cmd[12] = crc & 0xff; + cmd[13] = crc >> 8; + + CodeIso15693AsReader(cmd, sizeof(cmd)); +} + +static void BuildArbitraryRequest(BYTE *uid,BYTE CmdCode) +{ + BYTE cmd[14]; + + WORD crc; + // If we set the Option_Flag in this request, the VICC will respond with the secuirty status of the block + // followed by teh block data + // one sub-carrier, inventory, 1 slot, fast rate + cmd[0] = (1 << 5) | (1 << 1); // no SELECT bit + // READ BLOCK command code + cmd[1] = CmdCode; + // UID may be optionally specified here + // 64-bit UID + cmd[2] = 0x32; + cmd[3]= 0x4b; + cmd[4] = 0x03; + cmd[5] = 0x01; + cmd[6] = 0x00; + cmd[7] = 0x10; + cmd[8] = 0x05; + cmd[9]= 0xe0; // always e0 (not exactly unique) + // Parameter + cmd[10] = 0x00; + cmd[11] = 0x0a; + +// cmd[12] = 0x00; +// cmd[13] = 0x00; //Now the CRC + crc = Crc(cmd, 12); // the crc needs to be calculated over 2 bytes + cmd[12] = crc & 0xff; + cmd[13] = crc >> 8; + + CodeIso15693AsReader(cmd, sizeof(cmd)); +} + +static void BuildArbitraryCustomRequest(BYTE *uid,BYTE CmdCode) +{ + BYTE cmd[14]; + + WORD crc; + // If we set the Option_Flag in this request, the VICC will respond with the secuirty status of the block + // followed by teh block data + // one sub-carrier, inventory, 1 slot, fast rate + cmd[0] = (1 << 5) | (1 << 1); // no SELECT bit + // READ BLOCK command code + cmd[1] = CmdCode; + // UID may be optionally specified here + // 64-bit UID + cmd[2] = 0x32; + cmd[3]= 0x4b; + cmd[4] = 0x03; + cmd[5] = 0x01; + cmd[6] = 0x00; + cmd[7] = 0x10; + cmd[8] = 0x05; + cmd[9]= 0xe0; // always e0 (not exactly unique) + // Parameter + cmd[10] = 0x05; // for custom codes this must be manufcturer code + cmd[11] = 0x00; + +// cmd[12] = 0x00; +// cmd[13] = 0x00; //Now the CRC + crc = Crc(cmd, 12); // the crc needs to be calculated over 2 bytes + cmd[12] = crc & 0xff; + cmd[13] = crc >> 8; + + CodeIso15693AsReader(cmd, sizeof(cmd)); +} + +///////////////////////////////////////////////////////////////////////// +// Now the VICC>VCD responses when we are simulating a tag +//////////////////////////////////////////////////////////////////// + + static void BuildInventoryResponse(void) +{ + BYTE cmd[12]; + + WORD crc; + // one sub-carrier, inventory, 1 slot, fast rate + // AFI is at bit 5 (1<<4) when doing an INVENTORY + cmd[0] = 0; //(1 << 2) | (1 << 5) | (1 << 1); + cmd[1] = 0; + // 64-bit UID + cmd[2] = 0x32; + cmd[3]= 0x4b; + cmd[4] = 0x03; + cmd[5] = 0x01; + cmd[6] = 0x00; + cmd[7] = 0x10; + cmd[8] = 0x05; + cmd[9]= 0xe0; + //Now the CRC + crc = Crc(cmd, 10); + cmd[10] = crc & 0xff; + cmd[11] = crc >> 8; + + CodeIso15693AsReader(cmd, sizeof(cmd)); +} + + +//----------------------------------------------------------------------------- +// Transmit the command (to the tag) that was placed in ToSend[]. +//----------------------------------------------------------------------------- +static void TransmitTo15693Tag(const BYTE *cmd, int len, int *samples, int *wait) +{ + int c; + +// FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_READER_MOD); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_TX); + if(*wait < 10) { *wait = 10; } + +// for(c = 0; c < *wait;) { +// if(SSC_STATUS & (SSC_STATUS_TX_READY)) { +// SSC_TRANSMIT_HOLDING = 0x00; // For exact timing! +// c++; +// } +// if(SSC_STATUS & (SSC_STATUS_RX_READY)) { +// volatile DWORD r = SSC_RECEIVE_HOLDING; +// (void)r; +// } +// WDT_HIT(); +// } + + c = 0; + for(;;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = cmd[c]; + c++; + if(c >= len) { + break; + } + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + volatile DWORD r = SSC_RECEIVE_HOLDING; + (void)r; + } + WDT_HIT(); + } + *samples = (c + *wait) << 3; +} + + +//----------------------------------------------------------------------------- +// Transmit the command (to the reader) that was placed in ToSend[]. +//----------------------------------------------------------------------------- +static void TransmitTo15693Reader(const BYTE *cmd, int len, int *samples, int *wait) +{ + int c; + +// FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_TX); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR); // No requirement to energise my coils + if(*wait < 10) { *wait = 10; } + + c = 0; + for(;;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = cmd[c]; + c++; + if(c >= len) { + break; + } + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + volatile DWORD r = SSC_RECEIVE_HOLDING; + (void)r; + } + WDT_HIT(); + } + *samples = (c + *wait) << 3; +} + + + + + + +static int GetIso15693AnswerFromTag(BYTE *receivedResponse, int maxLen, int *samples, int *elapsed) +{ + int c = 0; + BYTE *dest = (BYTE *)BigBuf; + int getNext = 0; + + + SBYTE prev = 0; + +// NOW READ RESPONSE + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); + //spindelay(60); // greg - experiment to get rid of some of the 0 byte/failed reads + c = 0; + getNext = FALSE; + for(;;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = 0x43; + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + SBYTE b; + b = (SBYTE)SSC_RECEIVE_HOLDING; + + // The samples are correlations against I and Q versions of the + // tone that the tag AM-modulates, so every other sample is I, + // every other is Q. We just want power, so abs(I) + abs(Q) is + // close to what we want. + if(getNext) { + SBYTE r; + + if(b < 0) { + r = -b; + } else { + r = b; + } + if(prev < 0) { + r -= prev; + } else { + r += prev; + } + + dest[c++] = (BYTE)r; + + if(c >= 2000) { + break; + } + } else { + prev = b; + } + + getNext = !getNext; + } + } + +////////////////////////////////////////// +/////////// DEMODULATE /////////////////// +////////////////////////////////////////// + + int i, j; + int max = 0, maxPos; + + int skip = 4; + + +// if(GraphTraceLen < 1000) return; // THIS CHECKS FOR A BUFFER TO SMALL + + // First, correlate for SOF + for(i = 0; i < 100; i++) { + int corr = 0; + for(j = 0; j < arraylen(FrameSOF); j += skip) { + corr += FrameSOF[j]*dest[i+(j/skip)]; + } + if(corr > max) { + max = corr; + maxPos = i; + } + } +// DbpString("SOF at %d, correlation %d", maxPos,max/(arraylen(FrameSOF)/skip)); + + int k = 0; // this will be our return value + + // greg - If correlation is less than 1 then there's little point in continuing + if ((max/(arraylen(FrameSOF)/skip)) >= 1) + { + + i = maxPos + arraylen(FrameSOF)/skip; + + BYTE outBuf[20]; + memset(outBuf, 0, sizeof(outBuf)); + BYTE mask = 0x01; + for(;;) { + int corr0 = 0, corr1 = 0, corrEOF = 0; + for(j = 0; j < arraylen(Logic0); j += skip) { + corr0 += Logic0[j]*dest[i+(j/skip)]; + } + for(j = 0; j < arraylen(Logic1); j += skip) { + corr1 += Logic1[j]*dest[i+(j/skip)]; + } + for(j = 0; j < arraylen(FrameEOF); j += skip) { + corrEOF += FrameEOF[j]*dest[i+(j/skip)]; + } + // Even things out by the length of the target waveform. + corr0 *= 4; + corr1 *= 4; + + if(corrEOF > corr1 && corrEOF > corr0) { +// DbpString("EOF at %d", i); + break; + } else if(corr1 > corr0) { + i += arraylen(Logic1)/skip; + outBuf[k] |= mask; + } else { + i += arraylen(Logic0)/skip; + } + mask <<= 1; + if(mask == 0) { + k++; + mask = 0x01; + } + if((i+(int)arraylen(FrameEOF)) >= 2000) { + DbpString("ran off end!"); + break; + } + } + if(mask != 0x01) { + DbpString("error, uneven octet! (discard extra bits!)"); +/// DbpString(" mask=%02x", mask); + } +// BYTE str1 [8]; +// itoa(k,str1); +// strcat(str1," octets read"); + +// DbpString( str1); // DbpString("%d octets", k); + +// for(i = 0; i < k; i+=3) { +// //DbpString("# %2d: %02x ", i, outBuf[i]); +// DbpIntegers(outBuf[i],outBuf[i+1],outBuf[i+2]); +// } + + for(i = 0; i < k; i++) { + receivedResponse[i] = outBuf[i]; + } + } // "end if correlation > 0" (max/(arraylen(FrameSOF)/skip)) + return k; // return the number of bytes demodulated + +/// DbpString("CRC=%04x", Iso15693Crc(outBuf, k-2)); + + +} + +// Now the GetISO15693 message from sniffing command +static int GetIso15693AnswerFromSniff(BYTE *receivedResponse, int maxLen, int *samples, int *elapsed) +{ + int c = 0; + BYTE *dest = (BYTE *)BigBuf; + int getNext = 0; + + + SBYTE prev = 0; + +// NOW READ RESPONSE + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); + //spindelay(60); // greg - experiment to get rid of some of the 0 byte/failed reads + c = 0; + getNext = FALSE; + for(;;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = 0x43; + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + SBYTE b; + b = (SBYTE)SSC_RECEIVE_HOLDING; + + // The samples are correlations against I and Q versions of the + // tone that the tag AM-modulates, so every other sample is I, + // every other is Q. We just want power, so abs(I) + abs(Q) is + // close to what we want. + if(getNext) { + SBYTE r; + + if(b < 0) { + r = -b; + } else { + r = b; + } + if(prev < 0) { + r -= prev; + } else { + r += prev; + } + + dest[c++] = (BYTE)r; + + if(c >= 20000) { + break; + } + } else { + prev = b; + } + + getNext = !getNext; + } + } + +////////////////////////////////////////// +/////////// DEMODULATE /////////////////// +////////////////////////////////////////// + + int i, j; + int max = 0, maxPos; + + int skip = 4; + + +// if(GraphTraceLen < 1000) return; // THIS CHECKS FOR A BUFFER TO SMALL + + // First, correlate for SOF + for(i = 0; i < 19000; i++) { + int corr = 0; + for(j = 0; j < arraylen(FrameSOF); j += skip) { + corr += FrameSOF[j]*dest[i+(j/skip)]; + } + if(corr > max) { + max = corr; + maxPos = i; + } + } +// DbpString("SOF at %d, correlation %d", maxPos,max/(arraylen(FrameSOF)/skip)); + + int k = 0; // this will be our return value + + // greg - If correlation is less than 1 then there's little point in continuing + if ((max/(arraylen(FrameSOF)/skip)) >= 1) // THIS SHOULD BE 1 + { + + i = maxPos + arraylen(FrameSOF)/skip; + + BYTE outBuf[20]; + memset(outBuf, 0, sizeof(outBuf)); + BYTE mask = 0x01; + for(;;) { + int corr0 = 0, corr1 = 0, corrEOF = 0; + for(j = 0; j < arraylen(Logic0); j += skip) { + corr0 += Logic0[j]*dest[i+(j/skip)]; + } + for(j = 0; j < arraylen(Logic1); j += skip) { + corr1 += Logic1[j]*dest[i+(j/skip)]; + } + for(j = 0; j < arraylen(FrameEOF); j += skip) { + corrEOF += FrameEOF[j]*dest[i+(j/skip)]; + } + // Even things out by the length of the target waveform. + corr0 *= 4; + corr1 *= 4; + + if(corrEOF > corr1 && corrEOF > corr0) { +// DbpString("EOF at %d", i); + break; + } else if(corr1 > corr0) { + i += arraylen(Logic1)/skip; + outBuf[k] |= mask; + } else { + i += arraylen(Logic0)/skip; + } + mask <<= 1; + if(mask == 0) { + k++; + mask = 0x01; + } + if((i+(int)arraylen(FrameEOF)) >= 2000) { + DbpString("ran off end!"); + break; + } + } + if(mask != 0x01) { + DbpString("error, uneven octet! (discard extra bits!)"); +/// DbpString(" mask=%02x", mask); + } +// BYTE str1 [8]; +// itoa(k,str1); +// strcat(str1," octets read"); + +// DbpString( str1); // DbpString("%d octets", k); + +// for(i = 0; i < k; i+=3) { +// //DbpString("# %2d: %02x ", i, outBuf[i]); +// DbpIntegers(outBuf[i],outBuf[i+1],outBuf[i+2]); +// } + + for(i = 0; i < k; i++) { + receivedResponse[i] = outBuf[i]; + } + } // "end if correlation > 0" (max/(arraylen(FrameSOF)/skip)) + return k; // return the number of bytes demodulated + +/// DbpString("CRC=%04x", Iso15693Crc(outBuf, k-2)); + + +} + + + +//----------------------------------------------------------------------------- +// Start to read an ISO 15693 tag. We send an identify request, then wait +// for the response. The response is not demodulated, just left in the buffer +// so that it can be downloaded to a PC and processed there. +//----------------------------------------------------------------------------- +void AcquireRawAdcSamplesIso15693(void) +{ + int c = 0; + BYTE *dest = (BYTE *)BigBuf; + int getNext = 0; + + SBYTE prev = 0; + + BuildIdentifyRequest(); + + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + + // Give the tags time to energize + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); + SpinDelay(100); + + // Now send the command + FpgaSetupSsc(); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_TX); + + c = 0; + for(;;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = ToSend[c]; + c++; + if(c == ToSendMax+3) { + break; + } + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + volatile DWORD r = SSC_RECEIVE_HOLDING; + (void)r; + } + WDT_HIT(); + } + + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); + + c = 0; + getNext = FALSE; + for(;;) { + if(SSC_STATUS & (SSC_STATUS_TX_READY)) { + SSC_TRANSMIT_HOLDING = 0x43; + } + if(SSC_STATUS & (SSC_STATUS_RX_READY)) { + SBYTE b; + b = (SBYTE)SSC_RECEIVE_HOLDING; + + // The samples are correlations against I and Q versions of the + // tone that the tag AM-modulates, so every other sample is I, + // every other is Q. We just want power, so abs(I) + abs(Q) is + // close to what we want. + if(getNext) { + SBYTE r; + + if(b < 0) { + r = -b; + } else { + r = b; + } + if(prev < 0) { + r -= prev; + } else { + r += prev; + } + + dest[c++] = (BYTE)r; + + if(c >= 2000) { + break; + } + } else { + prev = b; + } + + getNext = !getNext; + } + } +} + + + +//----------------------------------------------------------------------------- +// Simulate an ISO15693 reader, perform anti-collision and then attempt to read a sector +// all demodulation performed in arm rather than host. - greg +//----------------------------------------------------------------------------- +void ReaderIso15693(DWORD parameter) +{ + LED_A_ON(); + LED_B_ON(); + LED_C_OFF(); + LED_D_OFF(); + + +//DbpString(parameter); + + BYTE *receivedAnswer0 = (((BYTE *)BigBuf) + 3560); // allow 100 bytes per reponse (way too much) + BYTE *receivedAnswer1 = (((BYTE *)BigBuf) + 3660); // + BYTE *receivedAnswer2 = (((BYTE *)BigBuf) + 3760); + BYTE *receivedAnswer3 = (((BYTE *)BigBuf) + 3860); + //BYTE *TagUID= (((BYTE *)BigBuf) + 3960); // where we hold the uid for hi15reader + int responseLen0 = 0; + int responseLen1 = 0; + int responseLen2 = 0; + int responseLen3 = 0; + + // Blank arrays + int j; + for(j = 0; j < 100; j++) { + receivedAnswer3[j] = 0; + receivedAnswer2[j] =0; + receivedAnswer1[j] = 0; + receivedAnswer0[j] = 0; + } + + // Setup SSC + FpgaSetupSsc(); + + // Start from off (no field generated) + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + SpinDelay(200); + + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + FpgaSetupSsc(); + + // Give the tags time to energize + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); + SpinDelay(200); + + LED_A_ON(); + LED_B_OFF(); + LED_C_OFF(); + LED_D_OFF(); + + int samples = 0; + int tsamples = 0; + int wait = 0; + int elapsed = 0; + + // FIRST WE RUN AN INVENTORY TO GET THE TAG UID + // THIS MEANS WE CAN PRE-BUILD REQUESTS TO SAVE CPU TIME + BYTE TagUID[7]; // where we hold the uid for hi15reader + + +// BuildIdentifyRequest(); +// //TransmitTo15693Tag(ToSend,ToSendMax+3,&tsamples, &wait); +// TransmitTo15693Tag(ToSend,ToSendMax,&tsamples, &wait); // No longer ToSendMax+3 +// // Now wait for a response +// responseLen0 = GetIso15693AnswerFromTag(receivedAnswer0, 100, &samples, &elapsed) ; +// if (responseLen0 >=12) // we should do a better check than this +// { +// // really we should check it is a valid mesg +// // but for now just grab what we think is the uid +// TagUID[0] = receivedAnswer0[2]; +// TagUID[1] = receivedAnswer0[3]; +// TagUID[2] = receivedAnswer0[4]; +// TagUID[3] = receivedAnswer0[5]; +// TagUID[4] = receivedAnswer0[6]; +// TagUID[5] = receivedAnswer0[7]; +// TagUID[6] = receivedAnswer0[8]; // IC Manufacturer code +// DbpIntegers(TagUID[6],TagUID[5],TagUID[4]); +//} + + // Now send the IDENTIFY command + BuildIdentifyRequest(); + //TransmitTo15693Tag(ToSend,ToSendMax+3,&tsamples, &wait); + TransmitTo15693Tag(ToSend,ToSendMax,&tsamples, &wait); // No longer ToSendMax+3 + // Now wait for a response + responseLen1 = GetIso15693AnswerFromTag(receivedAnswer1, 100, &samples, &elapsed) ; + + if (responseLen1 >=12) // we should do a better check than this + { + + TagUID[0] = receivedAnswer1[2]; + TagUID[1] = receivedAnswer1[3]; + TagUID[2] = receivedAnswer1[4]; + TagUID[3] = receivedAnswer1[5]; + TagUID[4] = receivedAnswer1[6]; + TagUID[5] = receivedAnswer1[7]; + TagUID[6] = receivedAnswer1[8]; // IC Manufacturer code + + // Now send the SELECT command + BuildSelectRequest(*TagUID); + TransmitTo15693Tag(ToSend,ToSendMax,&tsamples, &wait); // No longer ToSendMax+3 + // Now wait for a response + responseLen2 = GetIso15693AnswerFromTag(receivedAnswer2, 100, &samples, &elapsed); + + // Now send the MULTI READ command +// BuildArbitraryRequest(*TagUID,parameter); + BuildArbitraryCustomRequest(*TagUID,parameter); +// BuildReadBlockRequest(*TagUID,parameter); +// BuildSysInfoRequest(*TagUID); + //TransmitTo15693Tag(ToSend,ToSendMax+3,&tsamples, &wait); + TransmitTo15693Tag(ToSend,ToSendMax,&tsamples, &wait); // No longer ToSendMax+3 + // Now wait for a response + responseLen3 = GetIso15693AnswerFromTag(receivedAnswer3, 100, &samples, &elapsed) ; + + } + + + + BYTE str1 [4]; + //char str2 [200]; + int i; + + itoa(responseLen1,str1); + strcat(str1," octets read from IDENTIFY request"); + DbpString(str1); + for(i = 0; i < responseLen1; i+=3) { + DbpIntegers(receivedAnswer1[i],receivedAnswer1[i+1],receivedAnswer1[i+2]); + } + + itoa(responseLen2,str1); + strcat(str1," octets read from SELECT request"); + DbpString(str1); + for(i = 0; i < responseLen2; i+=3) { + DbpIntegers(receivedAnswer2[i],receivedAnswer2[i+1],receivedAnswer2[i+2]); + } + + itoa(responseLen3,str1); + strcat(str1," octets read from XXX request"); + DbpString(str1); + for(i = 0; i < responseLen3; i+=3) { + DbpIntegers(receivedAnswer3[i],receivedAnswer3[i+1],receivedAnswer3[i+2]); + } + + +// str2[0]=0; +// for(i = 0; i < responseLen3; i++) { +// itoa(str1,receivedAnswer3[i]); +// strcat(str2,str1); +// } +// DbpString(str2); + + LED_A_OFF(); + LED_B_OFF(); + LED_C_OFF(); + LED_D_OFF(); + + +} + + + +//----------------------------------------------------------------------------- +// Simulate an ISO15693 TAG, perform anti-collision and then print any reader commands +// all demodulation performed in arm rather than host. - greg +//----------------------------------------------------------------------------- +void SimTagIso15693(DWORD parameter) +{ + LED_A_ON(); + LED_B_ON(); + LED_C_OFF(); + LED_D_OFF(); + + +//DbpString(parameter); + + BYTE *receivedAnswer0 = (((BYTE *)BigBuf) + 3560); // allow 100 bytes per reponse (way too much) + BYTE *receivedAnswer1 = (((BYTE *)BigBuf) + 3660); // + BYTE *receivedAnswer2 = (((BYTE *)BigBuf) + 3760); + BYTE *receivedAnswer3 = (((BYTE *)BigBuf) + 3860); + //BYTE *TagUID= (((BYTE *)BigBuf) + 3960); // where we hold the uid for hi15reader + int responseLen0 = 0; + int responseLen1 = 0; + int responseLen2 = 0; + int responseLen3 = 0; + + // Blank arrays + int j; + for(j = 0; j < 100; j++) { + receivedAnswer3[j] = 0; + receivedAnswer2[j] =0; + receivedAnswer1[j] = 0; + receivedAnswer0[j] = 0; + } + + // Setup SSC + FpgaSetupSsc(); + + // Start from off (no field generated) + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + SpinDelay(200); + + SetAdcMuxFor(GPIO_MUXSEL_HIPKD); + FpgaSetupSsc(); + + // Give the tags time to energize +// FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); // NO GOOD FOR SIM TAG!!!! + SpinDelay(200); + + LED_A_OFF(); + LED_B_OFF(); + LED_C_ON(); + LED_D_OFF(); + + int samples = 0; + int tsamples = 0; + int wait = 0; + int elapsed = 0; + + // FIRST WE RUN AN INVENTORY TO GET THE TAG UID + // THIS MEANS WE CAN PRE-BUILD REQUESTS TO SAVE CPU TIME + BYTE TagUID[7]; // where we hold the uid for hi15reader + + + + // Now send the IDENTIFY command +// BuildIdentifyRequest(); +// TransmitTo15693Tag(ToSend,ToSendMax,&tsamples, &wait); // No longer ToSendMax+3 + + + // Now wait for a command from the reader + responseLen1=0; +// while(responseLen1=0) { +// if(BUTTON_PRESS()) break; + responseLen1 = GetIso15693AnswerFromSniff(receivedAnswer1, 100, &samples, &elapsed) ; +// } + + + if (responseLen1 >=1) // we should do a better check than this + { + // Build a suitable reponse to the reader INVENTORY cocmmand + BuildInventoryResponse; + TransmitTo15693Reader(ToSend,ToSendMax,&tsamples, &wait); + + // Now wait for a command from the reader +// responseLen2 = GetIso15693AnswerFromTag(receivedAnswer2, 100, &samples, &elapsed); + + + // Now wait for a command from the reader +// responseLen3 = GetIso15693AnswerFromTag(receivedAnswer3, 100, &samples, &elapsed) ; + + } + + + + BYTE str1 [4]; + //char str2 [200]; + int i; + + itoa(responseLen1,str1); + strcat(str1," octets read from reader command"); + DbpString(str1); + for(i = 0; i < responseLen1; i+=3) { + DbpIntegers(receivedAnswer1[i],receivedAnswer1[i+1],receivedAnswer1[i+2]); + } + +// itoa(responseLen2,str1); +// strcat(str1," octets read from SELECT request"); +// DbpString(str1); +// for(i = 0; i < responseLen2; i+=3) { +// DbpIntegers(receivedAnswer2[i],receivedAnswer2[i+1],receivedAnswer2[i+2]); +// } +// +// itoa(responseLen3,str1); +// strcat(str1," octets read from XXX request"); +// DbpString(str1); +// for(i = 0; i < responseLen3; i+=3) { +// DbpIntegers(receivedAnswer3[i],receivedAnswer3[i+1],receivedAnswer3[i+2]); +// } + + +// str2[0]=0; +// for(i = 0; i < responseLen3; i++) { +// itoa(str1,receivedAnswer3[i]); +// strcat(str2,str1); +// } +// DbpString(str2); + + LED_A_OFF(); + LED_B_OFF(); + LED_C_OFF(); + LED_D_OFF(); + + +} \ No newline at end of file diff --git a/armsrc/ldscript b/armsrc/ldscript new file mode 100644 index 000000000..ac0fe2bdb --- /dev/null +++ b/armsrc/ldscript @@ -0,0 +1,11 @@ +SECTIONS +{ + . = 0x00010000; + .text : { obj/start.o(.text) *(.text) } + .rodata : { *(.rodata) } + . = 0x00200000; + .data : { *(.data) } + __bss_start__ = .; + .bss : { *(.bss) } + __bss_end__ = .; +} diff --git a/armsrc/ldscript-fpga b/armsrc/ldscript-fpga new file mode 100644 index 000000000..da8b1a21d --- /dev/null +++ b/armsrc/ldscript-fpga @@ -0,0 +1,11 @@ +SECTIONS +{ + . = 0x00002000; + .text : { obj/fpgaimg.o(.text) *(.text) } + .rodata : { *(.rodata) } + . = 0x00200000; + .data : { *(.data) } + __bss_start__ = .; + .bss : { *(.bss) } + __bss_end__ = .; +} diff --git a/armsrc/start.c b/armsrc/start.c new file mode 100644 index 000000000..52296fc20 --- /dev/null +++ b/armsrc/start.c @@ -0,0 +1,12 @@ +//----------------------------------------------------------------------------- +// Just vector to AppMain(). This is in its own file so that I can place it +// with the linker script. +// Jonathan Westhues, Mar 2006 +//----------------------------------------------------------------------------- +#include +#include "apps.h" + +void Vector(void) +{ + AppMain(); +} diff --git a/armsrc/util.c b/armsrc/util.c new file mode 100644 index 000000000..b3f0e76e4 --- /dev/null +++ b/armsrc/util.c @@ -0,0 +1,53 @@ +//----------------------------------------------------------------------------- +// Utility functions used in many places, not specific to any piece of code. +// Jonathan Westhues, Sept 2005 +//----------------------------------------------------------------------------- +#include +#include "apps.h" + +void *memcpy(void *dest, const void *src, int len) +{ + BYTE *d = dest; + const BYTE *s = src; + while((len--) > 0) { + *d = *s; + d++; + s++; + } + return dest; +} + +void *memset(void *dest, int c, int len) +{ + BYTE *d = dest; + while((len--) > 0) { + *d = c; + d++; + } + return dest; +} + +int memcmp(const void *av, const void *bv, int len) +{ + const BYTE *a = av; + const BYTE *b = bv; + + while((len--) > 0) { + if(*a != *b) { + return *a - *b; + } + a++; + b++; + } + return 0; +} + +int strlen(char *str) +{ + int l = 0; + while(*str) { + l++; + str++; + } + return l; +} diff --git a/bootrom/Makefile b/bootrom/Makefile new file mode 100644 index 000000000..e18737c3d --- /dev/null +++ b/bootrom/Makefile @@ -0,0 +1,58 @@ +CC = arm-elf-gcc +AS = arm-elf-as +LD = arm-elf-ld +OBJCOPY = arm-elf-objcopy + +OBJDIR = obj + +INCLUDE = -I../include + +INCLUDES = ../include/proxmark3.h ../include/at91sam7s128.h ../include/config_gpio.h ../include/usb_cmd.h + +CFLAGS = -g -c $(INCLUDE) -Wall + +OBJJTAG = $(OBJDIR)/bootrom.o $(OBJDIR)/ram-reset.o $(OBJDIR)/usb.o + +OBJFLASH = $(OBJDIR)/flash-reset.o $(OBJDIR)/fromflash.o + +all: bootrom.s19 + +bootrom.s19: $(OBJDIR)/bootrom.s19 $(OBJDIR)/bootrom-forjtag.s19 + @echo bootrom.s19 + @perl ..\tools\merge-srec.pl $(OBJDIR)\bootrom.s19 $(OBJDIR)\bootrom-forjtag.s19 > $(OBJDIR)\bootrom-merged.s19 + @perl ..\tools\srecswap.pl $(OBJDIR)\bootrom-forjtag.s19 > $(OBJDIR)\bootrom-forjtag-swapped.s19 + +$(OBJDIR)/bootrom.s19: $(OBJFLASH) + @echo obj/bootrom.s19 + @$(LD) -g -Tldscript-flash --oformat elf32-littlearm -o $(OBJDIR)/bootrom.elf $(OBJFLASH) + @$(OBJCOPY) -Osrec --srec-forceS3 $(OBJDIR)/bootrom.elf $(OBJDIR)/bootrom.s19 + +$(OBJDIR)/bootrom-forjtag.s19: $(OBJJTAG) + @echo obj/bootrom-forjtag.s19 + @$(LD) -g -Tldscript-ram-jtag --oformat elf32-littlearm -o $(OBJDIR)/bootrom-forjtag.elf $(OBJJTAG) + @$(OBJCOPY) -Osrec --srec-forceS3 $(OBJDIR)/bootrom-forjtag.elf $(OBJDIR)/bootrom-forjtag.s19 + +$(OBJDIR)/bootrom.o: bootrom.c $(INCLUDES) + @echo $(@B).c + @$(CC) $(CFLAGS) -mthumb -mthumb-interwork bootrom.c -o $(OBJDIR)/bootrom.o + +$(OBJDIR)/fromflash.o: fromflash.c $(INCLUDES) + @echo $(@B).c + @$(CC) $(CFLAGS) -mthumb -mthumb-interwork fromflash.c -o $(OBJDIR)/fromflash.o + +$(OBJDIR)/usb.o: ../common/usb.c $(INCLUDES) + @echo $(@B).c + @$(CC) $(CFLAGS) -mthumb -mthumb-interwork ../common/usb.c -o $(OBJDIR)/usb.o + +$(OBJDIR)/ram-reset.o: ram-reset.s + @echo $(@B).s + @$(CC) $(CFLAGS) -mthumb-interwork -o $(OBJDIR)/ram-reset.o ram-reset.s + +$(OBJDIR)/flash-reset.o: flash-reset.s + @echo $(@B).s + @$(CC) $(CFLAGS) -mthumb-interwork -o $(OBJDIR)/flash-reset.o flash-reset.s + +clean: + del /q obj\*.o + del /q obj\*.elf + del /q obj\*.s19 diff --git a/bootrom/bootrom.c b/bootrom/bootrom.c new file mode 100644 index 000000000..c654db290 --- /dev/null +++ b/bootrom/bootrom.c @@ -0,0 +1,190 @@ +#include + +static void ConfigClocks(void) +{ + // we are using a 16 MHz crystal as the basis for everything + // slow clock runs at 32Khz typical regardless of crystal + + // enable system clock and USB clock + PMC_SYS_CLK_ENABLE = PMC_SYS_CLK_PROCESSOR_CLK | PMC_SYS_CLK_UDP_CLK; + + // enable the clock to the following peripherals + PMC_PERIPHERAL_CLK_ENABLE = + (1<cmd) { + case CMD_DEVICE_INFO: + break; + + case CMD_SETUP_WRITE: + p = (volatile DWORD *)0; + for(i = 0; i < 12; i++) { + p[i+c->ext1] = c->d.asDwords[i]; + } + break; + + case CMD_FINISH_WRITE: + p = (volatile DWORD *)0; + for(i = 0; i < 4; i++) { + p[i+60] = c->d.asDwords[i]; + } + + MC_FLASH_COMMAND = MC_FLASH_COMMAND_KEY | + MC_FLASH_COMMAND_PAGEN(c->ext1/FLASH_PAGE_SIZE_BYTES) | + FCMD_WRITE_PAGE; + while(!(MC_FLASH_STATUS & MC_FLASH_STATUS_READY)) + ; + break; + + case CMD_HARDWARE_RESET: + break; + + default: + Fatal(); + break; + } + + c->cmd = CMD_ACK; + UsbSendPacket(packet, len); +} + +void BootROM(void) +{ + //------------ + // First set up all the I/O pins; GPIOs configured directly, other ones + // just need to be assigned to the appropriate peripheral. + + // Kill all the pullups, especially the one on USB D+; leave them for + // the unused pins, though. + PIO_NO_PULL_UP_ENABLE = (1 << GPIO_USB_PU) | + (1 << GPIO_LED_A) | + (1 << GPIO_LED_B) | + (1 << GPIO_LED_C) | + (1 << GPIO_LED_D) | + (1 << GPIO_FPGA_DIN) | + (1 << GPIO_FPGA_DOUT) | + (1 << GPIO_FPGA_CCLK) | + (1 << GPIO_FPGA_NINIT) | + (1 << GPIO_FPGA_NPROGRAM) | + (1 << GPIO_FPGA_DONE) | + (1 << GPIO_MUXSEL_HIPKD) | + (1 << GPIO_MUXSEL_HIRAW) | + (1 << GPIO_MUXSEL_LOPKD) | + (1 << GPIO_MUXSEL_LORAW) | + (1 << GPIO_RELAY) | + (1 << GPIO_NVDD_ON); + // (and add GPIO_FPGA_ON) + // These pins are outputs + PIO_OUTPUT_ENABLE = (1 << GPIO_LED_A) | + (1 << GPIO_LED_B) | + (1 << GPIO_LED_C) | + (1 << GPIO_LED_D) | + (1 << GPIO_RELAY) | + (1 << GPIO_NVDD_ON); + // PIO controls the following pins + PIO_ENABLE = (1 << GPIO_USB_PU) | + (1 << GPIO_LED_A) | + (1 << GPIO_LED_B) | + (1 << GPIO_LED_C) | + (1 << GPIO_LED_D); + + USB_D_PLUS_PULLUP_OFF(); + LED_D_OFF(); + LED_C_ON(); + LED_B_OFF(); + LED_A_OFF(); + + // if 512K FLASH part - TODO make some defines :) + if ((DBGU_CIDR | 0xf00) == 0xa00) { + MC_FLASH_MODE0 = MC_FLASH_MODE_FLASH_WAIT_STATES(1) | + MC_FLASH_MODE_MASTER_CLK_IN_MHZ(0x48); + MC_FLASH_MODE1 = MC_FLASH_MODE_FLASH_WAIT_STATES(1) | + MC_FLASH_MODE_MASTER_CLK_IN_MHZ(0x48); + } else { + MC_FLASH_MODE0 = MC_FLASH_MODE_FLASH_WAIT_STATES(0) | + MC_FLASH_MODE_MASTER_CLK_IN_MHZ(48); + } + + // Initialize all system clocks + ConfigClocks(); + + LED_A_ON(); + + if(BUTTON_PRESS()) { + UsbStart(); + } + + for(;;) { + WDT_HIT(); + + UsbPoll(TRUE); + + if(!BUTTON_PRESS()) { + USB_D_PLUS_PULLUP_OFF(); + LED_B_ON(); + + // jump to RAM address 0x10000 (LSBit set for thumb mode) + asm("ldr r3, = 0x10001\n"); + asm("bx r3\n"); + } + } +} diff --git a/bootrom/flash-reset.s b/bootrom/flash-reset.s new file mode 100644 index 000000000..afb658a43 --- /dev/null +++ b/bootrom/flash-reset.s @@ -0,0 +1,38 @@ +.extern CopyBootToRAM + +.text +.code 32 +.align 0 + +.global start +start: + b Reset + b UndefinedInstruction + b SoftwareInterrupt + b PrefetchAbort + b DataAbort + b Reserved + b Irq + b Fiq + +Reset: + ldr sp, = 0x0020FFF8 @ initialize stack pointer to top of RAM + bl CopyBootToRAM @ copy bootloader to RAM (in case the + @ user re-flashes the bootloader) + ldr r3, = 0x00200000 @ start address of RAM bootloader + bx r3 @ jump to it + +Fiq: + b Fiq +UndefinedInstruction: + b UndefinedInstruction +SoftwareInterrupt: + b SoftwareInterrupt +PrefetchAbort: + b PrefetchAbort +DataAbort: + b DataAbort +Reserved: + b Reserved +Irq: + b Irq diff --git a/bootrom/fromflash.c b/bootrom/fromflash.c new file mode 100644 index 000000000..e6868092f --- /dev/null +++ b/bootrom/fromflash.c @@ -0,0 +1,11 @@ +#include + +void CopyBootToRAM(void) +{ + int i; + + volatile DWORD *s = (volatile DWORD *)0x200; + volatile DWORD *d = (volatile DWORD *)0x200000; + + for(i = 0; i < 1024; i++) *d++ = *s++; +} diff --git a/bootrom/ldscript-flash b/bootrom/ldscript-flash new file mode 100644 index 000000000..0d5d73256 --- /dev/null +++ b/bootrom/ldscript-flash @@ -0,0 +1,11 @@ +SECTIONS +{ + . = 0x00000000; + .text : { obj/flash-reset.o(.text) *(.text) } + .rodata : { *(.rodata) } + . = 0x00200000; + .data : { *(.data) } + __bss_start__ = .; + .bss : { *(.bss) } + __bss_end__ = .; +} diff --git a/bootrom/ldscript-ram-jtag b/bootrom/ldscript-ram-jtag new file mode 100644 index 000000000..5dd570616 --- /dev/null +++ b/bootrom/ldscript-ram-jtag @@ -0,0 +1,10 @@ +SECTIONS +{ + . = 0x00200000; + .text : { obj/ram-reset.o(.text) *(.text) } + .rodata : { *(.rodata) } + .data : { *(.data) } + __bss_start__ = .; + .bss : { *(.bss) } + __bss_end__ = .; +} diff --git a/bootrom/ram-reset.s b/bootrom/ram-reset.s new file mode 100644 index 000000000..56bf36e38 --- /dev/null +++ b/bootrom/ram-reset.s @@ -0,0 +1,10 @@ +.extern BootROM + +.text +.code 32 +.align 0 + +.global start +start: + ldr sp, = 0x0020FFF8 + bl BootROM diff --git a/cockpit/0setpath.bat b/cockpit/0setpath.bat new file mode 100644 index 000000000..5010957b1 --- /dev/null +++ b/cockpit/0setpath.bat @@ -0,0 +1,5 @@ +@echo off +set PATH=..\..\devkitARM\bin;..\..\devkitWIN\bin;%PATH% +set INCLUDE=..\..\devkitWIN\include +set LIB=..\..\devkitWIN\lib +cmd.exe \ No newline at end of file diff --git a/cockpit/1makearm.bat b/cockpit/1makearm.bat new file mode 100644 index 000000000..a8ecb6e47 --- /dev/null +++ b/cockpit/1makearm.bat @@ -0,0 +1,5 @@ +@echo off +cd ..\armsrc +rem nmake clean +nmake +cd ..\cockpit diff --git a/cockpit/2makeboot.bat b/cockpit/2makeboot.bat new file mode 100644 index 000000000..a56fcfe0f --- /dev/null +++ b/cockpit/2makeboot.bat @@ -0,0 +1,5 @@ +@echo off +cd ..\bootrom +rem nmake clean +nmake +cd ..\cockpit diff --git a/cockpit/3makewin.bat b/cockpit/3makewin.bat new file mode 100644 index 000000000..82228e32f --- /dev/null +++ b/cockpit/3makewin.bat @@ -0,0 +1,5 @@ +@echo off +cd ..\winsrc +rem nmake clean +nmake +cd ..\cockpit diff --git a/cockpit/4flashos.bat b/cockpit/4flashos.bat new file mode 100644 index 000000000..6f2261843 --- /dev/null +++ b/cockpit/4flashos.bat @@ -0,0 +1,3 @@ +@echo off +..\winsrc\prox.exe load ..\armsrc\obj\osimage.s19 +..\winsrc\prox.exe load ..\armsrc\obj\osimage.s19 diff --git a/cockpit/5makeall.bat b/cockpit/5makeall.bat new file mode 100644 index 000000000..072393d9d --- /dev/null +++ b/cockpit/5makeall.bat @@ -0,0 +1,3 @@ +call 1makearm.bat +call 2makeboot.bat +call 3makewin.bat diff --git a/cockpit/prox.bat b/cockpit/prox.bat new file mode 100644 index 000000000..06b24edc9 --- /dev/null +++ b/cockpit/prox.bat @@ -0,0 +1,3 @@ +@echo off +cd ..\winsrc +call prox gui \ No newline at end of file diff --git a/common/iso14443_crc.c b/common/iso14443_crc.c new file mode 100644 index 000000000..cf29d0e02 --- /dev/null +++ b/common/iso14443_crc.c @@ -0,0 +1,35 @@ +//----------------------------------------------------------------------------- +// Routines to compute the CRCs (two different flavours, just for confusion) +// required for ISO 14443, swiped directly from the spec. +//----------------------------------------------------------------------------- + +#define CRC_14443_A 0x6363 /* ITU-V.41 */ +#define CRC_14443_B 0xFFFF /* ISO/IEC 13239 (formerly ISO/IEC 3309) */ + +static unsigned short UpdateCrc14443(unsigned char ch, unsigned short *lpwCrc) +{ + ch = (ch ^ (unsigned char) ((*lpwCrc) & 0x00FF)); + ch = (ch ^ (ch << 4)); + *lpwCrc = (*lpwCrc >> 8) ^ ((unsigned short) ch << 8) ^ + ((unsigned short) ch << 3) ^ ((unsigned short) ch >> 4); + return (*lpwCrc); +} + +static void ComputeCrc14443(int CrcType, BYTE *Data, int Length, + BYTE *TransmitFirst, BYTE *TransmitSecond) +{ + unsigned char chBlock; + unsigned short wCrc=CrcType; + + do { + chBlock = *Data++; + UpdateCrc14443(chBlock, &wCrc); + } while (--Length); + + if (CrcType == CRC_14443_B) + wCrc = ~wCrc; /* ISO/IEC 13239 (formerly ISO/IEC 3309) */ + + *TransmitFirst = (BYTE) (wCrc & 0xFF); + *TransmitSecond = (BYTE) ((wCrc >> 8) & 0xFF); + return; +} diff --git a/common/usb.c b/common/usb.c new file mode 100644 index 000000000..f0b952917 --- /dev/null +++ b/common/usb.c @@ -0,0 +1,472 @@ +//----------------------------------------------------------------------------- +// My USB driver. This has to be common, because it exists in both the +// bootrom and the application. +// Jonathan Westhues, split Aug 14 2005 +//----------------------------------------------------------------------------- +#include + +#define min(a, b) (((a) > (b)) ? (b) : (a)) + +#define USB_REPORT_PACKET_SIZE 64 + +typedef struct PACKED { + BYTE bmRequestType; + BYTE bRequest; + WORD wValue; + WORD wIndex; + WORD wLength; +} UsbSetupData; + +#define USB_REQUEST_GET_STATUS 0 +#define USB_REQUEST_CLEAR_FEATURE 1 +#define USB_REQUEST_SET_FEATURE 3 +#define USB_REQUEST_SET_ADDRESS 5 +#define USB_REQUEST_GET_DESCRIPTOR 6 +#define USB_REQUEST_SET_DESCRIPTOR 7 +#define USB_REQUEST_GET_CONFIGURATION 8 +#define USB_REQUEST_SET_CONFIGURATION 9 +#define USB_REQUEST_GET_INTERFACE 10 +#define USB_REQUEST_SET_INTERFACE 11 +#define USB_REQUEST_SYNC_FRAME 12 + +#define USB_DESCRIPTOR_TYPE_DEVICE 1 +#define USB_DESCRIPTOR_TYPE_CONFIGURATION 2 +#define USB_DESCRIPTOR_TYPE_STRING 3 +#define USB_DESCRIPTOR_TYPE_INTERFACE 4 +#define USB_DESCRIPTOR_TYPE_ENDPOINT 5 +#define USB_DESCRIPTOR_TYPE_DEVICE_QUALIFIER 6 +#define USB_DESCRIPTOR_TYPE_OTHER_SPEED_CONF 7 +#define USB_DESCRIPTOR_TYPE_INTERFACE_POWER 8 +#define USB_DESCRIPTOR_TYPE_HID 0x21 +#define USB_DESCRIPTOR_TYPE_HID_REPORT 0x22 + +#define USB_DEVICE_CLASS_HID 0x03 + +static const BYTE HidReportDescriptor[] = { + 0x06,0xA0,0xFF, // Usage Page (vendor defined) FFA0 + 0x09,0x01, // Usage (vendor defined) + 0xA1,0x01, // Collection (Application) + 0x09,0x02, // Usage (vendor defined) + 0xA1,0x00, // Collection (Physical) + 0x06,0xA1,0xFF, // Usage Page (vendor defined) + + //The,input report + 0x09,0x03, // usage - vendor defined + 0x09,0x04, // usage - vendor defined + 0x15,0x80, // Logical Minimum (-128) + 0x25,0x7F, // Logical Maximum (127) + 0x35,0x00, // Physical Minimum (0) + 0x45,0xFF, // Physical Maximum (255) + 0x75,0x08, // Report Size (8) (bits) + 0x95,0x40, // Report Count (64) (fields) + 0x81,0x02, // Input (Data,Variable,Absolute) + + //The,output report + 0x09,0x05, // usage - vendor defined + 0x09,0x06, // usage - vendor defined + 0x15,0x80, // Logical Minimum (-128) + 0x25,0x7F, // Logical Maximum (127) + 0x35,0x00, // Physical Minimum (0) + 0x45,0xFF, // Physical Maximum (255) + 0x75,0x08, // Report Size (8) (bits) + 0x95,0x40, // Report Count (64) (fields) + 0x91,0x02, // Output (Data,Variable,Absolute) + + 0xC0, // End Collection + + 0xC0, // End Collection +}; + +static const BYTE DeviceDescriptor[] = { + 0x12, // Descriptor length (18 bytes) + 0x01, // Descriptor type (Device) + 0x10,0x01, // Complies with USB Spec. Release (0110h = release 1.10) + 0x00, // Class code (0) + 0x00, // Subclass code (0) + 0x00, // Protocol (No specific protocol) + 0x08, // Maximum packet size for Endpoint 0 (8 bytes) + 0xc4,0x9a, // Vendor ID (random numbers) + 0x8f,0x4b, // Product ID (random numbers) + 0x01,0x00, // Device release number (0001) + 0x01, // Manufacturer string descriptor index + 0x02, // Product string descriptor index + 0x00, // Serial Number string descriptor index (None) + 0x01, // Number of possible configurations (1) +}; + +static const BYTE ConfigurationDescriptor[] = { + 0x09, // Descriptor length (9 bytes) + 0x02, // Descriptor type (Configuration) + 0x29,0x00, // Total data length (41 bytes) + 0x01, // Interface supported (1) + 0x01, // Configuration value (1) + 0x00, // Index of string descriptor (None) + 0x80, // Configuration (Bus powered) + 250, // Maximum power consumption (500mA) + + //interface + 0x09, // Descriptor length (9 bytes) + 0x04, // Descriptor type (Interface) + 0x00, // Number of interface (0) + 0x00, // Alternate setting (0) + 0x02, // Number of interface endpoint (2) + 0x03, // Class code (HID) + 0x00, // Subclass code () + 0x00, // Protocol code () + 0x00, // Index of string() + + // class + 0x09, // Descriptor length (9 bytes) + 0x21, // Descriptor type (HID) + 0x00,0x01, // HID class release number (1.00) + 0x00, // Localized country code (None) + 0x01, // # of HID class dscrptr to follow (1) + 0x22, // Report descriptor type (HID) + // Total length of report descriptor + sizeof(HidReportDescriptor),0x00, + + // endpoint 1 + 0x07, // Descriptor length (7 bytes) + 0x05, // Descriptor type (Endpoint) + 0x01, // Encoded address (Respond to OUT) + 0x03, // Endpoint attribute (Interrupt transfer) + 0x08,0x00, // Maximum packet size (8 bytes) + 0x01, // Polling interval (1 ms) + + // endpoint 2 + 0x07, // Descriptor length (7 bytes) + 0x05, // Descriptor type (Endpoint) + 0x82, // Encoded address (Respond to IN) + 0x03, // Endpoint attribute (Interrupt transfer) + 0x08,0x00, // Maximum packet size (8 bytes) + 0x01, // Polling interval (1 ms) +}; + +static const BYTE StringDescriptor0[] = { + 0x04, // Length + 0x03, // Type is string + 0x09, // English + 0x04, // US +}; + +static const BYTE StringDescriptor1[] = { + 24, // Length + 0x03, // Type is string + 'J', 0x00, + '.', 0x00, + ' ', 0x00, + 'W', 0x00, + 'e', 0x00, + 's', 0x00, + 't', 0x00, + 'h', 0x00, + 'u', 0x00, + 'e', 0x00, + 's', 0x00, +}; + +static const BYTE StringDescriptor2[] = { + 54, // Length + 0x03, // Type is string + 'P', 0x00, + 'r', 0x00, + 'o', 0x00, + 'x', 0x00, + 'M', 0x00, + 'a', 0x00, + 'r', 0x00, + 'k', 0x00, + '-', 0x00, + '3', 0x00, + ' ', 0x00, + 'R', 0x00, + 'F', 0x00, + 'I', 0x00, + 'D', 0x00, + ' ', 0x00, + 'I', 0x00, + 'n', 0x00, + 's', 0x00, + 't', 0x00, + 'r', 0x00, + 'u', 0x00, + 'm', 0x00, + 'e', 0x00, + 'n', 0x00, + 't', 0x00, +}; + +static const BYTE * const StringDescriptors[] = { + StringDescriptor0, + StringDescriptor1, + StringDescriptor2, +}; + + +static BYTE UsbBuffer[64]; +static int UsbSoFarCount; + +static BYTE CurrentConfiguration; + +static void UsbSendEp0(const BYTE *data, int len) +{ + int thisTime, i; + + do { + thisTime = min(len, 8); + len -= thisTime; + + for(i = 0; i < thisTime; i++) { + UDP_ENDPOINT_FIFO(0) = *data; + data++; + } + + if(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED) { + UDP_ENDPOINT_CSR(0) &= ~UDP_CSR_TX_PACKET_ACKED; + while(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED) + ; + } + + UDP_ENDPOINT_CSR(0) |= UDP_CSR_TX_PACKET; + + do { + if(UDP_ENDPOINT_CSR(0) & UDP_CSR_RX_PACKET_RECEIVED_BANK_0) { + // This means that the host is trying to write to us, so + // abandon our write to them. + UDP_ENDPOINT_CSR(0) &= ~UDP_CSR_RX_PACKET_RECEIVED_BANK_0; + return; + } + } while(!(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED)); + } while(len > 0); + + if(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED) { + UDP_ENDPOINT_CSR(0) &= ~UDP_CSR_TX_PACKET_ACKED; + while(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED) + ; + } +} + +static void UsbSendZeroLength(void) +{ + UDP_ENDPOINT_CSR(0) |= UDP_CSR_TX_PACKET; + + while(!(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED)) + ; + + UDP_ENDPOINT_CSR(0) &= ~UDP_CSR_TX_PACKET_ACKED; + + while(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED) + ; +} + +static void HandleRxdSetupData(void) +{ + int i; + UsbSetupData usd; + + for(i = 0; i < sizeof(usd); i++) { + ((BYTE *)&usd)[i] = UDP_ENDPOINT_FIFO(0); + } + + if(usd.bmRequestType & 0x80) { + UDP_ENDPOINT_CSR(0) |= UDP_CSR_CONTROL_DATA_DIR; + while(!(UDP_ENDPOINT_CSR(0) & UDP_CSR_CONTROL_DATA_DIR)) + ; + } + + UDP_ENDPOINT_CSR(0) &= ~UDP_CSR_RX_HAVE_READ_SETUP_DATA; + while(UDP_ENDPOINT_CSR(0) & UDP_CSR_RX_HAVE_READ_SETUP_DATA) + ; + + switch(usd.bRequest) { + case USB_REQUEST_GET_DESCRIPTOR: + if((usd.wValue >> 8) == USB_DESCRIPTOR_TYPE_DEVICE) { + UsbSendEp0((BYTE *)&DeviceDescriptor, + min(sizeof(DeviceDescriptor), usd.wLength)); + } else if((usd.wValue >> 8) == USB_DESCRIPTOR_TYPE_CONFIGURATION) { + UsbSendEp0((BYTE *)&ConfigurationDescriptor, + min(sizeof(ConfigurationDescriptor), usd.wLength)); + } else if((usd.wValue >> 8) == USB_DESCRIPTOR_TYPE_STRING) { + const BYTE *s = StringDescriptors[usd.wValue & 0xff]; + UsbSendEp0(s, min(s[0], usd.wLength)); + } else if((usd.wValue >> 8) == USB_DESCRIPTOR_TYPE_HID_REPORT) { + UsbSendEp0((BYTE *)&HidReportDescriptor, + min(sizeof(HidReportDescriptor), usd.wLength)); + } else { + *((DWORD *)0x00200000) = usd.wValue; + } + break; + + case USB_REQUEST_SET_ADDRESS: + UsbSendZeroLength(); + UDP_FUNCTION_ADDR = UDP_FUNCTION_ADDR_ENABLED | usd.wValue ; + if(usd.wValue != 0) { + UDP_GLOBAL_STATE = UDP_GLOBAL_STATE_ADDRESSED; + } else { + UDP_GLOBAL_STATE = 0; + } + break; + + case USB_REQUEST_GET_CONFIGURATION: + UsbSendEp0(&CurrentConfiguration, sizeof(CurrentConfiguration)); + break; + + case USB_REQUEST_GET_STATUS: { + if(usd.bmRequestType & 0x80) { + WORD w = 0; + UsbSendEp0((BYTE *)&w, sizeof(w)); + } + break; + } + case USB_REQUEST_SET_CONFIGURATION: + CurrentConfiguration = usd.wValue; + if(CurrentConfiguration) { + UDP_GLOBAL_STATE = UDP_GLOBAL_STATE_CONFIGURED; + UDP_ENDPOINT_CSR(1) = UDP_CSR_ENABLE_EP | + UDP_CSR_EPTYPE_INTERRUPT_OUT; + UDP_ENDPOINT_CSR(2) = UDP_CSR_ENABLE_EP | + UDP_CSR_EPTYPE_INTERRUPT_IN; + } else { + UDP_GLOBAL_STATE = UDP_GLOBAL_STATE_ADDRESSED; + UDP_ENDPOINT_CSR(1) = 0; + UDP_ENDPOINT_CSR(2) = 0; + } + UsbSendZeroLength(); + break; + + case USB_REQUEST_GET_INTERFACE: { + BYTE b = 0; + UsbSendEp0(&b, sizeof(b)); + break; + } + + case USB_REQUEST_SET_INTERFACE: + UsbSendZeroLength(); + break; + + case USB_REQUEST_CLEAR_FEATURE: + case USB_REQUEST_SET_FEATURE: + case USB_REQUEST_SET_DESCRIPTOR: + case USB_REQUEST_SYNC_FRAME: + default: + break; + } +} + +void UsbSendPacket(BYTE *packet, int len) +{ + int i, thisTime; + + while(len > 0) { + thisTime = min(len, 8); + + for(i = 0; i < thisTime; i++) { + UDP_ENDPOINT_FIFO(2) = packet[i]; + } + UDP_ENDPOINT_CSR(2) |= UDP_CSR_TX_PACKET; + + while(!(UDP_ENDPOINT_CSR(2) & UDP_CSR_TX_PACKET_ACKED)) + ; + UDP_ENDPOINT_CSR(2) &= ~UDP_CSR_TX_PACKET_ACKED; + + while(UDP_ENDPOINT_CSR(2) & UDP_CSR_TX_PACKET_ACKED) + ; + + len -= thisTime; + packet += thisTime; + } +} + +static void HandleRxdData(void) +{ + int i, len; + + if(UDP_ENDPOINT_CSR(1) & UDP_CSR_RX_PACKET_RECEIVED_BANK_0) { + len = UDP_CSR_BYTES_RECEIVED(UDP_ENDPOINT_CSR(1)); + + for(i = 0; i < len; i++) { + UsbBuffer[UsbSoFarCount] = UDP_ENDPOINT_FIFO(1); + UsbSoFarCount++; + } + + UDP_ENDPOINT_CSR(1) &= ~UDP_CSR_RX_PACKET_RECEIVED_BANK_0; + while(UDP_ENDPOINT_CSR(1) & UDP_CSR_RX_PACKET_RECEIVED_BANK_0) + ; + + if(UsbSoFarCount >= 64) { + UsbPacketReceived(UsbBuffer, UsbSoFarCount); + UsbSoFarCount = 0; + } + } + + if(UDP_ENDPOINT_CSR(1) & UDP_CSR_RX_PACKET_RECEIVED_BANK_1) { + len = UDP_CSR_BYTES_RECEIVED(UDP_ENDPOINT_CSR(1)); + + for(i = 0; i < len; i++) { + UsbBuffer[UsbSoFarCount] = UDP_ENDPOINT_FIFO(1); + UsbSoFarCount++; + } + + UDP_ENDPOINT_CSR(1) &= ~UDP_CSR_RX_PACKET_RECEIVED_BANK_1; + while(UDP_ENDPOINT_CSR(1) & UDP_CSR_RX_PACKET_RECEIVED_BANK_1) + ; + + if(UsbSoFarCount >= 64) { + UsbPacketReceived(UsbBuffer, UsbSoFarCount); + UsbSoFarCount = 0; + } + } +} + +void UsbStart(void) +{ + volatile int i; + + UsbSoFarCount = 0; + + USB_D_PLUS_PULLUP_OFF(); + + for(i = 0; i < 1000000; i++) + ; + + USB_D_PLUS_PULLUP_ON(); + + if(UDP_INTERRUPT_STATUS & UDP_INTERRUPT_END_OF_BUS_RESET) { + UDP_INTERRUPT_CLEAR = UDP_INTERRUPT_END_OF_BUS_RESET; + } +} + +BOOL UsbPoll(BOOL blinkLeds) +{ + BOOL ret = FALSE; + + if(UDP_INTERRUPT_STATUS & UDP_INTERRUPT_END_OF_BUS_RESET) { + UDP_INTERRUPT_CLEAR = UDP_INTERRUPT_END_OF_BUS_RESET; + + // following a reset we should be ready to receive a setup packet + UDP_RESET_ENDPOINT = 0xf; + UDP_RESET_ENDPOINT = 0; + + UDP_FUNCTION_ADDR = UDP_FUNCTION_ADDR_ENABLED; + + UDP_ENDPOINT_CSR(0) = UDP_CSR_EPTYPE_CONTROL | UDP_CSR_ENABLE_EP; + + CurrentConfiguration = 0; + + ret = TRUE; + } + + if(UDP_INTERRUPT_STATUS & UDP_INTERRUPT_ENDPOINT(0)) { + if(UDP_ENDPOINT_CSR(0) & UDP_CSR_RX_HAVE_READ_SETUP_DATA) { + HandleRxdSetupData(); + ret = TRUE; + } + } + + if(UDP_INTERRUPT_STATUS & UDP_INTERRUPT_ENDPOINT(1)) { + HandleRxdData(); + ret = TRUE; + } + + return ret; +} diff --git a/doc/CHANGES.TXT b/doc/CHANGES.TXT new file mode 100644 index 000000000..b209cc03e --- /dev/null +++ b/doc/CHANGES.TXT @@ -0,0 +1,155 @@ +################ +## 2009/03/28 ## +################ +winsrc/command.cpp + Added two new LF commands for tag exploration : + + - askdemod: takes 2 arguments, one is the clock rate, one is the modulation + convention (high mod is 1 or high mod is zero) + + This command demodulates the stream into a binary stream into + the trace buffer (0's and 1's) + + - mandemod: manchester decoding of a bitstream: takes a binary stream from + the trace buffer (see askdemod) and attempts to do manchester decoding + to it. One argument: clock rate. Outputs the bitstream to the scrollback buffer. + + Those two helped me to validate that the unknown tag I had was indeed an EM4100 type of tag + + +################ +## 2008/12/11 ## +################ +bootrom/bootrom.c + Significant changes to bootloader. Use of Chip ID register to detect if running on a SAM7S512 then configure FLASH + waitstates as per SummoningDark's suggestion for a SAM7S512 or SAM7S256. + Deleted idle loops waiting blindly for clocks to settle and now using status registers to detect when clocks are stable. + + ************************* + * IMPORTANT INFORMATION * + ************************************************************************************************************************** + * With this boot code, the device can now only be flashed if button is held down after power on or a software reset. + * The flash procedure is this: + * Hold down button. Either plug in USB or software reset it. _While_holding_down_button_ (red and yellow LEDs are lit) you can + * issue one or more of the "prox bootrom " "prox fpga " "prox load ", be sure to hold button down for the + * entire duration of the flash process. Only release the button when flashing is complete and you want to let the board boot. + * This process may be less convenient but it's safer and avoids "unintentional" flashing of the board. + ************************************************************************************************************************** + LED boot sequence now changed, C (red) lights up when boot code jumps from flash to RAM boot code, A (yellow) lights up after + clocks have been initialized, B (green) lights up when jumping from boot code to main code, then D (red led away from the others) + lights up while code is being downloaded to FPGA, then all leds turn off and board is ready for action. + + With these changes the board now boots and is ready to use in about 3 seconds. Also since the USB bus is not initialized + twice (once during boot, then again when the main code runs) unless the button is held down at boot, this seems to avoid + the double USB connect and "USB device not recognized" when device is connected to the USB bus or software reset. + +################ +## 2008/12/06 ## +################ +armsrc/fpga.c + Implemented function SetupSpi() to initialize the Serial Peripheral Interface (SPI) in preparation to adding an LCD to the board. + Changed FpgaWriteConfWord() to use the SPI communication now instead of bit banging the serial data to the FPGA. + +fpga/fpga.v + The FPGA config word serializer required non standard SPI communication (ie for shifting in a 8 bit word, it required a 9th clock + cycle with NCS high to load the word from the shift register to the conf register). This was OK for manually bitbanging it but not + suitable for using SPI comms. The serializer was fixed to load the conf word from the shift register on a NCS lo-hi transition and + not require additional clocking. + +armsrc/fpgaimg.c + Recompiled FPGA code after changes above. + +armsrc/LCD.c + LCD driver for PCF8833 based LCDs like those found on Nokia models 2600,2650,3100,3120,5140,6030,6100,6610,7210,7250 maybe + others. These color LCDs have a resolution of 132x132 and a serial interface. They are very cheap like even down to $2/pc + This LCD driver is a straight rip of that found at http://www.sparkfun.com/datasheets/LCD/Jimbo-Nokia-SAM7-Example.zip with + very small changes, mainly to integrate it and make it compile with our codebase. Also comented out the circle subroutines + to keep the code to integer math only. + +armsrc/fonts.c + Font definition for LCD driver + +armsrc/appmain.c + Fixed a small bug in CmdHIDdemodFSK (added case 4) which prevented reading some tags. When a logic 0 is immediately followed + by the start of the next transmisson (special pattern) a pattern of 4 bit duration lengths is created. + +################ +## 2008/11/27 ## +################ +armsrc/appmain.c + Implemented an HID tag FSK demodulator (CmdHIDdemodFSK) to obtain the tag ID code from the raw sampled waveform. + Implemented CmdHIDsimTAG which takes a 44bit HID tag ID as a hex number then creates the waveform and simulates the tag + +winsrc/command.cpp + Added command "hidfskdemod" that calls CmdHIDdemodFSK, the ARM FSK demodulator for HID tags. + +include/usb-cmd.h + New defines CMD_HID_DEMOD_FSK and CMD_HID_SIM_TAG + +2008/11/25 +common/iso14443_crc.c + Moved CRC calculation code into this file as it's common to both ARM and Windows side. This file is now included as needed. + +################ +## 2008/11/21 ## +################ +armsrc/Makefile + Changes to split up the compilation of the ARM and produce separate S files for the FPGA code and the ARM code. + +armsrc/appmain.c + Replaced some of the hex value params in FpgaWriteConfWord with more explanatory defines. + Changes to the Tune command as it assumes wrong HF capacitor value (130pF) and produces wrong voltage readings. + Combined some of the integer arithmetic statements to improve accuracy slightly, since the voltage divider ratio is not an integer. + Voltage divider resistor network is 10M/240k = ratio of 41.6666 + + Originally the calculation was rounding the ratio down to 41 + 3300 (mV) * 41 * sample_value / 1024 + New calculation without rounding error is + 3300 (mV) * 41.66666 * sample_value / 1024 => 137500 * sample_value / 1024 + + New define BUTTON_PRESS() returns status of button + +armsrc/fpga.c + The current board can only take a X2S30 as there is no larger FPGA in PQFP100 package and + the smaller X2S15 FPGA can't fit the current code. The X2S30 FPGA config is fixed at 336,768 bits + The FPGA code base address and length is hard coded to occupy FLASH region 0x2000 - 0xC470. + +armsrc/ldscript-fpga + New file to place the FPGA code at FLASH address 0x2000 + +bootrom/Makefile + Slight changes, commented out the generation of byteswapped S file, the other S files are generated in the same section of the makefile now. + +bootrom/bootrom.c + Changed some thumb code with a one line ARM code which is clearer and more explicit. Processor runs in ARM mode at reset anyway. + Changed jump to RAM address, used to jump to 0x2000 (now FPGA area), now jumps to 0x10000. + +bootrom/flash-reset.s + Changed name of CMain to CopyBootToRAM. Streamlined reset code, fixed up stack pointer initialization. + +bootrom/fromflash.c + Removed the whole section of initializing clocks, this is redundant as it's being done once we jump to boot code in RAM + All fromflash.c does now is copy the boot code to ram and jumps to it. + +bootrom/ram-reset.s + Fixed up stack pointer initialization that caused crash when using "loread" + +include/at91sam7s128.h + New defines for debug register, lets you identify what processor flavour the code runs on, RAM and FLASH sizes, etc. + +include/proxmark3.h + New useful defines for relay and button + +winsrc/Makefile + Added new define /D_CRT_SECURE_NO_WARNINGS to elliminate a _whole bunch_ of bogus compilation warnings + +winsrc/command.cpp + Changed CmdLosamples to take a numeric argument (number of samples x4 to retrieve from buffer) + New command Quit to exit the program from the GUI command prompt. + +winsrc/gui.cpp + Fixup compilation warnings. + +winsrc/prox.cpp + Tidy up printing to stdout, flashing progress now updates on the same line instead of scrolling up. + New command line parameter to load FPGA image to FLASH. diff --git a/doc/README.TXT b/doc/README.TXT new file mode 100644 index 000000000..f3b49c771 --- /dev/null +++ b/doc/README.TXT @@ -0,0 +1,39 @@ +This is a bare minimum compile environment for the proxmark3 sources. + +CONTENTS + +This bundle contains the ARM cross compiler in devkitARM and a _tiny_ subset +of the Visual C++ 2008 Express Edition in devkitWIN which is the bare minimum +required for compilation of this current source. + +If you plan on further source code development you are strongly encouraged +to download the full Visual C++ 2008 available for free download from +http://www.microsoft.com/express/download/ + +CAVEATS + +There is no provision in this environment for compiling the FPGA source. To +do that you need to download the free (registration required) ISE WebPack +from Xilinx at http://www.xilinx.com/ise/logic_design_prod/webpack.htm +Be warned, the pack is huge, 2Gb download and >4Gb installed. + +USAGE + +First of all run the .msi file in devkitWIN\vcredist_x86 to install the VC++ +redistributables, without these, nmake, cl and link won't run. + +Get a command prompts in the cockpit directory and pretty much run the batch +files in the order they appear: + +0setpath.bat - sets the environment vars for the compile environment +1makearm.bat - compiles the files in armsrc, output files in armsrc\obj +2makeboot.bat - compiles the files in bootrom, output files in bootrom\obj +3makewin.bat - compiles the files in winsrc, output files in winsrc\obj +4flashos.bat - attempts to upload the OS image to the proxmark3 board + +ACKNOWLEDGMENTS + +Thanks to J Westhues for the original proxmark, Roel and the proxmark.org +community. This pack may contain F/OSS or free but copyrighted software +from Xilinx, Microsoft and others. All trademarks are the property of +their respective owners. All rights reserved. diff --git a/doc/component-placement.bmp b/doc/component-placement.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d385431021e8b609fa63282d6d7cbab78eeebac2 GIT binary patch literal 66066 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 literal 0 HcmV?d00001 diff --git a/doc/proxmark3.xls b/doc/proxmark3.xls new file mode 100644 index 0000000000000000000000000000000000000000..c13169cb91cf86f6e0a454fa8100424260c2688c GIT binary patch literal 30208 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


Vc=-NKob%Z_ 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⪼1R+$3TA9Pdv zP2L!%?5+Kl`oq8E@!E@aUY8o?fBxT8=Oij8eaepKHn`T^(BT&FZjqew(X;OpIKH#{ zFdg4?{6UTWy_VzApS|Zgs7fEYzpGaK>&n~rI=>lKi1kd~&CMem=H%`yd-sD|$-8f^ zR~~I!rTu=#^V{dtWUO|GigAgrFmmqRS<7vDci#Gw`kM+)>HZZ~N^}Tdu6Ae@y)@;- zz0Kdh%V$amr^q=+nq~d|a%;-ed?r)r_77~vt=BzvwpN{Cx~g?t<0yzwVOwq`JTE0V z>vlpjcuiie*pALwdHoaeK{aThY1P3iihB~46Z9+ri4 zZhZSXQ1w_`?!lXi6J>>NDmE^@vS39~cgC(-Vbi3J-^8Cc|AssYm=BP}3r(KC;krYEZs#DtoQqmvE^>+P0IZd8-GKkJZT&e2a3+cqxq zIju8!dFsSvGd|pTKGUkPFVDj2r>cf|VEr!HJ%6~ePS2mO_O~JM!E=x3f((8?JJ!p` zt{&l^!4Ya9unaVjQ1Dyt)x&Q=-y=8LCES&kka@Yi#hH2gA&-Y1p(i_*ftzCz0-pj` zm`kWn`6oHG($%n~{LaL`!iPbvuICEV^J~tY=9b^keEY!@vxmib9QrdfV@f96cecIT z$Ei5|y@S^ro^u*jtEck$hx-Xu9wq?x(g#ciflD=2FpQrw;oTHI9h ztEoEdMCyv=R{av^Z)FE)ZT@zC)syc5^LMS4T*_;8we!P|hMEs{LTsQND_Va*^JTD6 zs-$SOD_>3{Myc}p?>~=lUhUGe<&oi~W54%iCk23ppOjlK8-g2>cN=$?7HsEw_i@v! zSrz|pO_{p-t}JLU?w{icK7)6MxXU>HFJACxmQ>z({kf8n<%!Sd-Jf-n$9BcxU0yBX zJi9;qX}k6A+tDi})(LwrHiO5i&TLTwja6Md_%?f`;m@=0kLGLutqwWqlV{k{YH z&L94K*;qQ~_m&*_O_j?MpDVu3xvlIy71{-YaT@}Eqz0^8c+4(-XX^e`&|sDA zG43ScEQ276Mfqo^ggaI)O1z=to%H%#%q{6FLZNkm=b6gZtX_7<Iy| z`q?{{IZ>;Pc)y0j6A`Z%O?+~rxntYpQ?W=FLSJ=1TeX#CUo!i9+Zy0}GOOQGK zUOrd)p=J4-CuQ+>_DzXms}$)p*%8gO{oqN^{Jto74-fCB=oK?>3l*K!=$w48>eyYI zg^L&V^PXn>+rzFJn2Pp^5VyTVnIXLuTBdF)0Pb^F6_7BF4+F zHEU`L6kYP0b4mEO+1Its0pj2eoy>`2)7n#u6r^wK7;`OswPM2+mG=y>?cfyz9!*93 zrgx{!dJ<`Wzv%S$)ncI4q^*a(zWBEF%Hg+H#BbKyCnhz!lzx=mzV7)k&pMx78!Qhw zBxXjN{g9mEE@kGttX}J~QEW@^?kw(AWpi&^ZPB(dcMVllp0wbO^Vx|;;YQb(i&c{g z^kRJ?7Ti25p&jz@$F(Uv`?jiHQ|3+fop^M9+9sWUHa>?E;DETBYW%dgD zyMB&#?SikKA3nq{!CKe1g|+>gs?Ear?9uWU{AX}%%~kLb@eAH;Z0r^QnoGHP>7V82 z+5@M)F}c6edw69*Y~qp++`%cA_IA%wPQ5cX!qy6rf7^_5PEcUr}JMEs6}S`c~e@5|o3_;pS;_U_KdKVH5!mH)R@ zbK2^QyPX5%Qg7IE+++j|9q~P^7nu?teEF@wL0P69&CJ{FR~$C-ZV^8sq}v7=6Pml> zUdKuBm{3}jFnmmC#vi-$>i>2hW_#DHDR{bHV&k75Ouy~;&o5rWyR9~A-f@-RSAJ+5 zKIeSx=7Qk4T*9=EY0KvOjs-==Chu@vU2ay!RV--|l4Z8`n9t z7u2}q?Cbx@_}G$1q)&JnZ=KwE+e;e+H@%y7q~1R9-fjICY9bE{oAWZme>`7S!}e4y zYnQFOxx`J4K<;yVh7WHt$6mSzZU#U)-}5*ZF(=psL>Qc(sFrxTcY}|{t4$ociz6;D zs|ux+blASESdz#S`S!BW$zxW&fe|wjTABSHT5ezEU+B=Z13LD>a?Dd0*Z)6>)!Ed3!2v zl%t5WwM$)naP@+t#Tu1yFWeTUex1F*=FkR7qsw-}zgsmwGtS|h&X(8Oc&KsJB0@4PaI8Aylh|sqbi?;k)0h65%#&R7we83|(ayWZJ}>7S zW)L%x8Y~%8e4=_1@lQd7sAr;*tMt_l)bUk9TUaZ4~=*PWaR(%bAiftL#r1 zw4J$LEBtV;PLcN2m3RAKW8nf*vR7`b|ET!(HjDfPMY{>N)t%U`x)&`s4qmdm=fq6O zJNs=;8C((B>SGisE%Bu~soL_8QEA@!l;Xwp!c#yCZ1Sp^bw3FmWxZ@C=*6G0@E_CV zxF=_Oebi5vJ61L&&e)*3F@B~|@zs{O%rLK7sK)#FZcm>WpYpM#`fSZ|;e~qaR#gXD zM8j^Ky|)>(fo1OW#8!_t_R-cdy4nK&GLKd+N-UmIIaBELO@6 z8oA+a)!q4S;W5KW=Tq$uecBWkw&K+<{T*K&c1Q{Gcj+xV7C1pa(Z2tqtJ&RK`^0eU|ZoKvC}1`3cMm+sakUiwNecnA|9TGOlaJej+l6Urhs(W zOGfQ0?h=OoS4+?In+9I%ZIPJ%=6?S&7rmKE>c-&KN0XrJvM1S~>SA5Uk&|cjv)JQ=MA(X3^~qhUyxdeAcec+` zcHOa+eM#e?nfYou?IDT+Rp5roo;&;6qozgNO6YT5|LU1Vh{Q9c@Yd!x+@OIUC*N~< zF1wEGYMqtm&i<~l{gG<2jj!6g3X%+G3-Ae4T z6E?h2_K;P%wI8%@^5c@cd+l4FC*L}-z-P}t-SRuTy{}uwC$w+4^Ek7z`FHUichG9% zE50r_H(y+kb^V^U$t=vySgF!9Ki$~{+MfdYv6qV-sx(PANn78^8yVS8+O2+fk zjIN)ynz^#z*yGgZ-ZFCwa063b?e3qvXOn9iIobWvZivrV_)lb2`0qdc0y4{=fQCs* zyZR2_SJ~#XaewUcKiOF_QdzIUbdq_!CWa^4@pjZm2~_?{TXje5)8B{>pxr4}JB0OY zPw6M=B;F|snX&bITJ*YQ(${aP>4dWu*N9G0m;Cl!F}SqIGvcI3lJTt_p|OWr{l3); zZu&npQ8~r+SmLa5sVJ=}`-amN9dq=ma zI_|O&NQS70$y>oiMfLrl2R zR-IqY2dk$fwokaaSLAubx1gL?E*2ZuooY|Vo`~Jg@-!$*&Ew!IGx0T9#eNb?Bd@J( z1kd#tEOKs&@$S8vxUSeVN#OOh#hObGh`bBh=ddQaxVI(Z^RukeOVp*x1{p1=n)lo(U1SqP*t4&S{-bKTrSpq;fbS zc$0Hdw z?82%W*qN#oHn8t7*L_%_R%B@U`p}=6Ue)xT>Y`b@{&BzSC{5X@|NM^2*QL^6q$RF8?|Ilbq~GX+_Y2r0u8a># zJmFvMu={nZ=ES?Ixx($Khl2Jmc`WxNu+7l1=!nKy#$_q(fvawb8vPCW!yJ6&oealg z!`gW%5|h1kE-UKt@>unJD3RDA3*T1!d%1@5Z2J%D@(q6)7K`XxB<*QYpYks2Q{nnq z9E%wmB2DlN&0kO`6+(Hl}4M~+Xh ze{e(R*6f(T9+VKWA3g9n1r5WnHB8b@A=*0he<< z?Uhg0ACNsEdm3jiFM7Ye{gy{@V?e8I;*x?E>AxTDz1qxk`@UiK=WhF7 zY1gwRtdw1LVs|w6wpj2yY4z&x;P?88S?wpH>#iMm@UQBHcixwKO}~FHxE-;hQ!3B9 z=#=#QS%F->bH6z>TD2~}vrJ3w)gj+2zjrT>>M}j{?c4fo_v1gBWR$UI@jvOy_dQwt zey!!BiERt@Uc6DgnUO#7`CSp=Z@jNW%x>L%09xbYQai)q^X!}6O}kpYhuetrm|U6f z^fhb#VZo-yTYf1(7NXt!XZPa#r#}(*qLxp#j|Q#t`DeChY3)&?u!Vk%qQd+3tW4if z!ZF=1H1GAgx3z~?uY9@f^@FnCyZZ|3MDv8t1w8+DU0nD4&RKae*|Q67#Pi#7pPJ0` z`}c&@x&OakcNRaAwxw|Ot`_dOZ~iN#{MSD0c4EZRwr7oGiKhvXN= z*L;U<-uGwLtp0p?QL%)EjJl5WAD)}ayt5U%y&qlP^mDCM?*0cRA+66f*MZy8JqzwQ z`)+@(o#JNpo>y`TUtr?P36*EIBe$jV&QHFfq2GB_K{Tj}zT1oEt=&F1Z_zZ#6gJcLjn}SCcwU*Dc90=&KBw?j^`hs(!CSx$ zM5|_-3-AUaPj%Asom^3`{>(f1%`^!_?n|^*f z-gL>HaoLH(CJ+DJSRri2A${c1?T)6Ig&e0Q^BmTT)SY~HxtT%mtN7?=Tysn`USF@` zxhc#mtyr8`miG1Wi!+|Kt3Th`b0~;atugPA!wXID7!A)U&`u_igL8$XG-TKfyesB0 z&$Mcl0}W?_W}u6BLZ6pxO_*~hHetpFAuFj@FWUZtM%|C*hKAoOnEtNp-KAgWazQ(z zr%Fbhc^kdrVcE;V=X#$#K5>_eZ1Rx!wm_;xB#a|?%83LUmZyPjijJpj4qeLG^6lkZ z&8W#DRiMfBIOV5euU>A8xBPta?bf0*J)am~**L!gH3>mGQKDmav`gh>pXk-8KP_AJ zy2biCn{n&ugKxW6+TZ>6BlzB>{N~_T{*3#~TfTo^Rx(Ryo6o%k9PZaz)1}%boDKZN zc-m|W&#Ya0uD)IB_fT{D%BagK%|(V^OQPo$Ufrnqr$Nc^TNaz?3R8tAR~f~=H8=!6 z?ePFDhsrzuLXy&_-wQYs=3AfpoeoN;CPwnY&+&QCa*WB+%_q4`vd*1tQ z;2p8xrtAva3D)~eS(7WYr}>-oEDh1QT%|TGbk?Fn$@8~g(JU!BeDS2deGCw`ri3%m#X6v7JRUId^WZDvB$H{wzCty zs(#G8SrdEtmh_xkp%w31eRm(SH%|rC7Q1A*c09NK!?o4fC8FBlS`!;|Ez^!#-LECl z(_Y)1yUn~Q;Opn(`^4w4SE$)s6=jFaExdhn$o9(RT-ooR=k8&3tp-glsO~X7nsD%d z_e6tanOmou`b~NiPk&ByS;w@LBXm{p?wR>q=XV;vj?6p0AjVtQxPxWu8TMeQPm?Y% zt2S7tA98uydFSUDk+*uPMQLs46!=YgOkH&@`%GhFV-~8eD@$4V`9w-7yq}h_AT)MS zhC#B?WVs7YwJpIBWjCK8R%h)3t2(=ce_P6ThrQTO|yIlu7snQ|+^tN>-u z@VeQpvripYggP(m}em9#-*JTyjgjov9a5Ud6}Tq6Ymcj#b1njXmKv) zknRDI)`^Eqj=p&(HKlsR%WoE9*X4dlc-6k1z#pN`!*p8AwON0M^loqeC+`={%R4{+ z>dzmOrSE*+xwBAu&K<2kO|uWpTNSdy64d;CS?0%4d9Gvf!HQ#Zxe}Kxl)PgpQw^D7 zUzRdSl>ObA9-~qwP$Fne1~nM?i?p|~3Gd)v=JEH;nsv+mGJNOTxGUEncklM|OyI4d zb9t?+_a8IE=WhAms5xu(;T~tu zf)daWlpBY1kH|lB@Tw%a>#M~h^&Xt#yfgDv5lduRdxzHk4!*p2Z{O|NjOAzR53Frg zf4}*Q5PS@3&Y!3wTh^TJFAmOX(KHSC&FFUK@L54NpVPW>%a5r`LR;G|60eKFGixC~ zN(0s{eD<@c;Pt*(X_r;n9UBkUGVewnd-~S9P4(NItI^f1QHxILzluD&<@bh*`)2*R z{MPKB(7(sGclcbb3Hx#LK!Pm$61AA)$JX`k-X;A-3j4jPw)4 znxL_!N8p2)s#H!?EPnOb|M5AuVymY;wlCR^S0!_*hdkrdZZVJ0)KL#C4>Wf4I`l@B zSLw>lkn(eD4?XU?%og}L+Vi-`j%l;`o3@M{r1{RaYNGxJicBKL8hQs#Lql&$j3JJ@ZV-or-+biv)U z2$y!%Yg@0BR8RTXt23{l_*+!q8J?X!rEJ=~zMwTIcDhU1X3nWMXs zb*-}-Xj7E4TIbqj9%gbnug|1}Lf1B411-VITV8%AXr}e+Z7Y-8J{$*{q?;V|cd-sOo^Y<0OQ(0Aht-NiqH+EMP{7%Z+CA(qL$AkYFxAV%K zxrCU>;?MhCen&1_^!>)LKn>%!e{=mTm3Sss*hquli05_ddHdYS+qS;HvhGmC zZS6B6=R#89tFAY_-OM)e6<3wQ=6VxpTi6Q6jh@$^Oc7?xT@Y~E=clW05Om4)*B$9I zpU>X%^YMN=ed}k1LVq}q|8;Fve&Suhvz9-C6LcoS%7SaNe}R@HcK=z~^ZFCFSb@Bc z0UXp&nd(NixmC40s4+spF$ zF3q{5KUakzh*$F=_6zV=`0 zd8a*$A4g)oRZ-JTA%l_?9AloM5p!^FN@3i2H~~#?LX(HI;G@20WBt! z$UYTuHIH@8KSx{ZS%<39HUve)&)(Zvwd<{kW%?^CS#RUTB3)LZVn)x)W>{4nSg@+- z_^Lwwul{$Yb)_C!oVWZL=Uu%$2@5~)gIsv{?UhI8=0+tk>zGYmd;aP)KE)oA)u=~aQW4m3YbspHwFxn@z?dIDRe;L{fJXcu?@-3P) zUD8;iA9Q|BFR#>Lv?3})E zmV$X8|Mto5CxRVL@cNai*_?z$AZK*`eV4z&+n;+xA5!i*$oPxzAuD%l{flq=m&xU| zGrSYHso)g5K=WSPQ-N<2FSLcJz7cu%9CV5eXd&sJcd;K^--NpR80pWUx@i&vZZgS8kqs9bu*7#qHqfHJ=Fz{L!~w ztP`^GF|_bCd}th8^xmX(l~05_xJx$U8=t1(VrP+a8hY=7gPp(yt|}Y6z;yx@xEYum zU6dWS^vo~zPK|4;TII~|an@YJxT)m2S@RvxM%$FdrY}O&53S>S0V`*zUQ{AHkQ!%GxzrQ0ORe>hdj6im31q6wmdN4*M{wGxeZ#h13ilF`;UYx zQP2Nu)zl6rVj+1lH_AeCsgux!SHu4?`JZ(Dg;U=J>>pGt4PGd(Xr5@_7B*o$ zgMNfY%mS~L=IKk%#a_AmR;8Y+v_M+N`uo8t2Ky`bzbU&?*AQ%>dT|bi`o%x8{}bC- zo_4m)ZC|s|vDr%V=qcT$Hx{&OvOSh(dn)zn<+hcx7l$m9$yEqopU3ffgGgTUyhBgS zoOK<+lX9-PygOqaUz^a*Pd z>a%b5%je};7g-nWb||&t(_Wa--_m%9%i6b6bc(u^nN!-W!#^AwFL2*J-D1MW<9nn3 zv5WE11W0iU+ShtG_x|T6VKct*ef+#!P;Ac2=Mz>-UC}q#ztN{-n)FWr@CfUp>jOHjlSty3$goa?POX*4qh740c|iC$^eN%+U-n`FlwY;?T}B zy)_)C7V|jAP6*o574WxtR*A{ci+S$r!_KD1?wIlG@>@M~Vf$^X<{#f0o2OQH;QWT% z55*a}4-02pe8spewxXHwP*qTk_}3qW$vdlsAN|-AIXQmzzlQmV(FJ$TL>_wlqjsh6 z4TYS7RYr+_SKNxd^5*R|!B2*AW)T9P+)9~lL)yh}-e#|SSoW#%xnHvN-+8-#dx6tS z>*Vw7+x3^pGez6e|FtsYyYM?=bMIB%Lg{?)}>4Cx}Lq~C#NVse^YEh zjc3MVJHw@?-@lah5%K$QswzQ9_eFp5L(jItB|Z1UZzi;)E^nI^J~74pM#9Y3u2+g5g_NeAi_1Ou|Mo+VyQ(%ikuJ{>;GL5!Aj(VJw)iYT!|b$cGmt^TfRbN$;f-3{*!ahq{v$L{E! zCA_>v=H>PW9gl>>e(Ym^buV_k@5vdLN_A{5Z`ir0cf%Rw#bR?nOSvL<`hdWc-e;^|TG!1LF{8igI?QzUxO_}Y_rf>NCyUQuD zdBeeusr7xE|P5Hl#w10cO`>|JZ zuVC1WMW_4Ua3|gkSHAiBc#V9fgtOT`r!6|Omph-nU^#u3bmuFflST;(Hq;k@+5Wqt`u7nX*XKKkZ+ zB|Y!;6ywKR4sP(@V|>hPrACR#m5aRpdvAvaCZC(n`EAne(t_P=d5x`ySXWJ3c)a;% z_sW;sj=w6}_wY+=^zU@B+pHVwLSAU(OjuU&Z65#e1vV!Q)K2`EaqZMGk%@Co9-d+n zZZuQikaUm8wa3?HuPE&Jrnzx$XlAop=~vn9Yu$dl`M`bT;r*KB8M^>jkG+>#^DgVm)l*N_#Mqh3 z$aHCm>aCM?J9YGm#cYd$^WVSM9m$P;{K!c0oa-6TvA1`&H4EfUSb47HvR#FU8mJ{x z^X^;fl@;8F)_RNQURbeCD66S7CMbA?_w>G2--inqA6O4+HbwM^i+>Z{Xm&yL)SvC!C^&s4vQpSbrpw{^{SgZY^^ zcGTZ}roJLcO8V4=Nx~NI^7Sq537I~$$UAVot|3=E&cMOqrF%p^XzV9^_M_+N=5{-u zcl*m1+_`UNVShIB&}ZWb%lr~=xAOXhs?F&JZN;qKUDC40q^0Iffm!0JV9=zwbnEYp z;5C4szp^XO&R5;@Ja3~AXlZItV)f@oYOh{?`}47H#_>O27*`)KtPq=X%h%#U9(qQyj@v$Aw1cp{#M4ppEJXR#XN$eJX$7}xmQhPSnB*t@vohjT&je-myi9% zo>wed-z)BHILHy4WYsq%d!_%~Yl$l%$3hAlintKV)i+AZgssG&aqgCdFv{*xn z_G!Ywm$u}@NEl_L%v_e@v&ZuGoO*uKyLvM!iVq&qe&u74xHs{`oY|MJ+Gw`iz8=(l zTj;2iz^7M&pA4h(+KjrmLM`SMME}2%kayq7_U<>%J9f>{3kz0nSmPEl_mGRTFk~0u z@;vr_3&|-)kH1Nn-{-L9{aT`2^Z1+Vm7tTMv6aW?a_>kzx%Lj1c8jPO7x>^X;Tdgv zl>E3A#;?hZOfeSfK z?>d#hSZ+7(OpH%&Xw=8Lcr8)=Y-P>Ax(R15*j(f3)qdEf+Oi_(;iKI8GJaF_4bu#} zx3omM?C|};erHh@=WW5GwpU`-eQ8@7wEjuo{n<&AyAE+B#yWj*irBd5MOni~m%{>^ z&L7vDoqF`-la+0!W;x#V2$}9Ntvq8@lOSkzR@u?SviaGn+tmqn%r|+yw)EYS-T8N= zrpH~@wOKY74c3TXF^Zg%!Q7fOlk2qN#8tr&FWvsCflm>Zz37mp-@C|h|M`cvm^aRI z-tV9GtZnh+f8b5EYfMcxp7)*E-+S%V0@E`Op+NvTaPXPX>f%uA`hPFE%U$l8ohZ$A z=AW^_Y0g#ci3bZnZGhyW)|MlDf}OH9LeYH1Pj?(rXq63}`9Vr^dq8oh)ZMyCsk~BG zubSW4CicX5k5Iv_@I}ARCx%w(n%g`>#81JJ_sde)MvFIF;=s znG2719y@xaB>L2jiC=^B&c#U`JurcN-8ZJ|mf37O+kb6{>#(1{h5yd9)$LFI*o6mL z^snv&ZLKw`pML3A`o9@V4jzg*>vQgm>IN?H6+wx=JedvPwjg*s?0d(>}ex%=3n3J z>HkmdDzD)GTCjV$WQciO*}sOs2PbB-wrj>}Es?el{lF-^kmG#(lei7Oq36I0sr|S6 z-sPyA&b5+P`f=RUpo%(KWLRG5V1`|s^;L^8}{qKOUQS{ z&ia$NMz8wi12c=A%RhMMak;O$H1SypZ#igpn_A1Bv?C`IRKBm&Tq=;pl|Cbg8F4JY zA)DvSB1g{CcDDGZ(+ka>N`_KJ^y=26H<_r|q4M?oXq|2D45GsvC0^SmHpr29ie z-4_{7<`!NxuKhfxOs`yiJLlkBZt0AP^M5Wo^jWcgWiYhIv{~;++mjwqX8kmtJu?gx zHNksF)>JpnUh%Tb^MRh=oukdwdLg-o{$~e=t(#WD1Db+`j!aEF^j}S5|FUJbw>Iq- zE4a?`&Z~6l>z$|g1VanKyFF&*m9I;w`p29nYcqB87Q_yEpSpWTYoosH`eR|fwD{$v zoh6oscAP(47pD|q@aFQS@~WDD9@dX z+)yyzKX>;1b62MBGYyVoecIVpI9acAtvb`CfB#okPuDqF7;$@3{NfdYdyeiul6b}D z-rV}_cUt*(W*U9|aAMD-O_O)_v33+QOj6K1soEU2=vMrd&F3Z;)mtu!_pWW(d(uDC z{+_`f*40is=cR8rHC4xWUD5s+yJqWzC51~?KXDQI=6gk`?8WjsoB00sS(}tj(*j3?tkz}=Y}ZTJKa@kGDh{IOx`vG<4ebwnNZd%!o7*XVAhSnBVKRf-{x zlg*6|{?mICy`q1^-Me)$tl71*r7di>O+LIMwLtoe$+?oyIUa}hbrx^WUlz`P?KPcS|L~4;?_{3ctT-_DSef8kwX84O ziug6|1X?fA4_M-&yDhdmz^?sm{-jSHiAF(Js;7Hf9lQI~>WuzU6)E*yr~H;EKb6b! z6WF=r@nNHUiKRP}raWuXNju|aDp#<0W32D4&RL1qdGBm(-0gKMs7d6fGV9}eN$PhJ z-w0G2se9=qd!Cxyk~ll%R7r6XZ_KH0{Zn7|ooy=7aM{&3JLsEB;(g8T$SFswG`b_F zxc+Q@%2~I&+wykKjK~~SAU>h z>1a%-`lKayT+U8Zx^s{D(t(E?_evi-o@^Ruzs)9LPOq%icFF1+=7HY%`PUZ6YTiE+ zYbzyTBgZRq?D*y5hFkr19KNw&mr?TXLmy+W@cgd0Q=#-)e&^NQyt#E5Flt z*Xkw3HxgsE=El085^nW8^+tW}jirfZQYP=ORrdznQrCQ@wH|aNYoAE$-Zku7zDZp< zm2-?MwtUfdmv?^xyprMdC9KAM@iEHw)pjvo(-*CK zWN|$!=-tA!8@kQWm$wzAe{)cIQpy!~G=X2?P4-IDH-@eIb|xn_JC)1tbZ)#b;XKH= zTz${V1qPlo|1Md4MNjPI1+F>0X=@H&+9PcJNR%Dyw_VvSoS zbNkbtYVQ`oV|>!Rx#bnYTU&C&T}+=wr#5?)KNa3C+q<=1#_Rpo(#qYPRh+x!@059D z1u4p|vVPsjSI&07;Qf<#`ib#gd(XT*$GNSz$@I$9u$Sv5t@#^y<9mSjjWQ>@eX$=| zuU1cA_%y(+Tl(~&gm&X*&SQMsy{lVm`M0*r)!tE@+{{*9S2s=O_Q%r;-tLlm_)qOk z^$OLTa&_gi>sd0GW%%zzaC;_|ehp5yd|bBB?!^0r*BtYfI)w@DzOmxzmIqlU4gT?N z-{qCObCY8o_tuu!+;69~f(oz62WX|F9*kLXBbK2#rjhIVa;MbNoLCc0f01KTUcS4u za-_s~qS$(+Ie40jc$g{6Ho90ypy<2!pS-$#Eu{anXDHg9jQY_B*IOmPQ z!=2r>Yx`?reE$C4FnQjJZSy!Uzqy;ZWaB}t#2kg9AK{)my=KI46u&R(^y6Q6>)ykC zj$Ln3V!94`JoX4b+4;rkhV2#a8=nlis;A4nc%~=(N;%ANVNB`e$8WiN=1#(HztH3@%goY1|pP`RGJa$o#D zcFik%hvSQHYh3l#+5LCw^Vlo(g5T1nN^bupduhjosZ#%QZ~T`s%{%sf?c=KWP2YLdNBfx9?{!?b`%mZX@QRmvC!AM& zH_?m#hwPQiB{qQ)@4Rjw+4gqVIk)%<^DWnB%It8ooBn9ssi@$03y*nhbd9b)5Ej*3 zWo4Ayy3YDywNm*%jiu*mt>3E6)8H{ZIz@HPXPH$Z#@CX!?leAeS^fMnbbK1mFD07Cu`k0(eCWq`Q=LD+=qLe-sX&lIGKByW7i5lQOjzREtp)yzr%AU`<*3snB|rlWZZt<(Vkaw!OExN zh1-%JXWva;V&i$k-v4G>cCp(tf$PuM)|lk+6zzTZM9N{$Z8Uo>sQ_NFPXgMFr{H_tlSy4&=S*Fw=dVQFsp_npsfC~cCQd9JIq`f-m@ zIh%5?a_rJl(6FuJx~E@ww}+kR{d)PX>ywD=^^R-LT(e(13Dh3gc2*<%!b`v2{_~%X zB#BStRg;ho2~YcD_NIG<>YJ#8vC`5J8*`a*e}(Qao{{k<_{R5u;=I%Hk-slY+OIBW zkhJ8ayuj~62?mF6Bre+++pxQHR$@Nmowd!ob017|7pi^u_ju5;n7fB&O;P9kEgrP( z08ete?6LnrLH}mWN<1wZsD4{`$5S7x7QJ^n*5A6R_)3d^k?Nc5m4e^C`_AjE=KsjQ zqxM6=Qq#vC;h*m=v3%3La^sJeJBtp~K8ssgl4ozVU0(amXR9^tR~WxnM#{0@bLX=5 zk4$g&D^KgO-FDFDu}^s3A2ZGC0gvb8->DN1kxto_ePW}toRc;GLfPQ!zpgFa<9$lF z_2Gsb;b{M7*Y5GX3R`sR{p*>#r9@lWpLVa@fB4*N8~ra+C%iX4BYuW!fA}pm@b3$F(*Hq_y@IEZ=y*c1Mr0=6Mk{&Eofe1GeSntp5&5l|Hrj|zw9;r^DBS; zRNft&ckH#AKQ_o7`xfgua+-NHM=f5-O=9NMj6ErOSg#PSxU-7vD8 z>yvinl&qn2yLIctV-we13KGv-bWGv8)8D@6uD1eFFV~&3yk=yVF!Oi%8bR~G`E6^B zPf3^TGJaffX68K3omG}PCUxT9T(4~6`eId_zjtHfRfm%?~3eD_KG?{rFRM*3q$c)R}d zyG3@qx5J{qDcD?2MKsT#Ok>@hAGtTg13ybO7W}?>TPkITaq{PT&!+qqxmCb%^_|p) zOFQPNKb?4}pw~ft`P?&m{~j~C{BM!k+MqucHT+xa_#E!dng8qiS*QPb-d6Lb$Q4{) zziY)uJ^2)Ya^`0@Z!FwV^myHO&G(C@>96(>S-yHhUu*S> zo3~dgKh1PM73_Q}_-KTYMA~D%+djpo)y}8R&gJAS5w|Ox zz50a<$c3BrN|xnU&Np0c{LbBcXn z8ard~HOVKFnzk)_(|KrzZE)&bUMu#s((Jo}BP8AaDr$ZYnBU&Zw$JgN^ul+`BJbri z?{T`Ds@679BITc^roX^3<@@^{-r4FgvGqc4=}eQnX6rEDW~+?Y7eBmS=w9K8{^rrF zGryp^{G;@BzN-=DA$;asx}Y>&+_Xh@@?|NLUCP_fnm3Cc<1?3f{~EL~Cw!xsSXTCh zmwEq>+v z>MeAn+1E<{R@mP@Ywz0U^UbZd_3jp2JAdBM51C75u72R+ogeSrJ1Ojt+4ZSHw_?Jd zJX~~A;&*YoNnXj*V{+eYuUKSEpYe1{cEI}2>|4rL-23gWDc!p@m#1Y%VbG%cU#k`w zEYsQglgV+TwoU81D;5v(CLJ!$i?h~Rxz=;%G^y)qUVfid8zw1NDU=qdr(Iki`8@dD z+0Kfu50kR4u|C~)bHyFDskeKC*JW8PDO|kz`iA!l?YM7mn>=edW8vltMQfzp+B=Yxk_DHLTa@rSOHl=u)&dA6S zP}kDl#`hUik3@gte*3-qo6^zeTI$c`&xB4nR%-rHAu+~cd&kw°LZcI;H)U*Bhx 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

;~ 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 JRbBnvxB$u-+KvDK literal 0 HcmV?d00001 diff --git a/doc/system.txt b/doc/system.txt new file mode 100644 index 000000000..a3ae86055 --- /dev/null +++ b/doc/system.txt @@ -0,0 +1,276 @@ + +This is outdated. + +--- + +INTRODUCTION TO THE proxmark3 +============================= + +The proxmark3 device is designed to manipulate RFID tags in a number of +different ways. For example, a proxmark3 can: + + * read a low-frequency (~100 kHz) or high-frequency (13.56 MHz) tag, + including the ISO-standard tags; standards that require + bidirectional communication between the reader and the tag are + not a problem + + * emulate a low- or high-frequency tag, in a way very similar to the + way that a real tag behaves (e.g., it derives its timing from the + incident carrier) + + * eavesdrop on the signals exchanged between another reader and tag + + * measure the resonant frequency of an antenna, to a certain extent + (this is a convenience when building a test setup for the previous + three functions) + +The proxmark3 may be thought of as a direct-sampling software radio. +There is some complication, though, because of the usual dynamic range +issue in dealing with signals in RFID systems (large signal due to +the reader, small signal due to the tag). Some analog processing is +therefore used to fix this before the signal is digitized. (Although, +it is possible to digitize the signal from the antenna directly, with +appropriate population options. It is just not usually a good idea.) + +SYSTEM ARCHITECTURE +=================== + +The ANTENNA sends and receives signals over the air. It is external to +the board; it connects through SV2. Separate pins on the connector are +used for the low- and high-frequency antennas, and the analog receive +paths are separate. The antennas are inductive loops, which are resonated +by on-board capacitors. + +On the transmit side, the antennas are excited by large numbers of +paralleled bus driver buffers. By tri-stating some of the buffers, it +is possible to vary the transmit strength. This may be used to generate +a modulated carrier. The buffers are driven by signals from the FPGA, +as are the output enables. The antennas are excited as series circuits, +which permits a large input power for a relatively small input voltage. + +By driving all of the buffers low, it is possible to make the antenna +look to the receive path like a parallel LC circuit; this provides a +high-voltage output signal. This is typically what will be done when we +are not actively transmitting a carrier (i.e., behaving as a reader). + +On the receive side, there are two possibilities, which are selected by +RLY1. A mechanical relay is used, because the signal from the antenna is +likely to be more positive or negative than the highest or lowest supply +voltages on-board. In the usual case (PEAK-DETECTED mode), the received +signal is peak-detected by an analog circuit, then filtered slightly, +and then digitized by the ADC. This is the case for both the low- and +high-frequency paths, although the details of the circuits for the +two cases are somewhat different. This receive path would typically +be selected when the device is behaving as a reader, or when it is +eavesdropping at close range. + +It is also possible to digitize the signal from the antenna directly (RAW +mode), after passing it through a gain stage. This is more likely to be +useful in reading signals at long range, but the available dynamic range +will be poor, since it is limited by the 8-bit A/D. These modes would be +very appropriate, for example, for the heavily-discussed attacks in which +a tag's ID is learned from the data broadcast by a reader performing an +anticollision loop, because there is no dynamic range problem there. It +would also be possible to program the proxmark3 to receive broadcast AM +radio, with certain changes in component values. + +In either case, an analog signal is digitized by the ADC (IC8), and +from there goes in to the FPGA (IC1). The FPGA is big enough that it +can perform DSP operations itself. For some high-frequency standards, +the subcarriers are fast enough that it would be inconvenient to do all +the math on a general-purpose CPU. The FPGA can therefore correlate for +the desired signal itself, and simply report the total to the ARM. For +low-frequency tags, it probably makes sense just to pass data straight +through to the ARM. + +The FPGA communicates with the ARM through either its SPI port (the ARM +is the master) or its generic synchronous serial port (again, the ARM +is the master). The ARM connects to the outside world over USB. + +DETAILS: POWER DISTRIBUTION +=========================== + +I make a half-hearted attempt to meet the USB power specs; this adds a +bit of complexity. I have not made measurements to determine how close +I come to succeeding, but I think that the suspend current might turn +out to be a pain. + +The +3V3 rail is always powered, whenever we are plugged in to USB. This +is generated by an LDO, which burns a quiescent current of 150 uA +(typical) already. The only thing powered from the +3V3 rail is the ARM, +which can presumably do smart power control when we are in suspend. + +The ARM generates two signals to switch power to the rest of the board: +FPGA_ON, and NVDD_ON. When NVDD_ON goes low, the Vdd rail comes up to +about five volts (the filtered-but-unregulated USB voltage). This powers +most of the analog circuitry, including the ADC and all of the opamps +and comparators in the receive path, and the coil drivers as well. Vdd +also feeds the +3V3-FPGA and +2v5 regulators, which power only the +FPGA. These regulators are enabled by FPGA_ON, so the FPGA is powered +only when NVDD_ON is asserted low, and FPGA_ON is asserted high. + +DETAILS: FPGA +============= + +The FPGA is a Spartan-II. This is a little bit old, but it is widely +available, inexpensive, and five-volt tolerant. For development, the FPGA +is configured over JTAG (SV5). In operation, the FPGA is configured in +slave serial mode by the ARM, from a bitstream stored in the ARM's flash. + +Power to the FPGA is managed by regulators IC13 and IC12, both of which +have shutdown. These generate the FPGA's VCCO (+3v3) and VCCINT (+2v5) +supplies. I am a little bit worried about the power-on surge, since we +run off USB. At the very minimum, the FPGA should not get power until +we have enumerated and requested the full 500 mA available from USB. The +large electrolytic capacitors C37 and C38 will presumably help with this. + +The logic is written in Verilog, of course for webpack. I have structured +the FPGA in terms of `major modes:' the FPGA's `major mode' determines +which of several modules is connected to the FPGA's I/O pins. A separate +module is used for each of the FPGA's function; for example, there is +now a module to read a 125 kHz tag, simulate a 125 kHz tag, transmit to +an ISO 15693 tag, and receive from an ISO 15693 tag. + +DETAILS: ANALOG RECEIVE PATH +============================ + +For `slow' signals, I use an MCP6294 opamp. This has a GBW of 10 MHz, +which is more than enough for the low-frequency stuff, and enough for +all of the subcarrier frequencies that I know of at high frequency. In +practice, the `slow' signals are all the signals following the peak +detector. These signals are usually centred around the generated +voltage Vmid. + +For `fast' signals, I use an AD8052. This is a very fast voltage-feedback +amplifier (~100 MHz GBW). I use it immediately after the antenna for +both the low- and high-frequency cases, as a sort of an ugly LNA. It is +not optimal, but it certainly made the design easy. + +An ordinary CD4066 is used to multiplex the four possible signals +(low/high frequency paths, RAW/PEAK-DETECTED). There is a potential +problem at startup, when the ARM is in reset; there are pull-ups on the +lines that control the mux, so all of the switches turn on. This shorts +the four opamp outputs together through the on-resistance of the switch. +All four outputs float to the same DC voltage with no signal, however, +and the on-resistance of the switches is fairly large, so I don't think +that will be a problem in practice. + +Comparators are used to generate clock signals when the device is +emulating a tag. These clock signals are generated from the signal on the +antenna, and therefore from the signal transmitted by the reader. This +allows us to clock ourselves off the reader, just like a real tag would. +These signals go in to the FPGA. There is a potential problem when the +FPGA is powered down; these outputs might go high and try to power the +FPGA through the protection diodes. My present solution to this is a +couple of resistors, which is not very elegeant. + +The high-frequency peak-detected receive path contains population options +for many features that I do not currently use. A lot of these are just +me guessing that if I provide options for different series and shunt +passives, perhaps it will come in handy in some way. The Zener diodes D10 +and D11 are optional, but may protect the front end from an overvoltage +(which will fry the peak detector diodes) when the `simulated tag' +is read by a powerful reader. + +DETAILS: ANALOG TRANSMIT PATH +============================= + +The coil drivers are just ACT244 bus buffers. I parallel eight of them +for each antenna (eight for the high-frequency antenna, eight for the +low-frequency antenna). This should easily provide a hundred milliamps +coil drive or so, which is more than enough for anything that I imagine +doing with the device. The drivers hit the coil with a square wave +voltage, however, which means that it is only the bandpass filter effect +of a resonant antenna that suppresses the odd harmonics. In practice it +would probably take heroic efforts (high antenna Q) to meet the FCC/CE +harmonic specs; and in practice no one cares. + +The tx strength, given good antenna tuning, is determined by the series +resistors. Choose the ratios to stay within the rated current of the +buffers, and to achieve the desired power ratios by enabling or disabling +nOEs for the desired modulation index. It is useful to populate one of the +resistors as a high value (~10k) for the simulated tag modes; this allows +us to look at the incident carrier without loading the reader very much. + +DETAILS: ARM +============ + +Atmel makes a number of pin-compatible ARMs, with slightly different +peripherals, and different amounts of flash and RAM. It is necessary +to choose a device with enough flash not just for the ARM's program, +but also for the FPGA image (which is loaded by the ARM). + +The ARM is responsible for programming the FPGA. It also supplies a +clock to the FPGA (although the FPGA clock can also run off the 13.56 +MHz clock not used for anything else, which is obviously asynchronous +to anything in the ARM). + +It is necessary to use JTAG to bring the ARM for the first time; at +that point you can load a bootrom, and subsequently load new software +over USB. It might be possible to use the ARM's pre-loaded bootloader +(see datasheet) instead of JTAG, but I wanted the JTAG anyways for +debugging, so I did not bother. I used a Wiggler clone, with Macraigor's +OCD Commander. More expensive tools would work as well. + +USB SOFTWARE +============ + +At present I enumerate as an HID device. This saves me writing a driver, +but it forces me to do interrupt transfers for everything. This limits +speed and is not very elegant. A real USB driver would be nice, maybe +even one that could do stuff like going isochronous to stream samples +from the A/D for processing on the PC. + +PRETENDING TO BE A TAG +====================== + +It is not possible, with the given topology, to open-circuit the antenna +entirely and still look at the signal received on it. The simulated tag +modes must therefore switch between slight loading and heavy loading, +not open- and short-circuts across the antenna, evening though they do +not depend upon the incident carrier for power (just timing information). + +RECEIVING SIGNAL STRAIGHT FROM THE ANTENNAS +=========================================== + +There is a path straight from the antenna to the A/D, bypassing the peak +detector assembly. This goes through a gain stage (just a fast voltage +feedback opamp), and from there straight in to the mux. + +It is necessary to energize the relay to connect these paths. If the +coil is driven (as if to excite and read a tag) while these paths are +connected, then damage will probably result. Most likely the opamp +will fry. + +READING A TAG +============= + +The tag is excited by a carrier transmitted by the reader. This is +generated by IC9 and IC10, using some combination of buffers. The transmit +power is determined by selecting the right combination of PWR_OEx pins; +drive more of them low for more power. This can be used to modulate the +transmitted signal, and thus send information to the tag. + +The received signal from the antenna is first peak-detected, and then +high-pass filtered to reject the unmodulated carrier. The signal is +amplified a bit, and goes in to the A/D mux from there. The A/D is +controlled by the FPGA. For 13.56 MHz tags, it is easiest to do everything +synchronous to the 13.56 MHz carrier. + +INTERFACE FROM THE ARM TO THE FPGA +================================== + +The FPGA and the ARM can communicate in two main ways: using the ARM's +general-purpose synchronous serial port (the SSP), or using the ARM's +SPI port. The SPI port is used to configure the FPGA. The ARM writes a +configuration word to the FPGA, which determines what operation will +be performed (e.g. read 13.56 MHz vs. read 125 kHz vs. read 134 kHz +vs...). The SPI is used exclusively for configuration. + +The SSP is used for actual data sent over the air. The ARM's SSP can +work in slave mode, which means that we can send the data using clocks +generated by the FPGA (either from the PCK0 clock, which the ARM itself +supplies, or from the 13.56 MHz clock, which is certainly not going to +be synchronous to anything in the ARM), which saves synchronizing logic +in the FPGA. The SSP is bi-directional and full-duplex. + diff --git a/fpga/fpga.mpf b/fpga/fpga.mpf new file mode 100644 index 000000000..4a281bca6 --- /dev/null +++ b/fpga/fpga.mpf @@ -0,0 +1,239 @@ +; +; Copyright Model Technology, a Mentor Graphics +; Corporation company 2003, - All rights reserved. +; +[Library] +std = $MODEL_TECH/../std +ieee = $MODEL_TECH/../ieee +verilog = $MODEL_TECH/../verilog +vital2000 = $MODEL_TECH/../vital2000 +std_developerskit = $MODEL_TECH/../std_developerskit +synopsys = $MODEL_TECH/../synopsys +modelsim_lib = $MODEL_TECH/../modelsim_lib + + +; VHDL Section +unisim = $MODEL_TECH/../xilinx/vhdl/unisim +simprim = $MODEL_TECH/../xilinx/vhdl/simprim +xilinxcorelib = $MODEL_TECH/../xilinx/vhdl/xilinxcorelib +aim = $MODEL_TECH/../xilinx/vhdl/aim +pls = $MODEL_TECH/../xilinx/vhdl/pls +cpld = $MODEL_TECH/../xilinx/vhdl/cpld + +; Verilog Section +unisims_ver = $MODEL_TECH/../xilinx/verilog/unisims_ver +uni9000_ver = $MODEL_TECH/../xilinx/verilog/uni9000_ver +simprims_ver = $MODEL_TECH/../xilinx/verilog/simprims_ver +xilinxcorelib_ver = $MODEL_TECH/../xilinx/verilog/xilinxcorelib_ver +aim_ver = $MODEL_TECH/../xilinx/verilog/aim_ver +cpld_ver = $MODEL_TECH/../xilinx/verilog/cpld_ver + +work = work +[vcom] +; Turn on VHDL-1993 as the default. Normally is off. +VHDL93 = 1 + +; Show source line containing error. Default is off. +; Show_source = 1 + +; Turn off unbound-component warnings. Default is on. +; Show_Warning1 = 0 + +; Turn off process-without-a-wait-statement warnings. Default is on. +; Show_Warning2 = 0 + +; Turn off null-range warnings. Default is on. +; Show_Warning3 = 0 + +; Turn off no-space-in-time-literal warnings. Default is on. +; Show_Warning4 = 0 + +; Turn off multiple-drivers-on-unresolved-signal warnings. Default is on. +; Show_Warning5 = 0 + +; Turn off optimization for IEEE std_logic_1164 package. Default is on. +; Optimize_1164 = 0 + +; Turn on resolving of ambiguous function overloading in favor of the +; "explicit" function declaration (not the one automatically created by +; the compiler for each type declaration). Default is off. + Explicit = 1 + +; Turn off VITAL compliance checking. Default is checking on. +; NoVitalCheck = 1 + +; Ignore VITAL compliance checking errors. Default is to not ignore. +; IgnoreVitalErrors = 1 + +; Turn off VITAL compliance checking warnings. Default is to show warnings. +; Show_VitalChecksWarnings = false + +; Turn off "loading..." messages. Default is messages on. +; Quiet = 1 + +; Turn on some limited synthesis rule compliance checking. Checks only: +; -- signals used (read) by a process must be in the sensitivity list +; CheckSynthesis = 1 + +[vlog] + +; Turn off "loading..." messages. Default is messages on. +; Quiet = 1 + +; Turn on Verilog hazard checking (order-dependent accessing of global vars). +; Default is off. +; Hazard = 1 + +; Turn on converting regular Verilog identifiers to uppercase. Allows case +; insensitivity for module names. Default is no conversion. +; UpCase = 1 + +; Turns on incremental compilation of modules +; Incremental = 1 + +[vsim] +; Simulator resolution +; Set to fs, ps, ns, us, ms, or sec with optional prefix of 1, 10, or 100. +Resolution = ps + +; User time unit for run commands +; Set to default, fs, ps, ns, us, ms, or sec. The default is to use the +; unit specified for Resolution. For example, if Resolution is 100ps, +; then UserTimeUnit defaults to ps. +UserTimeUnit = default + +; Default run length +RunLength = 100 + +; Maximum iterations that can be run without advancing simulation time +IterationLimit = 5000 + +; Directive to license manager: +; vhdl Immediately reserve a VHDL license +; vlog Immediately reserve a Verilog license +; plus Immediately reserve a VHDL and Verilog license +; nomgc Do not look for Mentor Graphics Licenses +; nomti Do not look for Model Technology Licenses +; noqueue Do not wait in the license queue when a license isn't available +; License = plus + +; Stop the simulator after an assertion message +; 0 = Note 1 = Warning 2 = Error 3 = Failure 4 = Fatal +BreakOnAssertion = 3 + +; Assertion Message Format +; %S - Severity Level +; %R - Report Message +; %T - Time of assertion +; %D - Delta +; %I - Instance or Region pathname (if available) +; %% - print '%' character +; AssertionFormat = "** %S: %R\n Timf: %T Iteration: %D%I\n" + +; Assertion File - alternate file for storing assertion messages +; AssertFile = assert.log + +; Default radix for all windows and commands... +; Set to symbolic, ascii, binary, octal, decimal, hex, unsigned +DefaultRadix = symbolic + +; VSIM Startup command +; Startup = do startup.do + +; File for saving command transcript +TranscriptFile = transcript + +; File for saving command history +;CommandHistory = cmdhist.log + +; Specify whether paths in simulator commands should be described +; in VHDL or Verilog format. For VHDL, PathSeparator = / +; for Verilog, PathSeparator = . +PathSeparator = / + +; Specify the dataset separator for fully rooted contexts. +; The default is ':'. For example, sim:/top +; Must not be the same character as PathSeparator. +DatasetSeparator = : + +; Disable assertion messages +; IgnoreNote = 1 +; IgnoreWarning = 1 +; IgnoreError = 1 +; IgnoreFailure = 1 + +; Default force kind. May be freeze, drive, or deposit +; or in other terms, fixed, wired or charged. +; DefaultForceKind = freeze + +; If zero, open files when elaborated +; else open files on first read or write +; DelayFileOpen = 0 + +; Control VHDL files opened for write +; 0 = Buffered, 1 = Unbuffered +UnbufferedOutput = 0 + +; Control number of VHDL files open concurrently +; This number should always be less then the +; current ulimit setting for max file descriptors +; 0 = unlimited +ConcurrentFileLimit = 40 + +; This controls the number of hierarchical regions displayed as +; part of a signal name shown in the waveform window. The default +; value or a value of zero tells VSIM to display the full name. +; WaveSignalNameWidth = 0 + +; Turn off warnings from the std_logic_arith, std_logic_unsigned +; and std_logic_signed packages. +; StdArithNoWarnings = 1 + +; Turn off warnings from the IEEE numeric_std and numeric_bit +; packages. +; NumericStdNoWarnings = 1 + +; Control the format of a generate statement label. Don't quote it. +; GenerateFormat = %s__%d + +; Specify whether checkpoint files should be compressed. +; The default is to be compressed. +; CheckpointCompressMode = 0 + +; List of dynamically loaded objects for Verilog PLI applications +; Veriuser = veriuser.sl + +[lmc] +[Project] +Project_Version = 5 +Project_DefaultLib = work +Project_SortMethod = unused +Project_Files_Count = 13 +Project_File_0 = G:/RFID/Hardware/Proxmark3/Sources/prox_work/fpga/fpga_tb.v +Project_File_P_0 = vlog_protect 0 file_type Verilog group_id 0 vlog_1995compat 0 vlog_nodebug 0 folder {Top Level} vlog_noload 0 last_compile 1179836462 vlog_disableopt 0 vlog_hazard 0 vlog_showsource 0 ood 0 vlog_options {} vlog_upper 0 compile_to work compile_order 2 dont_compile 0 +Project_File_1 = G:/RFID/Hardware/Proxmark3/Sources/prox_work/fpga/hi_simulate.v +Project_File_P_1 = vlog_protect 0 file_type Verilog group_id 0 vlog_1995compat 0 vlog_nodebug 0 folder {Top Level} vlog_noload 0 last_compile 1225963633 vlog_disableopt 0 vlog_hazard 0 vlog_showsource 0 ood 0 compile_to work vlog_upper 0 vlog_options {} compile_order 6 dont_compile 0 +Project_File_2 = G:/RFID/Hardware/Proxmark3/Sources/prox_work/fpga/testbed_hi_simulate.v +Project_File_P_2 = vlog_protect 0 file_type Verilog group_id 0 vlog_1995compat 0 vlog_nodebug 0 folder {Top Level} vlog_noload 0 last_compile 1225964050 vlog_disableopt 0 vlog_hazard 0 vlog_showsource 0 ood 0 compile_to work vlog_upper 0 vlog_options {} compile_order 12 dont_compile 0 +Project_File_3 = G:/RFID/Hardware/Proxmark3/Sources/prox_work/fpga/fpga.v +Project_File_P_3 = vlog_protect 0 file_type Verilog group_id 0 vlog_1995compat 0 vlog_nodebug 0 folder {Top Level} vlog_noload 0 last_compile 1207888760 vlog_disableopt 0 vlog_hazard 0 vlog_showsource 0 ood 0 vlog_options {} vlog_upper 0 compile_to work compile_order 1 dont_compile 0 +Project_File_4 = G:/RFID/Hardware/Proxmark3/Sources/prox_work/fpga/hi_read_tx.v +Project_File_P_4 = vlog_protect 0 file_type Verilog group_id 0 vlog_1995compat 0 vlog_nodebug 0 folder {Top Level} vlog_noload 0 last_compile 1225960972 vlog_disableopt 0 vlog_hazard 0 vlog_showsource 0 ood 0 vlog_options {} vlog_upper 0 compile_to work compile_order 5 dont_compile 0 +Project_File_5 = G:/RFID/Hardware/Proxmark3/Sources/prox_work/fpga/testbed_hi_read_tx.v +Project_File_P_5 = vlog_protect 0 file_type Verilog group_id 0 vlog_1995compat 0 vlog_nodebug 0 folder {Top Level} vlog_noload 0 last_compile 1225962515 vlog_disableopt 0 vlog_hazard 0 vlog_showsource 0 ood 0 vlog_options {} vlog_upper 0 compile_to work compile_order 11 dont_compile 0 +Project_File_6 = G:/RFID/Hardware/Proxmark3/Sources/prox_work/fpga/hi_iso14443a.v +Project_File_P_6 = vlog_protect 0 file_type Verilog group_id 0 vlog_1995compat 0 vlog_nodebug 0 folder {Top Level} vlog_noload 0 last_compile 1207889732 vlog_disableopt 0 vlog_hazard 0 vlog_showsource 0 ood 0 vlog_options {} vlog_upper 0 compile_to work compile_order 3 dont_compile 0 +Project_File_7 = G:/RFID/Hardware/Proxmark3/Sources/prox_work/fpga/lo_simulate.v +Project_File_P_7 = vlog_protect 0 file_type Verilog group_id 0 vlog_1995compat 0 vlog_nodebug 0 folder {Top Level} vlog_noload 0 last_compile 1179836462 vlog_disableopt 0 vlog_hazard 0 vlog_showsource 0 ood 0 vlog_options {} vlog_upper 0 compile_to work compile_order 8 dont_compile 0 +Project_File_8 = G:/RFID/Hardware/Proxmark3/Sources/prox_work/fpga/lo_read.v +Project_File_P_8 = vlog_protect 0 file_type Verilog group_id 0 vlog_1995compat 0 vlog_nodebug 0 folder {Top Level} vlog_noload 0 last_compile 1225797126 vlog_disableopt 0 vlog_hazard 0 vlog_showsource 0 ood 0 vlog_options {} vlog_upper 0 compile_to work compile_order 7 dont_compile 0 +Project_File_9 = G:/RFID/Hardware/Proxmark3/Sources/prox_work/fpga/util.v +Project_File_P_9 = vlog_protect 0 file_type Verilog group_id 0 vlog_1995compat 0 vlog_nodebug 0 folder {Top Level} vlog_noload 0 last_compile 1179836462 vlog_disableopt 0 vlog_hazard 0 vlog_showsource 0 ood 0 vlog_options {} vlog_upper 0 compile_to work compile_order 0 dont_compile 0 +Project_File_10 = G:/RFID/Hardware/Proxmark3/Sources/prox_work/fpga/testbed_lo_read.v +Project_File_P_10 = vlog_protect 0 file_type Verilog group_id 0 vlog_1995compat 0 vlog_nodebug 0 folder {Top Level} vlog_noload 0 last_compile 1225960239 vlog_disableopt 0 vlog_hazard 0 vlog_showsource 0 ood 0 vlog_options {} vlog_upper 0 compile_to work compile_order 9 dont_compile 0 +Project_File_11 = G:/RFID/Hardware/Proxmark3/Sources/prox_work/fpga/testbed_lo_simulate.v +Project_File_P_11 = vlog_protect 0 file_type Verilog group_id 0 vlog_1995compat 0 vlog_nodebug 0 folder {Top Level} vlog_noload 0 last_compile 1225960231 vlog_disableopt 0 vlog_hazard 0 vlog_showsource 0 ood 0 vlog_options {} vlog_upper 0 compile_to work compile_order 10 dont_compile 0 +Project_File_12 = G:/RFID/Hardware/Proxmark3/Sources/prox_work/fpga/hi_read_rx_xcorr.v +Project_File_P_12 = vlog_protect 0 file_type Verilog group_id 0 vlog_1995compat 0 vlog_nodebug 0 folder {Top Level} vlog_noload 0 last_compile 1179836462 vlog_disableopt 0 vlog_hazard 0 vlog_showsource 0 ood 0 vlog_options {} vlog_upper 0 compile_to work compile_order 4 dont_compile 0 +Project_Sim_Count = 0 +Project_Folder_Count = 0 diff --git a/fpga/fpga.ucf b/fpga/fpga.ucf new file mode 100644 index 000000000..bf0d40bc3 --- /dev/null +++ b/fpga/fpga.ucf @@ -0,0 +1,41 @@ +# See the schematic for the pin assignment. + +NET "adc_d<0>" LOC = "P62" ; +NET "adc_d<1>" LOC = "P60" ; +NET "adc_d<2>" LOC = "P58" ; +NET "adc_d<3>" LOC = "P57" ; +NET "adc_d<4>" LOC = "P56" ; +NET "adc_d<5>" LOC = "P55" ; +NET "adc_d<6>" LOC = "P54" ; +NET "adc_d<7>" LOC = "P53" ; +#NET "cross_hi" LOC = "P88" ; +#NET "miso" LOC = "P40" ; +#PACE: Start of Constraints generated by PACE + +#PACE: Start of PACE I/O Pin Assignments +NET "adc_clk" LOC = "P46" ; +NET "adc_noe" LOC = "P47" ; +NET "ck_1356meg" LOC = "P91" ; +NET "ck_1356megb" LOC = "P93" ; +NET "cross_lo" LOC = "P87" ; +NET "dbg" LOC = "P22" ; +NET "mosi" LOC = "P43" ; +NET "ncs" LOC = "P44" ; +NET "pck0" LOC = "P36" ; +NET "pwr_hi" LOC = "P80" ; +NET "pwr_lo" LOC = "P81" ; +NET "pwr_oe1" LOC = "P82" ; +NET "pwr_oe2" LOC = "P83" ; +NET "pwr_oe3" LOC = "P84" ; +NET "pwr_oe4" LOC = "P86" ; +NET "spck" LOC = "P39" ; +NET "ssp_clk" LOC = "P71" ; +NET "ssp_din" LOC = "P32" ; +NET "ssp_dout" LOC = "P34" ; +NET "ssp_frame" LOC = "P31" ; + +#PACE: Start of PACE Area Constraints + +#PACE: Start of PACE Prohibit Constraints + +#PACE: End of Constraints generated by PACE diff --git a/fpga/fpga.v b/fpga/fpga.v new file mode 100644 index 000000000..cbebc3955 --- /dev/null +++ b/fpga/fpga.v @@ -0,0 +1,190 @@ +//----------------------------------------------------------------------------- +// The FPGA is responsible for interfacing between the A/D, the coil drivers, +// and the ARM. In the low-frequency modes it passes the data straight +// through, so that the ARM gets raw A/D samples over the SSP. In the high- +// frequency modes, the FPGA might perform some demodulation first, to +// reduce the amount of data that we must send to the ARM. +// +// I am not really an FPGA/ASIC designer, so I am sure that a lot of this +// could be improved. +// +// Jonathan Westhues, March 2006 +// Added ISO14443-A support by Gerhard de Koning Gans, April 2008 +//----------------------------------------------------------------------------- + +`include "lo_read.v" +`include "lo_simulate.v" +`include "hi_read_tx.v" +`include "hi_read_rx_xcorr.v" +`include "hi_simulate.v" +`include "hi_iso14443a.v" +`include "util.v" + +module fpga( + spck, miso, mosi, ncs, + pck0i, ck_1356meg, ck_1356megb, + pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, + adc_d, adc_clk, adc_noe, + ssp_frame, ssp_din, ssp_dout, ssp_clk, + cross_hi, cross_lo, + dbg +); + input spck, mosi, ncs; + output miso; + input pck0i, ck_1356meg, ck_1356megb; + output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; + input [7:0] adc_d; + output adc_clk, adc_noe; + input ssp_dout; + output ssp_frame, ssp_din, ssp_clk; + input cross_hi, cross_lo; + output dbg; + + IBUFG #(.IOSTANDARD("DEFAULT") ) pck0b( + .O(pck0), + .I(pck0i) + ); +//assign pck0 = pck0i; +//----------------------------------------------------------------------------- +// The SPI receiver. This sets up the configuration word, which the rest of +// the logic looks at to determine how to connect the A/D and the coil +// drivers (i.e., which section gets it). Also assign some symbolic names +// to the configuration bits, for use below. +//----------------------------------------------------------------------------- + +reg [7:0] conf_word_shift; +reg [7:0] conf_word; + +// We switch modes between transmitting to the 13.56 MHz tag and receiving +// from it, which means that we must make sure that we can do so without +// glitching, or else we will glitch the transmitted carrier. +always @(posedge ncs) +begin + conf_word <= conf_word_shift; +end + +always @(posedge spck) +begin + if(~ncs) + begin + conf_word_shift[7:1] <= conf_word_shift[6:0]; + conf_word_shift[0] <= mosi; + end +end + +wire [2:0] major_mode; +assign major_mode = conf_word[7:5]; + +// For the low-frequency configuration: +wire lo_is_125khz; +assign lo_is_125khz = conf_word[3]; + +// For the high-frequency transmit configuration: modulation depth, either +// 100% (just quite driving antenna, steady LOW), or shallower (tri-state +// some fraction of the buffers) +wire hi_read_tx_shallow_modulation; +assign hi_read_tx_shallow_modulation = conf_word[0]; + +// For the high-frequency receive correlator: frequency against which to +// correlate. +wire hi_read_rx_xcorr_848; +assign hi_read_rx_xcorr_848 = conf_word[0]; +// and whether to drive the coil (reader) or just short it (snooper) +wire hi_read_rx_xcorr_snoop; +assign hi_read_rx_xcorr_snoop = conf_word[1]; + +// For the high-frequency simulated tag: what kind of modulation to use. +wire [2:0] hi_simulate_mod_type; +assign hi_simulate_mod_type = conf_word[2:0]; + +//----------------------------------------------------------------------------- +// And then we instantiate the modules corresponding to each of the FPGA's +// major modes, and use muxes to connect the outputs of the active mode to +// the output pins. +//----------------------------------------------------------------------------- + +lo_read lr( + pck0, ck_1356meg, ck_1356megb, + lr_pwr_lo, lr_pwr_hi, lr_pwr_oe1, lr_pwr_oe2, lr_pwr_oe3, lr_pwr_oe4, + adc_d, lr_adc_clk, + lr_ssp_frame, lr_ssp_din, ssp_dout, lr_ssp_clk, + cross_hi, cross_lo, + lr_dbg, + lo_is_125khz +); + +lo_simulate ls( + pck0, ck_1356meg, ck_1356megb, + ls_pwr_lo, ls_pwr_hi, ls_pwr_oe1, ls_pwr_oe2, ls_pwr_oe3, ls_pwr_oe4, + adc_d, ls_adc_clk, + ls_ssp_frame, ls_ssp_din, ssp_dout, ls_ssp_clk, + cross_hi, cross_lo, + ls_dbg +); + +hi_read_tx ht( + pck0, ck_1356meg, ck_1356megb, + ht_pwr_lo, ht_pwr_hi, ht_pwr_oe1, ht_pwr_oe2, ht_pwr_oe3, ht_pwr_oe4, + adc_d, ht_adc_clk, + ht_ssp_frame, ht_ssp_din, ssp_dout, ht_ssp_clk, + cross_hi, cross_lo, + ht_dbg, + hi_read_tx_shallow_modulation +); + +hi_read_rx_xcorr hrxc( + pck0, ck_1356meg, ck_1356megb, + hrxc_pwr_lo, hrxc_pwr_hi, hrxc_pwr_oe1, hrxc_pwr_oe2, hrxc_pwr_oe3, hrxc_pwr_oe4, + adc_d, hrxc_adc_clk, + hrxc_ssp_frame, hrxc_ssp_din, ssp_dout, hrxc_ssp_clk, + cross_hi, cross_lo, + hrxc_dbg, + hi_read_rx_xcorr_848, hi_read_rx_xcorr_snoop +); + +hi_simulate hs( + pck0, ck_1356meg, ck_1356megb, + hs_pwr_lo, hs_pwr_hi, hs_pwr_oe1, hs_pwr_oe2, hs_pwr_oe3, hs_pwr_oe4, + adc_d, hs_adc_clk, + hs_ssp_frame, hs_ssp_din, ssp_dout, hs_ssp_clk, + cross_hi, cross_lo, + hs_dbg, + hi_simulate_mod_type +); + +hi_iso14443a hisn( + pck0, ck_1356meg, ck_1356megb, + hisn_pwr_lo, hisn_pwr_hi, hisn_pwr_oe1, hisn_pwr_oe2, hisn_pwr_oe3, hisn_pwr_oe4, + adc_d, hisn_adc_clk, + hisn_ssp_frame, hisn_ssp_din, ssp_dout, hisn_ssp_clk, + cross_hi, cross_lo, + hisn_dbg, + hi_simulate_mod_type +); + +// Major modes: +// 000 -- LF reader (generic) +// 001 -- LF simulated tag (generic) +// 010 -- HF reader, transmitting to tag; modulation depth selectable +// 011 -- HF reader, receiving from tag, correlating as it goes; frequency selectable +// 100 -- HF simulated tag +// 101 -- HF ISO14443-A +// 110 -- unused +// 111 -- everything off + +mux8 mux_ssp_clk (major_mode, ssp_clk, lr_ssp_clk, ls_ssp_clk, ht_ssp_clk, hrxc_ssp_clk, hs_ssp_clk, hisn_ssp_clk, 1'b0, 1'b0); +mux8 mux_ssp_din (major_mode, ssp_din, lr_ssp_din, ls_ssp_din, ht_ssp_din, hrxc_ssp_din, hs_ssp_din, hisn_ssp_din, 1'b0, 1'b0); +mux8 mux_ssp_frame (major_mode, ssp_frame, lr_ssp_frame, ls_ssp_frame, ht_ssp_frame, hrxc_ssp_frame, hs_ssp_frame, hisn_ssp_frame, 1'b0, 1'b0); +mux8 mux_pwr_oe1 (major_mode, pwr_oe1, lr_pwr_oe1, ls_pwr_oe1, ht_pwr_oe1, hrxc_pwr_oe1, hs_pwr_oe1, hisn_pwr_oe1, 1'b0, 1'b0); +mux8 mux_pwr_oe2 (major_mode, pwr_oe2, lr_pwr_oe2, ls_pwr_oe2, ht_pwr_oe2, hrxc_pwr_oe2, hs_pwr_oe2, hisn_pwr_oe2, 1'b0, 1'b0); +mux8 mux_pwr_oe3 (major_mode, pwr_oe3, lr_pwr_oe3, ls_pwr_oe3, ht_pwr_oe3, hrxc_pwr_oe3, hs_pwr_oe3, hisn_pwr_oe3, 1'b0, 1'b0); +mux8 mux_pwr_oe4 (major_mode, pwr_oe4, lr_pwr_oe4, ls_pwr_oe4, ht_pwr_oe4, hrxc_pwr_oe4, hs_pwr_oe4, hisn_pwr_oe4, 1'b0, 1'b0); +mux8 mux_pwr_lo (major_mode, pwr_lo, lr_pwr_lo, ls_pwr_lo, ht_pwr_lo, hrxc_pwr_lo, hs_pwr_lo, hisn_pwr_lo, 1'b0, 1'b0); +mux8 mux_pwr_hi (major_mode, pwr_hi, lr_pwr_hi, ls_pwr_hi, ht_pwr_hi, hrxc_pwr_hi, hs_pwr_hi, hisn_pwr_hi, 1'b0, 1'b0); +mux8 mux_adc_clk (major_mode, adc_clk, lr_adc_clk, ls_adc_clk, ht_adc_clk, hrxc_adc_clk, hs_adc_clk, hisn_adc_clk, 1'b0, 1'b0); +mux8 mux_dbg (major_mode, dbg, lr_dbg, ls_dbg, ht_dbg, hrxc_dbg, hs_dbg, hisn_dbg, 1'b0, 1'b0); + +// In all modes, let the ADC's outputs be enabled. +assign adc_noe = 1'b0; + +endmodule diff --git a/fpga/go.bat b/fpga/go.bat new file mode 100644 index 000000000..8600d3cd9 --- /dev/null +++ b/fpga/go.bat @@ -0,0 +1,38 @@ +@echo off + +rmdir/s/q xst + +del fpga.ngc +xst -ifn xst.scr +if errorlevel 0 goto ok1 +goto done +:ok1 + +del fpga.ngd +ngdbuild -aul -p xc2s30-6vq100 -nt timestamp -uc fpga.ucf fpga.ngc fpga.ngd +if errorlevel 0 goto ok2 +goto done +:ok2 + +del fpga.ncd +map -p xc2s30-6vq100 fpga.ngd +if errorlevel 0 goto ok3 +goto done +:ok3 + +del fpga-placed.ncd +par fpga.ncd fpga-placed.ncd +if errorlevel 0 goto ok4 +goto done +:ok4 + +del fpga.bit fpga.drc fpga.rbt +bitgen -b fpga-placed.ncd fpga.bit +if errorlevel 0 goto ok5 +goto done +:ok5 + +echo okay +perl ..\tools\rbt2c.pl fpga.rbt > ..\armsrc\fpgaimg.c + +:done diff --git a/fpga/hi_iso14443a.v b/fpga/hi_iso14443a.v new file mode 100644 index 000000000..eb03fa239 --- /dev/null +++ b/fpga/hi_iso14443a.v @@ -0,0 +1,360 @@ +//----------------------------------------------------------------------------- +// ISO14443-A support for the Proxmark III +// Gerhard de Koning Gans, April 2008 +//----------------------------------------------------------------------------- + +module hi_iso14443a( + pck0, ck_1356meg, ck_1356megb, + pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, + adc_d, adc_clk, + ssp_frame, ssp_din, ssp_dout, ssp_clk, + cross_hi, cross_lo, + dbg, + mod_type +); + input pck0, ck_1356meg, ck_1356megb; + output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; + input [7:0] adc_d; + output adc_clk; + input ssp_dout; + output ssp_frame, ssp_din, ssp_clk; + input cross_hi, cross_lo; + output dbg; + input [2:0] mod_type; + +reg ssp_clk; +reg ssp_frame; + +reg fc_div_2; +always @(posedge ck_1356meg) + fc_div_2 = ~fc_div_2; + +wire adc_clk; +assign adc_clk = ck_1356meg; + +reg after_hysteresis, after_hysteresis_prev1, after_hysteresis_prev2, after_hysteresis_prev3; +reg [11:0] has_been_low_for; +reg [8:0] saw_deep_modulation; +reg [2:0] deep_counter; +reg deep_modulation; +always @(negedge adc_clk) +begin + if(& adc_d[7:6]) after_hysteresis <= 1'b1; + else if(~(| adc_d[7:4])) after_hysteresis <= 1'b0; + + if(~(| adc_d[7:0])) + begin + if(deep_counter == 3'd7) + begin + deep_modulation <= 1'b1; + saw_deep_modulation <= 8'd0; + end + else + deep_counter <= deep_counter + 1; + end + else + begin + deep_counter <= 3'd0; + if(saw_deep_modulation == 8'd255) + deep_modulation <= 1'b0; + else + saw_deep_modulation <= saw_deep_modulation + 1; + end + + if(after_hysteresis) + begin + has_been_low_for <= 7'b0; + end + else + begin + if(has_been_low_for == 12'd4095) + begin + has_been_low_for <= 12'd0; + after_hysteresis <= 1'b1; + end + else + has_been_low_for <= has_been_low_for + 1; + end +end + +// Report every 4 subcarrier cycles +// 64 periods of carrier frequency => 6-bit counter [negedge_cnt] +reg [5:0] negedge_cnt; +reg bit1, bit2, bit3; +reg [3:0] count_ones; +reg [3:0] count_zeros; +wire [7:0] avg; +reg [7:0] lavg; +reg signed [12:0] step1; +reg signed [12:0] step2; +reg [7:0] stepsize; +reg curbit; +reg [12:0] average; +wire signed [9:0] dif; + +// A register to send the results to the arm +reg signed [7:0] to_arm; + +assign avg[7:0] = average[11:4]; +assign dif = lavg - avg; + +reg bit_to_arm; +reg fdt_indicator, fdt_elapsed; +reg [10:0] fdt_counter; +reg [47:0] mod_sig_buf; +wire mod_sig_buf_empty; +reg [5:0] mod_sig_ptr; +reg [3:0] mod_sig_flip; +reg mod_sig, mod_sig_coil; +reg temp_buffer_reset; +reg sendbit; + +assign mod_sig_buf_empty = ~(|mod_sig_buf[47:0]); +reg [2:0] ssp_frame_counter; + +// ADC data appears on the rising edge, so sample it on the falling edge +always @(negedge adc_clk) +begin + + // last bit = 0 then fdt = 1172, in case of 0x26 (7-bit command, LSB first!) + // last bit = 1 then fdt = 1236, in case of 0x52 (7-bit command, LSB first!) + if(fdt_counter == 11'd740) fdt_indicator = 1'b1; + + if(fdt_counter == 11'd1148) + begin + if(fdt_elapsed) + begin + if(negedge_cnt[3:0] == mod_sig_flip[3:0]) mod_sig_coil <= mod_sig; + end + else + begin + mod_sig_flip[3:0] <= negedge_cnt[3:0]; + mod_sig_coil <= mod_sig; + fdt_elapsed = 1'b1; + fdt_indicator = 1'b0; + + if(~(| mod_sig_ptr[5:0])) mod_sig_ptr <= 6'b001001; + else temp_buffer_reset = 1'b1; // fix position of the buffer pointer + end + end + else + begin + fdt_counter <= fdt_counter + 1; + end + + if(& negedge_cnt[3:0]) + begin + // When there is a dip in the signal and not in reader mode + if(~after_hysteresis && mod_sig_buf_empty && ~((mod_type == 3'b100) || (mod_type == 3'b011) || (mod_type == 3'b010))) // last condition to prevent reset + begin + fdt_counter <= 11'd0; + fdt_elapsed = 1'b0; + fdt_indicator = 1'b0; + temp_buffer_reset = 1'b0; + mod_sig_ptr <= 6'b000000; + end + + lavg <= avg; + + if(stepsize<16) stepsize = 8'd16; + + if(dif>0) + begin + step1 = dif*3; + step2 = stepsize*2; // 3:2 + if(step1>step2) + begin + curbit = 1'b0; + stepsize = dif; + end + end + else + begin + step1 = dif*3; + step1 = -step1; + step2 = stepsize*2; + if(step1>step2) + begin + curbit = 1'b1; + stepsize = -dif; + end + end + + if(curbit) + begin + count_zeros <= 4'd0; + if(& count_ones[3:2]) + begin + curbit = 1'b0; // suppressed signal + stepsize = 8'd24; // just a fine number + end + else + begin + count_ones <= count_ones + 1; + end + end + else + begin + count_ones <= 4'd0; + if(& count_zeros[3:0]) + begin + stepsize = 8'd24; + end + else + begin + count_zeros <= count_zeros + 1; + end + end + + // What do we communicate to the ARM + if(mod_type == 3'b001) sendbit = after_hysteresis; + else if(mod_type == 3'b010) + begin + if(fdt_counter > 11'd772) sendbit = mod_sig_coil; + else sendbit = fdt_indicator; + end + else if(mod_type == 3'b011) sendbit = curbit; + else sendbit = 1'b0; + + end + + if(~(| negedge_cnt[3:0])) average <= adc_d; + else average <= average + adc_d; + + if(negedge_cnt == 7'd63) + begin + if(deep_modulation) + begin + to_arm <= {after_hysteresis_prev1,after_hysteresis_prev2,after_hysteresis_prev3,after_hysteresis,1'b0,1'b0,1'b0,1'b0}; + end + else + begin + to_arm <= {after_hysteresis_prev1,after_hysteresis_prev2,after_hysteresis_prev3,after_hysteresis,bit1,bit2,bit3,curbit}; + end + + negedge_cnt <= 0; + + end + else + begin + negedge_cnt <= negedge_cnt + 1; + end + + if(negedge_cnt == 6'd15) + begin + after_hysteresis_prev1 <= after_hysteresis; + bit1 <= curbit; + end + if(negedge_cnt == 6'd31) + begin + after_hysteresis_prev2 <= after_hysteresis; + bit2 <= curbit; + end + if(negedge_cnt == 6'd47) + begin + after_hysteresis_prev3 <= after_hysteresis; + bit3 <= curbit; + end + + + if(mod_type != 3'b000) + begin + if(negedge_cnt[3:0] == 4'b1000) + begin + // The modulation signal of the tag + mod_sig_buf[47:0] <= {mod_sig_buf[46:1], ssp_dout, 1'b0}; + if((ssp_dout || (| mod_sig_ptr[5:0])) && ~fdt_elapsed) + if(mod_sig_ptr == 6'b101110) + begin + mod_sig_ptr <= 6'b000000; + end + else mod_sig_ptr <= mod_sig_ptr + 1; + else if(fdt_elapsed && ~temp_buffer_reset) + begin + if(ssp_dout) temp_buffer_reset = 1'b1; + if(mod_sig_ptr == 6'b000010) mod_sig_ptr <= 6'b001001; + else mod_sig_ptr <= mod_sig_ptr - 1; + end + else + begin + // side effect: when ptr = 1 it will cancel the first 1 of every block of ones + if(~mod_sig_buf[mod_sig_ptr-1] && ~mod_sig_buf[mod_sig_ptr+1]) mod_sig = 1'b0; + else mod_sig = mod_sig_buf[mod_sig_ptr] & fdt_elapsed; // & fdt_elapsed was for direct relay to oe4 + end + end + end + + // SSP Clock and data + if(mod_type == 3'b000) + begin + if(negedge_cnt[2:0] == 3'b100) + ssp_clk <= 1'b0; + + if(negedge_cnt[2:0] == 3'b000) + begin + ssp_clk <= 1'b1; + // Don't shift if we just loaded new data, obviously. + if(negedge_cnt != 7'd0) + begin + to_arm[7:1] <= to_arm[6:0]; + end + end + + if(negedge_cnt[5:4] == 2'b00) + ssp_frame = 1'b1; + else + ssp_frame = 1'b0; + + bit_to_arm = to_arm[7]; + end + else + begin + if(negedge_cnt[3:0] == 4'b1000) ssp_clk <= 1'b0; + + if(negedge_cnt[3:0] == 4'b0111) + begin + if(ssp_frame_counter == 3'd7) ssp_frame_counter <= 3'd0; + else ssp_frame_counter <= ssp_frame_counter + 1; + end + + if(negedge_cnt[3:0] == 4'b0000) + begin + ssp_clk <= 1'b1; + end + + ssp_frame = (ssp_frame_counter == 3'd7); + + bit_to_arm = sendbit; + end + +end + +assign ssp_din = bit_to_arm; + +// Modulating carrier frequency is fc/16 +wire modulating_carrier; +assign modulating_carrier = (mod_sig_coil & negedge_cnt[3] & (mod_type == 3'b010)); +assign pwr_hi = (ck_1356megb & (((mod_type == 3'b100) & ~mod_sig_coil) || (mod_type == 3'b011))); + +// This one is all LF, so doesn't matter +//assign pwr_oe2 = modulating_carrier; +assign pwr_oe2 = 1'b0; + +// Toggle only one of these, since we are already producing much deeper +// modulation than a real tag would. +//assign pwr_oe1 = modulating_carrier; +assign pwr_oe1 = 1'b0; +assign pwr_oe4 = modulating_carrier; +//assign pwr_oe4 = 1'b0; + +// This one is always on, so that we can watch the carrier. +//assign pwr_oe3 = modulating_carrier; +assign pwr_oe3 = 1'b0; + + +assign dbg = negedge_cnt[3]; + +// Unused. +assign pwr_lo = 1'b0; + +endmodule diff --git a/fpga/hi_read_rx_xcorr.v b/fpga/hi_read_rx_xcorr.v new file mode 100644 index 000000000..253f50800 --- /dev/null +++ b/fpga/hi_read_rx_xcorr.v @@ -0,0 +1,165 @@ +//----------------------------------------------------------------------------- +// +// Jonathan Westhues, April 2006 +//----------------------------------------------------------------------------- + +module hi_read_rx_xcorr( + pck0, ck_1356meg, ck_1356megb, + pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, + adc_d, adc_clk, + ssp_frame, ssp_din, ssp_dout, ssp_clk, + cross_hi, cross_lo, + dbg, + xcorr_is_848, snoop +); + input pck0, ck_1356meg, ck_1356megb; + output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; + input [7:0] adc_d; + output adc_clk; + input ssp_dout; + output ssp_frame, ssp_din, ssp_clk; + input cross_hi, cross_lo; + output dbg; + input xcorr_is_848, snoop; + +// Carrier is steady on through this, unless we're snooping. +assign pwr_hi = ck_1356megb & (~snoop); +assign pwr_oe1 = 1'b0; +assign pwr_oe2 = 1'b0; +assign pwr_oe3 = 1'b0; +assign pwr_oe4 = 1'b0; + +reg ssp_clk; +reg ssp_frame; + +reg fc_div_2; +always @(posedge ck_1356meg) + fc_div_2 = ~fc_div_2; + +reg adc_clk; + +always @(xcorr_is_848 or fc_div_2 or ck_1356meg) + if(xcorr_is_848) + // The subcarrier frequency is fc/16; we will sample at fc, so that + // means the subcarrier is 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 ... + adc_clk <= ck_1356meg; + else + // The subcarrier frequency is fc/32; we will sample at fc/2, and + // the subcarrier will look identical. + adc_clk <= fc_div_2; + +// When we're a reader, we just need to do the BPSK demod; but when we're an +// eavesdropper, we also need to pick out the commands sent by the reader, +// using AM. Do this the same way that we do it for the simulated tag. +reg after_hysteresis, after_hysteresis_prev; +reg [11:0] has_been_low_for; +always @(negedge adc_clk) +begin + if(& adc_d[7:0]) after_hysteresis <= 1'b1; + else if(~(| adc_d[7:0])) after_hysteresis <= 1'b0; + + if(after_hysteresis) + begin + has_been_low_for <= 7'b0; + end + else + begin + if(has_been_low_for == 12'd4095) + begin + has_been_low_for <= 12'd0; + after_hysteresis <= 1'b1; + end + else + has_been_low_for <= has_been_low_for + 1; + end +end + +// Let us report a correlation every 4 subcarrier cycles, or 4*16 samples, +// so we need a 6-bit counter. +reg [5:0] corr_i_cnt; +reg [5:0] corr_q_cnt; +// And a couple of registers in which to accumulate the correlations. +reg signed [15:0] corr_i_accum; +reg signed [15:0] corr_q_accum; +reg signed [7:0] corr_i_out; +reg signed [7:0] corr_q_out; + +// ADC data appears on the rising edge, so sample it on the falling edge +always @(negedge adc_clk) +begin + // These are the correlators: we correlate against in-phase and quadrature + // versions of our reference signal, and keep the (signed) result to + // send out later over the SSP. + if(corr_i_cnt == 7'd63) + begin + if(snoop) + begin + corr_i_out <= {corr_i_accum[12:6], after_hysteresis_prev}; + corr_q_out <= {corr_q_accum[12:6], after_hysteresis}; + end + else + begin + // Only correlations need to be delivered. + corr_i_out <= corr_i_accum[13:6]; + corr_q_out <= corr_q_accum[13:6]; + end + + corr_i_accum <= adc_d; + corr_q_accum <= adc_d; + corr_q_cnt <= 4; + corr_i_cnt <= 0; + end + else + begin + if(corr_i_cnt[3]) + corr_i_accum <= corr_i_accum - adc_d; + else + corr_i_accum <= corr_i_accum + adc_d; + + if(corr_q_cnt[3]) + corr_q_accum <= corr_q_accum - adc_d; + else + corr_q_accum <= corr_q_accum + adc_d; + + corr_i_cnt <= corr_i_cnt + 1; + corr_q_cnt <= corr_q_cnt + 1; + end + + // The logic in hi_simulate.v reports 4 samples per bit. We report two + // (I, Q) pairs per bit, so we should do 2 samples per pair. + if(corr_i_cnt == 6'd31) + after_hysteresis_prev <= after_hysteresis; + + // Then the result from last time is serialized and send out to the ARM. + // We get one report each cycle, and each report is 16 bits, so the + // ssp_clk should be the adc_clk divided by 64/16 = 4. + + if(corr_i_cnt[1:0] == 2'b10) + ssp_clk <= 1'b0; + + if(corr_i_cnt[1:0] == 2'b00) + begin + ssp_clk <= 1'b1; + // Don't shift if we just loaded new data, obviously. + if(corr_i_cnt != 7'd0) + begin + corr_i_out[7:0] <= {corr_i_out[6:0], corr_q_out[7]}; + corr_q_out[7:1] <= corr_q_out[6:0]; + end + end + + if(corr_i_cnt[5:2] == 4'b000 || corr_i_cnt[5:2] == 4'b1000) + ssp_frame = 1'b1; + else + ssp_frame = 1'b0; + +end + +assign ssp_din = corr_i_out[7]; + +assign dbg = corr_i_cnt[3]; + +// Unused. +assign pwr_lo = 1'b0; + +endmodule diff --git a/fpga/hi_read_tx.v b/fpga/hi_read_tx.v new file mode 100644 index 000000000..c2cec3abe --- /dev/null +++ b/fpga/hi_read_tx.v @@ -0,0 +1,76 @@ +//----------------------------------------------------------------------------- +// The way that we connect things when transmitting a command to an ISO +// 15693 tag, using 100% modulation only for now. +// +// Jonathan Westhues, April 2006 +//----------------------------------------------------------------------------- + +module hi_read_tx( + pck0, ck_1356meg, ck_1356megb, + pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, + adc_d, adc_clk, + ssp_frame, ssp_din, ssp_dout, ssp_clk, + cross_hi, cross_lo, + dbg, + shallow_modulation +); + input pck0, ck_1356meg, ck_1356megb; + output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; + input [7:0] adc_d; + output adc_clk; + input ssp_dout; + output ssp_frame, ssp_din, ssp_clk; + input cross_hi, cross_lo; + output dbg; + input shallow_modulation; + +// The high-frequency stuff. For now, for testing, just bring out the carrier, +// and allow the ARM to modulate it over the SSP. +reg pwr_hi; +reg pwr_oe1; +reg pwr_oe2; +reg pwr_oe3; +reg pwr_oe4; +always @(ck_1356megb or ssp_dout or shallow_modulation) +begin + if(shallow_modulation) + begin + pwr_hi <= ck_1356megb; + pwr_oe1 <= ~ssp_dout; + pwr_oe2 <= ~ssp_dout; + pwr_oe3 <= ~ssp_dout; + pwr_oe4 <= 1'b0; + end + else + begin + pwr_hi <= ck_1356megb & ssp_dout; + pwr_oe1 <= 1'b0; + pwr_oe2 <= 1'b0; + pwr_oe3 <= 1'b0; + pwr_oe4 <= 1'b0; + end +end + +// Then just divide the 13.56 MHz clock down to produce appropriate clocks +// for the synchronous serial port. + +reg [6:0] hi_div_by_128; + +always @(posedge ck_1356meg) + hi_div_by_128 <= hi_div_by_128 + 1; + +assign ssp_clk = hi_div_by_128[6]; + +reg [2:0] hi_byte_div; + +always @(negedge ssp_clk) + hi_byte_div <= hi_byte_div + 1; + +assign ssp_frame = (hi_byte_div == 3'b000); + +assign ssp_din = 1'b0; + +assign pwr_lo = 1'b0; +assign dbg = ssp_frame; + +endmodule diff --git a/fpga/hi_simulate.v b/fpga/hi_simulate.v new file mode 100644 index 000000000..d0a711764 --- /dev/null +++ b/fpga/hi_simulate.v @@ -0,0 +1,106 @@ +//----------------------------------------------------------------------------- +// Pretend to be an ISO 14443 tag. We will do this by alternately short- +// circuiting and open-circuiting the antenna coil, with the tri-state +// pins. +// +// We communicate over the SSP, as a bitstream (i.e., might as well be +// unframed, though we still generate the word sync signal). The output +// (ARM -> FPGA) tells us whether to modulate or not. The input (FPGA +// -> ARM) is us using the A/D as a fancy comparator; this is with +// (software-added) hysteresis, to undo the high-pass filter. +// +// At this point only Type A is implemented. This means that we are using a +// bit rate of 106 kbit/s, or fc/128. Oversample by 4, which ought to make +// things practical for the ARM (fc/32, 423.8 kbits/s, ~50 kbytes/s) +// +// Jonathan Westhues, October 2006 +//----------------------------------------------------------------------------- + +module hi_simulate( + pck0, ck_1356meg, ck_1356megb, + pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, + adc_d, adc_clk, + ssp_frame, ssp_din, ssp_dout, ssp_clk, + cross_hi, cross_lo, + dbg, + mod_type +); + input pck0, ck_1356meg, ck_1356megb; + output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; + input [7:0] adc_d; + output adc_clk; + input ssp_dout; + output ssp_frame, ssp_din, ssp_clk; + input cross_hi, cross_lo; + output dbg; + input [2:0] mod_type; + +// Power amp goes between LOW and tri-state, so pwr_hi (and pwr_lo) can +// always be low. +assign pwr_hi = 1'b0; +assign pwr_lo = 1'b0; + +// The comparator with hysteresis on the output from the peak detector. +reg after_hysteresis; +assign adc_clk = ck_1356meg; + +always @(negedge adc_clk) +begin + if(& adc_d[7:5]) after_hysteresis = 1'b1; + else if(~(| adc_d[7:5])) after_hysteresis = 1'b0; +end + +// Divide 13.56 MHz by 32 to produce the SSP_CLK +reg [4:0] ssp_clk_divider; +always @(posedge adc_clk) + ssp_clk_divider <= (ssp_clk_divider + 1); +assign ssp_clk = ssp_clk_divider[4]; + +// Divide SSP_CLK by 8 to produce the byte framing signal; the phase of +// this is arbitrary, because it's just a bitstream. +// One nasty issue, though: I can't make it work with both rx and tx at +// once. The phase wrt ssp_clk must be changed. TODO to find out why +// that is and make a better fix. +reg [2:0] ssp_frame_divider_to_arm; +always @(posedge ssp_clk) + ssp_frame_divider_to_arm <= (ssp_frame_divider_to_arm + 1); +reg [2:0] ssp_frame_divider_from_arm; +always @(negedge ssp_clk) + ssp_frame_divider_from_arm <= (ssp_frame_divider_from_arm + 1); + +reg ssp_frame; +always @(ssp_frame_divider_to_arm or ssp_frame_divider_from_arm or mod_type) + if(mod_type == 3'b000) // not modulating, so listening, to ARM + ssp_frame = (ssp_frame_divider_to_arm == 3'b000); + else + ssp_frame = (ssp_frame_divider_from_arm == 3'b000); + +// Synchronize up the after-hysteresis signal, to produce DIN. +reg ssp_din; +always @(posedge ssp_clk) + ssp_din = after_hysteresis; + +// Modulating carrier frequency is fc/16, reuse ssp_clk divider for that +reg modulating_carrier; +always @(mod_type or ssp_clk or ssp_dout) + if(mod_type == 3'b000) + modulating_carrier <= 1'b0; // no modulation + else if(mod_type == 3'b001) + modulating_carrier <= ssp_dout ^ ssp_clk_divider[3]; // XOR means BPSK + else + modulating_carrier <= 1'b0; // yet unused + +// This one is all LF, so doesn't matter +assign pwr_oe2 = modulating_carrier; + +// Toggle only one of these, since we are already producing much deeper +// modulation than a real tag would. +assign pwr_oe1 = modulating_carrier; +assign pwr_oe4 = modulating_carrier; + +// This one is always on, so that we can watch the carrier. +assign pwr_oe3 = 1'b0; + +assign dbg = after_hysteresis; + +endmodule diff --git a/fpga/lo_read.v b/fpga/lo_read.v new file mode 100644 index 000000000..9c3edb225 --- /dev/null +++ b/fpga/lo_read.v @@ -0,0 +1,102 @@ +//----------------------------------------------------------------------------- +// The way that we connect things in low-frequency read mode. In this case +// we are generating the 134 kHz or 125 kHz carrier, and running the +// unmodulated carrier at that frequency. The A/D samples at that same rate, +// and the result is serialized. +// +// Jonathan Westhues, April 2006 +//----------------------------------------------------------------------------- + +module lo_read( + pck0, ck_1356meg, ck_1356megb, + pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, + adc_d, adc_clk, + ssp_frame, ssp_din, ssp_dout, ssp_clk, + cross_hi, cross_lo, + dbg, + lo_is_125khz +); + input pck0, ck_1356meg, ck_1356megb; + output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; + input [7:0] adc_d; + output adc_clk; + input ssp_dout; + output ssp_frame, ssp_din, ssp_clk; + input cross_hi, cross_lo; + output dbg; + input lo_is_125khz; + +// The low-frequency RFID stuff. This is relatively simple, because most +// of the work happens on the ARM, and we just pass samples through. The +// PCK0 must be divided down to generate the A/D clock, and from there by +// a factor of 8 to generate the carrier (that we apply to the coil drivers). +// +// This is also where we decode the received synchronous serial port words, +// to determine how to drive the output enables. + +// PCK0 will run at (PLL clock) / 4, or 24 MHz. That means that we can do +// 125 kHz by dividing by a further factor of (8*12*2), or ~134 kHz by +// dividing by a factor of (8*11*2) (for 136 kHz, ~2% error, tolerable). + +reg [3:0] pck_divider; +reg clk_lo; + +always @(posedge pck0) +begin + if(lo_is_125khz) + begin + if(pck_divider == 4'd11) + begin + pck_divider <= 4'd0; + clk_lo = !clk_lo; + end + else + pck_divider <= pck_divider + 1; + end + else + begin + if(pck_divider == 4'd10) + begin + pck_divider <= 4'd0; + clk_lo = !clk_lo; + end + else + pck_divider <= pck_divider + 1; + end +end + +reg [2:0] carrier_divider_lo; + +always @(posedge clk_lo) +begin + carrier_divider_lo <= carrier_divider_lo + 1; +end + +assign pwr_lo = carrier_divider_lo[2]; + +// This serializes the values returned from the A/D, and sends them out +// over the SSP. + +reg [7:0] to_arm_shiftreg; + +always @(posedge clk_lo) +begin + if(carrier_divider_lo == 3'b000) + to_arm_shiftreg <= adc_d; + else + to_arm_shiftreg[7:1] <= to_arm_shiftreg[6:0]; +end + +assign ssp_clk = clk_lo; +assign ssp_frame = (carrier_divider_lo == 3'b001); +assign ssp_din = to_arm_shiftreg[7]; + +// The ADC converts on the falling edge, and our serializer loads when +// carrier_divider_lo == 3'b000. +assign adc_clk = ~carrier_divider_lo[2]; + +assign pwr_hi = 1'b0; + +assign dbg = adc_clk; + +endmodule diff --git a/fpga/lo_simulate.v b/fpga/lo_simulate.v new file mode 100644 index 000000000..7eb910ba1 --- /dev/null +++ b/fpga/lo_simulate.v @@ -0,0 +1,37 @@ +//----------------------------------------------------------------------------- +// The way that we connect things in low-frequency simulation mode. In this +// case just pass everything through to the ARM, which can bit-bang this +// (because it is so slow). +// +// Jonathan Westhues, April 2006 +//----------------------------------------------------------------------------- + +module lo_simulate( + pck0, ck_1356meg, ck_1356megb, + pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, + adc_d, adc_clk, + ssp_frame, ssp_din, ssp_dout, ssp_clk, + cross_hi, cross_lo, + dbg +); + input pck0, ck_1356meg, ck_1356megb; + output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; + input [7:0] adc_d; + output adc_clk; + input ssp_dout; + output ssp_frame, ssp_din, ssp_clk; + input cross_hi, cross_lo; + output dbg; + +// No logic, straight through. +assign pwr_oe3 = 1'b0; +assign pwr_oe1 = ssp_dout; +assign pwr_oe2 = ssp_dout; +assign pwr_oe4 = ssp_dout; +assign ssp_clk = cross_lo; +assign pwr_lo = 1'b0; +assign adc_clk = 1'b0; +assign pwr_hi = 1'b0; +assign dbg = cross_lo; + +endmodule diff --git a/fpga/sim.tcl b/fpga/sim.tcl new file mode 100644 index 000000000..477acd1d1 --- /dev/null +++ b/fpga/sim.tcl @@ -0,0 +1,27 @@ +#------------------------------------------------------------------------------ +# Run the simulation testbench in ModelSim: recompile both Verilog source +# files, then start the simulation, add a lot of signals to the waveform +# viewer, and run. I should (TODO) fix the absolute paths at some point. +# +# Jonathan Westhues, Mar 2006 +#------------------------------------------------------------------------------ + +vlog -work work -O0 C:/depot/proximity/mark3/fpga/fpga.v +vlog -work work -O0 C:/depot/proximity/mark3/fpga/fpga_tb.v + +vsim work.fpga_tb + +add wave sim:/fpga_tb/adc_clk +add wave sim:/fpga_tb/adc_d +add wave sim:/fpga_tb/pwr_lo +add wave sim:/fpga_tb/ssp_clk +add wave sim:/fpga_tb/ssp_frame +add wave sim:/fpga_tb/ssp_din +add wave sim:/fpga_tb/ssp_dout + +add wave sim:/fpga_tb/dut/clk_lo +add wave sim:/fpga_tb/dut/pck_divider +add wave sim:/fpga_tb/dut/carrier_divider_lo +add wave sim:/fpga_tb/dut/conf_word + +run 30000 diff --git a/fpga/testbed_fpga.v b/fpga/testbed_fpga.v new file mode 100644 index 000000000..3ef2766ae --- /dev/null +++ b/fpga/testbed_fpga.v @@ -0,0 +1,50 @@ +`include "fpga.v" + +module testbed_fpga; + reg spck, mosi, ncs; + wire miso; + reg pck0i, ck_1356meg, ck_1356megb; + wire pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; + reg [7:0] adc_d; + wire adc_clk, adc_noe; + reg ssp_dout; + wire ssp_frame, ssp_din, ssp_clk; + + fpga dut( + spck, miso, mosi, ncs, + pck0i, ck_1356meg, ck_1356megb, + pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, + adc_d, adc_clk, adc_noe, + ssp_frame, ssp_din, ssp_dout, ssp_clk + ); + + integer i; + + initial begin + + // init inputs + #5 ncs=1; + #5 spck = 1; + #5 mosi = 1; + + #50 ncs=0; + for (i = 0 ; i < 8 ; i = i + 1) begin + #5 mosi = $random; + #5 spck = 0; + #5 spck = 1; + end + #5 ncs=1; + + #50 ncs=0; + for (i = 0 ; i < 8 ; i = i + 1) begin + #5 mosi = $random; + #5 spck = 0; + #5 spck = 1; + end + #5 ncs=1; + + #50 mosi=1; + $finish; + end + +endmodule // main diff --git a/fpga/testbed_hi_read_tx.v b/fpga/testbed_hi_read_tx.v new file mode 100644 index 000000000..0d600a1f5 --- /dev/null +++ b/fpga/testbed_hi_read_tx.v @@ -0,0 +1,109 @@ +`include "hi_read_tx.v" + +/* + pck0 - input main 24Mhz clock (PLL / 4) + [7:0] adc_d - input data from A/D converter + shallow_modulation - modulation type + + pwr_lo - output to coil drivers (ssp_clk / 8) + adc_clk - output A/D clock signal + ssp_frame - output SSS frame indicator (goes high while the 8 bits are shifted) + ssp_din - output SSP data to ARM (shifts 8 bit A/D value serially to ARM MSB first) + ssp_clk - output SSP clock signal + + ck_1356meg - input unused + ck_1356megb - input unused + ssp_dout - input unused + cross_hi - input unused + cross_lo - input unused + + pwr_hi - output unused, tied low + pwr_oe1 - output unused, undefined + pwr_oe2 - output unused, undefined + pwr_oe3 - output unused, undefined + pwr_oe4 - output unused, undefined + dbg - output alias for adc_clk +*/ + +module testbed_hi_read_tx; + reg pck0; + reg [7:0] adc_d; + reg shallow_modulation; + + wire pwr_lo; + wire adc_clk; + reg ck_1356meg; + reg ck_1356megb; + wire ssp_frame; + wire ssp_din; + wire ssp_clk; + reg ssp_dout; + wire pwr_hi; + wire pwr_oe1; + wire pwr_oe2; + wire pwr_oe3; + wire pwr_oe4; + wire cross_lo; + wire cross_hi; + wire dbg; + + hi_read_tx #(5,200) dut( + .pck0(pck0), + .ck_1356meg(ck_1356meg), + .ck_1356megb(ck_1356megb), + .pwr_lo(pwr_lo), + .pwr_hi(pwr_hi), + .pwr_oe1(pwr_oe1), + .pwr_oe2(pwr_oe2), + .pwr_oe3(pwr_oe3), + .pwr_oe4(pwr_oe4), + .adc_d(adc_d), + .adc_clk(adc_clk), + .ssp_frame(ssp_frame), + .ssp_din(ssp_din), + .ssp_dout(ssp_dout), + .ssp_clk(ssp_clk), + .cross_hi(cross_hi), + .cross_lo(cross_lo), + .dbg(dbg), + .shallow_modulation(shallow_modulation) + ); + + integer idx, i; + + // main clock + always #5 begin + ck_1356megb = !ck_1356megb; + ck_1356meg = ck_1356megb; + end + + //crank DUT + task crank_dut; + begin + @(posedge ssp_clk) ; + ssp_dout = $random; + end + endtask + + initial begin + + // init inputs + ck_1356megb = 0; + adc_d = 0; + ssp_dout=0; + + // shallow modulation off + shallow_modulation=0; + for (i = 0 ; i < 16 ; i = i + 1) begin + crank_dut; + end + + // shallow modulation on + shallow_modulation=1; + for (i = 0 ; i < 16 ; i = i + 1) begin + crank_dut; + end + $finish; + end + +endmodule // main diff --git a/fpga/testbed_hi_simulate.v b/fpga/testbed_hi_simulate.v new file mode 100644 index 000000000..6dc30f0b3 --- /dev/null +++ b/fpga/testbed_hi_simulate.v @@ -0,0 +1,116 @@ +`include "hi_simulate.v" + +/* + pck0 - input main 24Mhz clock (PLL / 4) + [7:0] adc_d - input data from A/D converter + mod_type - modulation type + + pwr_lo - output to coil drivers (ssp_clk / 8) + adc_clk - output A/D clock signal + ssp_frame - output SSS frame indicator (goes high while the 8 bits are shifted) + ssp_din - output SSP data to ARM (shifts 8 bit A/D value serially to ARM MSB first) + ssp_clk - output SSP clock signal + + ck_1356meg - input unused + ck_1356megb - input unused + ssp_dout - input unused + cross_hi - input unused + cross_lo - input unused + + pwr_hi - output unused, tied low + pwr_oe1 - output unused, undefined + pwr_oe2 - output unused, undefined + pwr_oe3 - output unused, undefined + pwr_oe4 - output unused, undefined + dbg - output alias for adc_clk +*/ + +module testbed_hi_simulate; + reg pck0; + reg [7:0] adc_d; + reg mod_type; + + wire pwr_lo; + wire adc_clk; + reg ck_1356meg; + reg ck_1356megb; + wire ssp_frame; + wire ssp_din; + wire ssp_clk; + reg ssp_dout; + wire pwr_hi; + wire pwr_oe1; + wire pwr_oe2; + wire pwr_oe3; + wire pwr_oe4; + wire cross_lo; + wire cross_hi; + wire dbg; + + hi_simulate #(5,200) dut( + .pck0(pck0), + .ck_1356meg(ck_1356meg), + .ck_1356megb(ck_1356megb), + .pwr_lo(pwr_lo), + .pwr_hi(pwr_hi), + .pwr_oe1(pwr_oe1), + .pwr_oe2(pwr_oe2), + .pwr_oe3(pwr_oe3), + .pwr_oe4(pwr_oe4), + .adc_d(adc_d), + .adc_clk(adc_clk), + .ssp_frame(ssp_frame), + .ssp_din(ssp_din), + .ssp_dout(ssp_dout), + .ssp_clk(ssp_clk), + .cross_hi(cross_hi), + .cross_lo(cross_lo), + .dbg(dbg), + .mod_type(mod_type) + ); + + integer idx, i; + + // main clock + always #5 begin + ck_1356megb = !ck_1356megb; + ck_1356meg = ck_1356megb; + end + + always begin + @(negedge adc_clk) ; + adc_d = $random; + end + + //crank DUT + task crank_dut; + begin + @(negedge ssp_clk) ; + ssp_dout = $random; + end + endtask + + initial begin + + // init inputs + ck_1356megb = 0; + // random values + adc_d = 0; + ssp_dout=1; + + // shallow modulation off + mod_type=0; + for (i = 0 ; i < 16 ; i = i + 1) begin + crank_dut; + end + + // shallow modulation on + mod_type=1; + for (i = 0 ; i < 16 ; i = i + 1) begin + crank_dut; + end + $finish; + end + +endmodule // main + diff --git a/fpga/testbed_lo_read.v b/fpga/testbed_lo_read.v new file mode 100644 index 000000000..11908d77a --- /dev/null +++ b/fpga/testbed_lo_read.v @@ -0,0 +1,105 @@ +`include "lo_read.v" + +/* + pck0 - input main 24Mhz clock (PLL / 4) + [7:0] adc_d - input data from A/D converter + lo_is_125khz - input freq selector (1=125Khz, 0=136Khz) + + pwr_lo - output to coil drivers (ssp_clk / 8) + adc_clk - output A/D clock signal + ssp_frame - output SSS frame indicator (goes high while the 8 bits are shifted) + ssp_din - output SSP data to ARM (shifts 8 bit A/D value serially to ARM MSB first) + ssp_clk - output SSP clock signal 1Mhz/1.09Mhz (pck0 / 2*(11+lo_is_125khz) ) + + ck_1356meg - input unused + ck_1356megb - input unused + ssp_dout - input unused + cross_hi - input unused + cross_lo - input unused + + pwr_hi - output unused, tied low + pwr_oe1 - output unused, undefined + pwr_oe2 - output unused, undefined + pwr_oe3 - output unused, undefined + pwr_oe4 - output unused, undefined + dbg - output alias for adc_clk +*/ + +module testbed_lo_read; + reg pck0; + reg [7:0] adc_d; + reg lo_is_125khz; + + wire pwr_lo; + wire adc_clk; + wire ck_1356meg; + wire ck_1356megb; + wire ssp_frame; + wire ssp_din; + wire ssp_clk; + wire ssp_dout; + wire pwr_hi; + wire pwr_oe1; + wire pwr_oe2; + wire pwr_oe3; + wire pwr_oe4; + wire cross_lo; + wire cross_hi; + wire dbg; + + lo_read #(5,200) dut( + .pck0(pck0), + .ck_1356meg(ck_1356meg), + .ck_1356megb(ck_1356megb), + .pwr_lo(pwr_lo), + .pwr_hi(pwr_hi), + .pwr_oe1(pwr_oe1), + .pwr_oe2(pwr_oe2), + .pwr_oe3(pwr_oe3), + .pwr_oe4(pwr_oe4), + .adc_d(adc_d), + .adc_clk(adc_clk), + .ssp_frame(ssp_frame), + .ssp_din(ssp_din), + .ssp_dout(ssp_dout), + .ssp_clk(ssp_clk), + .cross_hi(cross_hi), + .cross_lo(cross_lo), + .dbg(dbg), + .lo_is_125khz(lo_is_125khz) + ); + + integer idx, i; + + // main clock + always #5 pck0 = !pck0; + + //new A/D value available from ADC on positive edge + task crank_dut; + begin + @(posedge adc_clk) ; + adc_d = $random; + end + endtask + + initial begin + + // init inputs + pck0 = 0; + adc_d = 0; + + // simulate 4 A/D cycles at 134Khz + lo_is_125khz=0; + for (i = 0 ; i < 4 ; i = i + 1) begin + crank_dut; + end + + // simulate 4 A/D cycles at 125Khz + lo_is_125khz=1; + for (i = 0 ; i < 4 ; i = i + 1) begin + crank_dut; + end + $finish; + end + +endmodule // main diff --git a/fpga/testbed_lo_simulate.v b/fpga/testbed_lo_simulate.v new file mode 100644 index 000000000..d30f822d4 --- /dev/null +++ b/fpga/testbed_lo_simulate.v @@ -0,0 +1,101 @@ +`include "lo_simulate.v" + +/* + pck0 - input main 24Mhz clock (PLL / 4) + [7:0] adc_d - input data from A/D converter + + + pwr_lo - output to coil drivers (ssp_clk / 8) + adc_clk - output A/D clock signal + ssp_frame - output SSS frame indicator (goes high while the 8 bits are shifted) + ssp_din - output SSP data to ARM (shifts 8 bit A/D value serially to ARM MSB first) + ssp_clk - output SSP clock signal + + ck_1356meg - input unused + ck_1356megb - input unused + ssp_dout - input unused + cross_hi - input unused + cross_lo - input unused + + pwr_hi - output unused, tied low + pwr_oe1 - output unused, undefined + pwr_oe2 - output unused, undefined + pwr_oe3 - output unused, undefined + pwr_oe4 - output unused, undefined + dbg - output alias for adc_clk +*/ + +module testbed_lo_simulate; + reg pck0; + reg [7:0] adc_d; + + + wire pwr_lo; + wire adc_clk; + wire ck_1356meg; + wire ck_1356megb; + wire ssp_frame; + wire ssp_din; + wire ssp_clk; + reg ssp_dout; + wire pwr_hi; + wire pwr_oe1; + wire pwr_oe2; + wire pwr_oe3; + wire pwr_oe4; + reg cross_lo; + wire cross_hi; + wire dbg; + + lo_simulate #(5,200) dut( + .pck0(pck0), + .ck_1356meg(ck_1356meg), + .ck_1356megb(ck_1356megb), + .pwr_lo(pwr_lo), + .pwr_hi(pwr_hi), + .pwr_oe1(pwr_oe1), + .pwr_oe2(pwr_oe2), + .pwr_oe3(pwr_oe3), + .pwr_oe4(pwr_oe4), + .adc_d(adc_d), + .adc_clk(adc_clk), + .ssp_frame(ssp_frame), + .ssp_din(ssp_din), + .ssp_dout(ssp_dout), + .ssp_clk(ssp_clk), + .cross_hi(cross_hi), + .cross_lo(cross_lo), + .dbg(dbg) + ); + + + integer i, counter=0; + + // main clock + always #5 pck0 = !pck0; + + //cross_lo is not really synced to pck0 but it's roughly pck0/192 (24Mhz/192=125Khz) + task crank_dut; + begin + @(posedge pck0) ; + counter = counter + 1; + if (counter == 192) begin + counter = 0; + ssp_dout = $random; + cross_lo = 1; + end else begin + cross_lo = 0; + end + + end + endtask + + initial begin + pck0 = 0; + for (i = 0 ; i < 4096 ; i = i + 1) begin + crank_dut; + end + $finish; + end + +endmodule // main diff --git a/fpga/util.v b/fpga/util.v new file mode 100644 index 000000000..c500edb4c --- /dev/null +++ b/fpga/util.v @@ -0,0 +1,27 @@ +//----------------------------------------------------------------------------- +// General-purpose miscellany. +// +// Jonathan Westhues, April 2006. +//----------------------------------------------------------------------------- + +module mux8(sel, y, x0, x1, x2, x3, x4, x5, x6, x7); + input [2:0] sel; + input x0, x1, x2, x3, x4, x5, x6, x7; + output y; + reg y; + +always @(x0 or x1 or x2 or x3 or x4 or x5 or x6 or x7 or sel) +begin + case (sel) + 3'b000: y = x0; + 3'b001: y = x1; + 3'b010: y = x2; + 3'b011: y = x3; + 3'b100: y = x4; + 3'b101: y = x5; + 3'b110: y = x6; + 3'b111: y = x7; + endcase +end + +endmodule diff --git a/fpga/xst.scr b/fpga/xst.scr new file mode 100644 index 000000000..365db39a0 --- /dev/null +++ b/fpga/xst.scr @@ -0,0 +1 @@ +run -ifn fpga.v -ifmt Verilog -ofn fpga.ngc -ofmt NGC -p xc2s30-6vq100 -opt_mode Speed -opt_level 1 -ent fpga diff --git a/include/at91sam7s128.h b/include/at91sam7s128.h new file mode 100644 index 000000000..1a5fe1c45 --- /dev/null +++ b/include/at91sam7s128.h @@ -0,0 +1,461 @@ +//----------------------------------------------------------------------------- +// Incomplete register definitions for the AT91SAM7S128 chip. +// Jonathan Westhues, Jul 2005 +//----------------------------------------------------------------------------- + +#ifndef __AT91SAM7S128_H +#define __AT91SAM7S128_H + +#define REG(x) (*(volatile unsigned long *)(x)) + +//------------- +// Peripheral IDs + +#define PERIPH_AIC_FIQ 0 +#define PERIPH_SYSIRQ 1 +#define PERIPH_PIOA 2 +#define PERIPH_ADC 4 +#define PERIPH_SPI 5 +#define PERIPH_US0 6 +#define PERIPH_US1 7 +#define PERIPH_SSC 8 +#define PERIPH_TWI 9 +#define PERIPH_PWMC 10 +#define PERIPH_UDP 11 +#define PERIPH_TC0 12 +#define PERIPH_TC1 13 +#define PERIPH_TC2 14 +#define PERIPH_AIC_IRQ0 30 +#define PERIPH_AIC_IRQ1 31 + +//------------- +// Reset Controller + +#define RSTC_BASE (0xfffffd00) + +#define RSTC_CONTROL REG(RSTC_BASE+0x00) + +#define RST_CONTROL_KEY (0xa5<<24) +#define RST_CONTROL_PROCESSOR_RESET (1<<0) + +//------------- +// PWM Controller + +#define PWM_BASE (0xfffcc000) + +#define PWM_MODE REG(PWM_BASE+0x00) +#define PWM_ENABLE REG(PWM_BASE+0x04) +#define PWM_DISABLE REG(PWM_BASE+0x08) +#define PWM_STATUS REG(PWM_BASE+0x0c) +#define PWM_INTERRUPT_ENABLE REG(PWM_BASE+0x10) +#define PWM_INTERRUPT_DISABLE REG(PWM_BASE+0x14) +#define PWM_INTERRUPT_MASK REG(PWM_BASE+0x18) +#define PWM_INTERRUPT_STATUS REG(PWM_BASE+0x1c) +#define PWM_CH_MODE(x) REG(PWM_BASE+0x200+((x)*0x20)) +#define PWM_CH_DUTY_CYCLE(x) REG(PWM_BASE+0x204+((x)*0x20)) +#define PWM_CH_PERIOD(x) REG(PWM_BASE+0x208+((x)*0x20)) +#define PWM_CH_COUNTER(x) REG(PWM_BASE+0x20c+((x)*0x20)) +#define PWM_CH_UPDATE(x) REG(PWM_BASE+0x210+((x)*0x20)) + +#define PWM_MODE_DIVA(x) ((x)<<0) +#define PWM_MODE_PREA(x) ((x)<<8) +#define PWM_MODE_DIVB(x) ((x)<<16) +#define PWM_MODE_PREB(x) ((x)<<24) + +#define PWM_CHANNEL(x) (1<<(x)) + +#define PWM_CH_MODE_PRESCALER(x) ((x)<<0) +#define PWM_CH_MODE_PERIOD_CENTER_ALIGNED (1<<8) +#define PWM_CH_MODE_POLARITY_STARTS_HIGH (1<<9) +#define PWM_CH_MODE_UPDATE_UPDATES_PERIOD (1<<10) + +//------------- +// Debug Unit + +#define DBG_BASE (0xfffff200) + +#define DBGU_CR REG(DBG_BASE+0x0000) +#define DBGU_MR REG(DBG_BASE+0x0004) +#define DBGU_IER REG(DBG_BASE+0x0008) +#define DBGU_IDR REG(DBG_BASE+0x000C) +#define DBGU_IMR REG(DBG_BASE+0x0010) +#define DBGU_SR REG(DBG_BASE+0x0014) +#define DBGU_RHR REG(DBG_BASE+0x0018) +#define DBGU_THR REG(DBG_BASE+0x001C) +#define DBGU_BRGR REG(DBG_BASE+0x0020) +#define DBGU_CIDR REG(DBG_BASE+0x0040) +#define DBGU_EXID REG(DBG_BASE+0x0044) +#define DBGU_FNR REG(DBG_BASE+0x0048) + +//------------- +// Embedded Flash Controller + +#define MC_BASE (0xffffff00) + +#define MC_FLASH_MODE0 REG(MC_BASE+0x60) +#define MC_FLASH_COMMAND REG(MC_BASE+0x64) +#define MC_FLASH_STATUS REG(MC_BASE+0x68) +#define MC_FLASH_MODE1 REG(MC_BASE+0x70) + +#define MC_FLASH_MODE_READY_INTERRUPT_ENABLE (1<<0) +#define MC_FLASH_MODE_LOCK_INTERRUPT_ENABLE (1<<2) +#define MC_FLASH_MODE_PROG_ERROR_INTERRUPT_ENABLE (1<<3) +#define MC_FLASH_MODE_NO_ERASE_BEFORE_PROGRAMMING (1<<7) +#define MC_FLASH_MODE_FLASH_WAIT_STATES(x) ((x)<<8) +#define MC_FLASH_MODE_MASTER_CLK_IN_MHZ(x) ((x)<<16) + +#define MC_FLASH_COMMAND_FCMD(x) ((x)<<0) +#define MC_FLASH_COMMAND_PAGEN(x) ((x)<<8) +#define MC_FLASH_COMMAND_KEY ((0x5a)<<24) + +#define FCMD_NOP 0x0 +#define FCMD_WRITE_PAGE 0x1 +#define FCMD_SET_LOCK_BIT 0x2 +#define FCMD_WRITE_PAGE_LOCK 0x3 +#define FCMD_CLEAR_LOCK_BIT 0x4 +#define FCMD_ERASE_ALL 0x8 +#define FCMD_SET_GP_NVM_BIT 0xb +#define FCMD_SET_SECURITY_BIT 0xf + +#define MC_FLASH_STATUS_READY (1<<0) +#define MC_FLASH_STATUS_LOCK_ERROR (1<<2) +#define MC_FLASH_STATUS_PROGRAMMING_ERROR (1<<3) +#define MC_FLASH_STATUS_SECURITY_BIT_ACTIVE (1<<4) +#define MC_FLASH_STATUS_GP_NVM_ACTIVE_0 (1<<8) +#define MC_FLASH_STATUS_GP_NVM_ACTIVE_1 (1<<9) +#define MC_FLASH_STATUS_LOCK_ACTIVE(x) (1<<((x)+16)) + +#define FLASH_PAGE_SIZE_BYTES 256 +#define FLASH_PAGE_COUNT 512 + +//------------- +// Watchdog Timer - 12 bit down counter, uses slow clock divided by 128 as source + +#define WDT_BASE (0xfffffd40) + +#define WDT_CONTROL REG(WDT_BASE+0x00) +#define WDT_MODE REG(WDT_BASE+0x04) +#define WDT_STATUS REG(WDT_BASE+0x08) + +#define WDT_HIT() WDT_CONTROL = 0xa5000001 + +#define WDT_MODE_COUNT(x) ((x)<<0) +#define WDT_MODE_INTERRUPT_ON_EVENT (1<<12) +#define WDT_MODE_RESET_ON_EVENT_ENABLE (1<<13) +#define WDT_MODE_RESET_ON_EVENT (1<<14) +#define WDT_MODE_WATCHDOG_DELTA(x) ((x)<<16) +#define WDT_MODE_HALT_IN_DEBUG_MODE (1<<28) +#define WDT_MODE_HALT_IN_IDLE_MODE (1<<29) +#define WDT_MODE_DISABLE (1<<15) + +//------------- +// Parallel Input/Output Controller + +#define PIO_BASE (0xfffff400) + +#define PIO_ENABLE REG(PIO_BASE+0x000) +#define PIO_DISABLE REG(PIO_BASE+0x004) +#define PIO_STATUS REG(PIO_BASE+0x008) +#define PIO_OUTPUT_ENABLE REG(PIO_BASE+0x010) +#define PIO_OUTPUT_DISABLE REG(PIO_BASE+0x014) +#define PIO_OUTPUT_STATUS REG(PIO_BASE+0x018) +#define PIO_GLITCH_ENABLE REG(PIO_BASE+0x020) +#define PIO_GLITCH_DISABLE REG(PIO_BASE+0x024) +#define PIO_GLITCH_STATUS REG(PIO_BASE+0x028) +#define PIO_OUTPUT_DATA_SET REG(PIO_BASE+0x030) +#define PIO_OUTPUT_DATA_CLEAR REG(PIO_BASE+0x034) +#define PIO_OUTPUT_DATA_STATUS REG(PIO_BASE+0x038) +#define PIO_PIN_DATA_STATUS REG(PIO_BASE+0x03c) +#define PIO_OPEN_DRAIN_ENABLE REG(PIO_BASE+0x050) +#define PIO_OPEN_DRAIN_DISABLE REG(PIO_BASE+0x054) +#define PIO_OPEN_DRAIN_STATUS REG(PIO_BASE+0x058) +#define PIO_NO_PULL_UP_ENABLE REG(PIO_BASE+0x060) +#define PIO_NO_PULL_UP_DISABLE REG(PIO_BASE+0x064) +#define PIO_NO_PULL_UP_STATUS REG(PIO_BASE+0x068) +#define PIO_PERIPHERAL_A_SEL REG(PIO_BASE+0x070) +#define PIO_PERIPHERAL_B_SEL REG(PIO_BASE+0x074) +#define PIO_PERIPHERAL_WHICH REG(PIO_BASE+0x078) +#define PIO_OUT_WRITE_ENABLE REG(PIO_BASE+0x0a0) +#define PIO_OUT_WRITE_DISABLE REG(PIO_BASE+0x0a4) +#define PIO_OUT_WRITE_STATUS REG(PIO_BASE+0x0a8) + +//------------- +// USB Device Port + +#define UDP_BASE (0xfffb0000) + +#define UDP_FRAME_NUMBER REG(UDP_BASE+0x0000) +#define UDP_GLOBAL_STATE REG(UDP_BASE+0x0004) +#define UDP_FUNCTION_ADDR REG(UDP_BASE+0x0008) +#define UDP_INTERRUPT_ENABLE REG(UDP_BASE+0x0010) +#define UDP_INTERRUPT_DISABLE REG(UDP_BASE+0x0014) +#define UDP_INTERRUPT_MASK REG(UDP_BASE+0x0018) +#define UDP_INTERRUPT_STATUS REG(UDP_BASE+0x001c) +#define UDP_INTERRUPT_CLEAR REG(UDP_BASE+0x0020) +#define UDP_RESET_ENDPOINT REG(UDP_BASE+0x0028) +#define UDP_ENDPOINT_CSR(x) REG(UDP_BASE+0x0030+((x)*4)) +#define UDP_ENDPOINT_FIFO(x) REG(UDP_BASE+0x0050+((x)*4)) +#define UDP_TRANSCEIVER_CTRL REG(UDP_BASE+0x0074) + +#define UDP_GLOBAL_STATE_ADDRESSED (1<<0) +#define UDP_GLOBAL_STATE_CONFIGURED (1<<1) +#define UDP_GLOBAL_STATE_SEND_RESUME_ENABLED (1<<2) +#define UDP_GLOBAL_STATE_RESUME_RECEIVED (1<<3) +#define UDP_GLOBAL_STATE_REMOTE_WAKE_UP_ENABLED (1<<4) + +#define UDP_FUNCTION_ADDR_ENABLED (1<<8) + +#define UDP_INTERRUPT_ENDPOINT(x) (1<<(x)) +#define UDP_INTERRUPT_SUSPEND (1<<8) +#define UDP_INTERRUPT_RESUME (1<<9) +#define UDP_INTERRUPT_EXTERNAL_RESUME (1<<10) +#define UDP_INTERRUPT_SOF (1<<11) +#define UDP_INTERRUPT_END_OF_BUS_RESET (1<<12) +#define UDP_INTERRUPT_WAKEUP (1<<13) + +#define UDP_RESET_ENDPOINT_NUMBER(x) (1<<(x)) + +#define UDP_CSR_TX_PACKET_ACKED (1<<0) +#define UDP_CSR_RX_PACKET_RECEIVED_BANK_0 (1<<1) +#define UDP_CSR_RX_HAVE_READ_SETUP_DATA (1<<2) +#define UDP_CSR_STALL_SENT (1<<3) +#define UDP_CSR_TX_PACKET (1<<4) +#define UDP_CSR_FORCE_STALL (1<<5) +#define UDP_CSR_RX_PACKET_RECEIVED_BANK_1 (1<<6) +#define UDP_CSR_CONTROL_DATA_DIR (1<<7) +#define UDP_CSR_EPTYPE_CONTROL (0<<8) +#define UDP_CSR_EPTYPE_ISOCHRON_OUT (1<<8) +#define UDP_CSR_EPTYPE_ISOCHRON_IN (5<<8) +#define UDP_CSR_EPTYPE_BULK_OUT (2<<8) +#define UDP_CSR_EPTYPE_BULK_IN (6<<8) +#define UDP_CSR_EPTYPE_INTERRUPT_OUT (3<<8) +#define UDP_CSR_EPTYPE_INTERRUPT_IN (7<<8) +#define UDP_CSR_IS_DATA1 (1<<11) +#define UDP_CSR_ENABLE_EP (1<<15) +#define UDP_CSR_BYTES_RECEIVED(x) (((x) >> 16) & 0x7ff) + +#define UDP_TRANSCEIVER_CTRL_DISABLE (1<<8) + +//------------- +// Power Management Controller + +#define PMC_BASE (0xfffffc00) + +#define PMC_SYS_CLK_ENABLE REG(PMC_BASE+0x0000) +#define PMC_SYS_CLK_DISABLE REG(PMC_BASE+0x0004) +#define PMC_SYS_CLK_STATUS REG(PMC_BASE+0x0008) +#define PMC_PERIPHERAL_CLK_ENABLE REG(PMC_BASE+0x0010) +#define PMC_PERIPHERAL_CLK_DISABLE REG(PMC_BASE+0x0014) +#define PMC_PERIPHERAL_CLK_STATUS REG(PMC_BASE+0x0018) +#define PMC_MAIN_OSCILLATOR REG(PMC_BASE+0x0020) +#define PMC_MAIN_CLK_FREQUENCY REG(PMC_BASE+0x0024) +#define PMC_PLL REG(PMC_BASE+0x002c) +#define PMC_MASTER_CLK REG(PMC_BASE+0x0030) +#define PMC_PROGRAMMABLE_CLK_0 REG(PMC_BASE+0x0040) +#define PMC_PROGRAMMABLE_CLK_1 REG(PMC_BASE+0x0044) +#define PMC_INTERRUPT_ENABLE REG(PMC_BASE+0x0060) +#define PMC_INTERRUPT_DISABLE REG(PMC_BASE+0x0064) +#define PMC_INTERRUPT_STATUS REG(PMC_BASE+0x0068) +#define PMC_INTERRUPT_MASK REG(PMC_BASE+0x006c) + +#define PMC_SYS_CLK_PROCESSOR_CLK (1<<0) +#define PMC_SYS_CLK_UDP_CLK (1<<7) +#define PMC_SYS_CLK_PROGRAMMABLE_CLK_0 (1<<8) +#define PMC_SYS_CLK_PROGRAMMABLE_CLK_1 (1<<9) +#define PMC_SYS_CLK_PROGRAMMABLE_CLK_2 (1<<10) + +#define PMC_MAIN_OSCILLATOR_STABILIZED (1<<0) +#define PMC_MAIN_OSCILLATOR_PLL_LOCK (1<<2) +#define PMC_MAIN_OSCILLATOR_MCK_READY (1<<3) +#define PMC_MAIN_OSCILLATOR_ENABLE (1<<0) +#define PMC_MAIN_OSCILLATOR_BYPASS (1<<1) +#define PMC_MAIN_OSCILLATOR_STARTUP_DELAY(x) ((x)<<8) + +#define PMC_PLL_DIVISOR(x) (x) +#define PMC_PLL_COUNT_BEFORE_LOCK(x) ((x)<<8) +#define PMC_PLL_FREQUENCY_RANGE(x) ((x)<<14) +#define PMC_PLL_MULTIPLIER(x) (((x)-1)<<16) +#define PMC_PLL_USB_DIVISOR(x) ((x)<<28) + +#define PMC_CLK_SELECTION_PLL_CLOCK (3<<0) +#define PMC_CLK_SELECTION_MAIN_CLOCK (1<<0) +#define PMC_CLK_SELECTION_SLOW_CLOCK (0<<0) +#define PMC_CLK_PRESCALE_DIV_1 (0<<2) +#define PMC_CLK_PRESCALE_DIV_2 (1<<2) +#define PMC_CLK_PRESCALE_DIV_4 (2<<2) +#define PMC_CLK_PRESCALE_DIV_8 (3<<2) +#define PMC_CLK_PRESCALE_DIV_16 (4<<2) +#define PMC_CLK_PRESCALE_DIV_32 (5<<2) +#define PMC_CLK_PRESCALE_DIV_64 (6<<2) + +//------------- +// Serial Peripheral Interface (SPI) + +#define SPI_BASE (0xfffe0000) + +#define SPI_CONTROL REG(SPI_BASE+0x00) +#define SPI_MODE REG(SPI_BASE+0x04) +#define SPI_RX_DATA REG(SPI_BASE+0x08) +#define SPI_TX_DATA REG(SPI_BASE+0x0c) +#define SPI_STATUS REG(SPI_BASE+0x10) +#define SPI_INTERRUPT_ENABLE REG(SPI_BASE+0x14) +#define SPI_INTERRUPT_DISABLE REG(SPI_BASE+0x18) +#define SPI_INTERRUPT_MASK REG(SPI_BASE+0x1c) +#define SPI_FOR_CHIPSEL_0 REG(SPI_BASE+0x30) +#define SPI_FOR_CHIPSEL_1 REG(SPI_BASE+0x34) +#define SPI_FOR_CHIPSEL_2 REG(SPI_BASE+0x38) +#define SPI_FOR_CHIPSEL_3 REG(SPI_BASE+0x3c) + +#define SPI_CONTROL_ENABLE (1<<0) +#define SPI_CONTROL_DISABLE (1<<1) +#define SPI_CONTROL_RESET (1<<7) +#define SPI_CONTROL_LAST_TRANSFER (1<<24) + +#define SPI_MODE_MASTER (1<<0) +#define SPI_MODE_VARIABLE_CHIPSEL (1<<1) +#define SPI_MODE_CHIPSELS_DECODED (1<<2) +#define SPI_MODE_USE_DIVIDED_CLOCK (1<<3) +#define SPI_MODE_MODE_FAULT_DETECTION_OFF (1<<4) +#define SPI_MODE_LOOPBACK (1<<7) +#define SPI_MODE_CHIPSEL(x) ((x)<<16) +#define SPI_MODE_DELAY_BETWEEN_CHIPSELS(x) ((x)<<24) + +#define SPI_RX_DATA_CHIPSEL(x) (((x)>>16)&0xf) + +#define SPI_TX_DATA_CHIPSEL(x) ((x)<<16) +#define SPI_TX_DATA_LAST_TRANSFER (1<<24) + +#define SPI_STATUS_RECEIVE_FULL (1<<0) +#define SPI_STATUS_TRANSMIT_EMPTY (1<<1) +#define SPI_STATUS_MODE_FAULT (1<<2) +#define SPI_STATUS_OVERRUN (1<<3) +#define SPI_STATUS_END_OF_RX_BUFFER (1<<4) +#define SPI_STATUS_END_OF_TX_BUFFER (1<<5) +#define SPI_STATUS_RX_BUFFER_FULL (1<<6) +#define SPI_STATUS_TX_BUFFER_EMPTY (1<<7) +#define SPI_STATUS_NSS_RISING_DETECTED (1<<8) +#define SPI_STATUS_TX_EMPTY (1<<9) +#define SPI_STATUS_SPI_ENABLED (1<<16) + +#define SPI_FOR_CHIPSEL_INACTIVE_CLK_1 (1<<0) +#define SPI_FOR_CHIPSEL_PHASE (1<<1) +#define SPI_FOR_CHIPSEL_LEAVE_CHIPSEL_LOW (1<<3) +#define SPI_FOR_CHIPSEL_BITS_IN_WORD(x) ((x)<<4) +#define SPI_FOR_CHIPSEL_DIVISOR(x) ((x)<<8) +#define SPI_FOR_CHIPSEL_DELAY_BEFORE_CLK(x) ((x)<<16) +#define SPI_FOR_CHIPSEL_INTERWORD_DELAY(x) ((x)<<24) + +//------------- +// Analog to Digital Converter + +#define ADC_BASE (0xfffd8000) + +#define ADC_CONTROL REG(ADC_BASE+0x00) +#define ADC_MODE REG(ADC_BASE+0x04) +#define ADC_CHANNEL_ENABLE REG(ADC_BASE+0x10) +#define ADC_CHANNEL_DISABLE REG(ADC_BASE+0x14) +#define ADC_CHANNEL_STATUS REG(ADC_BASE+0x18) +#define ADC_STATUS REG(ADC_BASE+0x1c) +#define ADC_LAST_CONVERTED_DATA REG(ADC_BASE+0x20) +#define ADC_INTERRUPT_ENABLE REG(ADC_BASE+0x24) +#define ADC_INTERRUPT_DISABLE REG(ADC_BASE+0x28) +#define ADC_INTERRUPT_MASK REG(ADC_BASE+0x2c) +#define ADC_CHANNEL_DATA(x) REG(ADC_BASE+0x30+(4*(x))) + +#define ADC_CONTROL_RESET (1<<0) +#define ADC_CONTROL_START (1<<1) + +#define ADC_MODE_HW_TRIGGERS_ENABLED (1<<0) +#define ADC_MODE_8_BIT_RESOLUTION (1<<4) +#define ADC_MODE_SLEEP (1<<5) +#define ADC_MODE_PRESCALE(x) ((x)<<8) +#define ADC_MODE_STARTUP_TIME(x) ((x)<<16) +#define ADC_MODE_SAMPLE_HOLD_TIME(x) ((x)<<24) + +#define ADC_CHANNEL(x) (1<<(x)) + +#define ADC_END_OF_CONVERSION(x) (1<<(x)) +#define ADC_OVERRUN_ERROR(x) (1<<(8+(x))) +#define ADC_DATA_READY (1<<16) +#define ADC_GENERAL_OVERRUN (1<<17) +#define ADC_END_OF_RX_BUFFER (1<<18) +#define ADC_RX_BUFFER_FULL (1<<19) + +//------------- +// Synchronous Serial Controller + +#define SSC_BASE (0xfffd4000) + +#define SSC_CONTROL REG(SSC_BASE+0x00) +#define SSC_CLOCK_DIVISOR REG(SSC_BASE+0x04) +#define SSC_RECEIVE_CLOCK_MODE REG(SSC_BASE+0x10) +#define SSC_RECEIVE_FRAME_MODE REG(SSC_BASE+0x14) +#define SSC_TRANSMIT_CLOCK_MODE REG(SSC_BASE+0x18) +#define SSC_TRANSMIT_FRAME_MODE REG(SSC_BASE+0x1c) +#define SSC_RECEIVE_HOLDING REG(SSC_BASE+0x20) +#define SSC_TRANSMIT_HOLDING REG(SSC_BASE+0x24) +#define SSC_RECEIVE_SYNC_HOLDING REG(SSC_BASE+0x30) +#define SSC_TRANSMIT_SYNC_HOLDING REG(SSC_BASE+0x34) +#define SSC_STATUS REG(SSC_BASE+0x40) +#define SSC_INTERRUPT_ENABLE REG(SSC_BASE+0x44) +#define SSC_INTERRUPT_DISABLE REG(SSC_BASE+0x48) +#define SSC_INTERRUPT_MASK REG(SSC_BASE+0x4c) + +#define SSC_CONTROL_RX_ENABLE (1<<0) +#define SSC_CONTROL_RX_DISABLE (1<<1) +#define SSC_CONTROL_TX_ENABLE (1<<8) +#define SSC_CONTROL_TX_DISABLE (1<<9) +#define SSC_CONTROL_RESET (1<<15) + +#define SSC_CLOCK_MODE_SELECT(x) ((x)<<0) +#define SSC_CLOCK_MODE_OUTPUT(x) ((x)<<2) +#define SSC_CLOCK_MODE_INVERT (1<<5) +#define SSC_CLOCK_MODE_START(x) ((x)<<8) +#define SSC_CLOCK_MODE_START_DELAY(x) ((x)<<16) +#define SSC_CLOCK_MODE_FRAME_PERIOD(x) ((x)<<24) + +#define SSC_FRAME_MODE_BITS_IN_WORD(x) (((x)-1)<<0) +#define SSC_FRAME_MODE_LOOPBACK (1<<5) // for RX +#define SSC_FRAME_MODE_DEFAULT_IS_1 (1<<5) // for TX +#define SSC_FRAME_MODE_MSB_FIRST (1<<7) +#define SSC_FRAME_MODE_WORDS_PER_TRANSFER(x) ((x)<<8) +#define SSC_FRAME_MODE_FRAME_SYNC_LEN(x) ((x)<<16) +#define SSC_FRAME_MODE_FRAME_SYNC_TYPE(x) ((x)<<20) +#define SSC_FRAME_MODE_SYNC_DATA_ENABLE (1<<23) // for TX only +#define SSC_FRAME_MODE_NEGATIVE_EDGE (1<<24) + +#define SSC_STATUS_TX_READY (1<<0) +#define SSC_STATUS_TX_EMPTY (1<<1) +#define SSC_STATUS_TX_ENDED (1<<2) +#define SSC_STATUS_TX_BUF_EMPTY (1<<3) +#define SSC_STATUS_RX_READY (1<<4) +#define SSC_STATUS_RX_OVERRUN (1<<5) +#define SSC_STATUS_RX_ENDED (1<<6) +#define SSC_STATUS_RX_BUF_FULL (1<<7) +#define SSC_STATUS_TX_SYNC_OCCURRED (1<<10) +#define SSC_STATUS_RX_SYNC_OCCURRED (1<<11) +#define SSC_STATUS_TX_ENABLED (1<<16) +#define SSC_STATUS_RX_ENABLED (1<<17) + +//------------- +// Peripheral DMA Controller +// +// There is one set of registers for every peripheral that supports DMA. + +#define PDC_RX_POINTER(x) REG((x)+0x100) +#define PDC_RX_COUNTER(x) REG((x)+0x104) +#define PDC_TX_POINTER(x) REG((x)+0x108) +#define PDC_TX_COUNTER(x) REG((x)+0x10c) +#define PDC_RX_NEXT_POINTER(x) REG((x)+0x110) +#define PDC_RX_NEXT_COUNTER(x) REG((x)+0x114) +#define PDC_TX_NEXT_POINTER(x) REG((x)+0x118) +#define PDC_TX_NEXT_COUNTER(x) REG((x)+0x11c) +#define PDC_CONTROL(x) REG((x)+0x120) +#define PDC_STATUS(x) REG((x)+0x124) + +#define PDC_RX_ENABLE (1<<0) +#define PDC_RX_DISABLE (1<<1) +#define PDC_TX_ENABLE (1<<8) +#define PDC_TX_DISABLE (1<<9) + +#endif diff --git a/include/config_gpio.h b/include/config_gpio.h new file mode 100644 index 000000000..1a189a9ee --- /dev/null +++ b/include/config_gpio.h @@ -0,0 +1,40 @@ +#ifndef __CONFIG_GPIO_H +#define __CONFIG_GPIO_H + +#define GPIO_LED_A 0 +#define GPIO_PA1 1 +#define GPIO_LED_D 2 +#define GPIO_NVDD_ON 3 +#define GPIO_FPGA_NINIT 4 +#define GPIO_PA5 5 +#define GPIO_PCK0 6 +#define GPIO_LRST 7 +#define GPIO_LED_B 8 +#define GPIO_LED_C 9 +#define GPIO_NCS2 10 +#define GPIO_NCS0 11 +#define GPIO_MISO 12 +#define GPIO_MOSI 13 +#define GPIO_SPCK 14 +#define GPIO_SSC_FRAME 15 +#define GPIO_SSC_CLK 16 +#define GPIO_SSC_DOUT 17 +#define GPIO_SSC_DIN 18 +#define GPIO_MUXSEL_HIPKD 19 +#define GPIO_MUXSEL_LOPKD 20 +#define GPIO_MUXSEL_HIRAW 21 +#define GPIO_MUXSEL_LORAW 22 +#define GPIO_BUTTON 23 +#define GPIO_USB_PU 24 +#define GPIO_RELAY 25 +#define GPIO_FPGA_ON 26 +#define GPIO_FPGA_DONE 27 +#define GPIO_FPGA_NPROGRAM 28 +#define GPIO_FPGA_CCLK 29 +#define GPIO_FPGA_DIN 30 +#define GPIO_FPGA_DOUT 31 + +#define ANIN_AMPL_LO 4 +#define ANIN_AMPL_HI 5 + +#endif diff --git a/include/proxmark3.h b/include/proxmark3.h new file mode 100644 index 000000000..a94435e81 --- /dev/null +++ b/include/proxmark3.h @@ -0,0 +1,62 @@ +//----------------------------------------------------------------------------- +// Definitions of interest to most of the software for this project. +// Jonathan Westhues, Mar 2006 +//----------------------------------------------------------------------------- + +#ifndef __PROXMARK3_H +#define __PROXMARK3_H + +// Might as well have the hardware-specific defines everywhere. +#include + +#include +#define LOW(x) PIO_OUTPUT_DATA_CLEAR = (1 << (x)) +#define HIGH(x) PIO_OUTPUT_DATA_SET = (1 << (x)) + +#define SPI_FPGA_MODE 0 +#define SPI_LCD_MODE 1 + +typedef unsigned long DWORD; +typedef signed long SDWORD; +typedef unsigned long long QWORD; +typedef int BOOL; +typedef unsigned char BYTE; +typedef signed char SBYTE; +typedef unsigned short WORD; +typedef signed short SWORD; +#define TRUE 1 +#define FALSE 0 + +#include + +#define PACKED __attribute__((__packed__)) + +#define USB_D_PLUS_PULLUP_ON() { \ + PIO_OUTPUT_DATA_SET = (1</dev/null) -Wall +QTLDFLAGS = $(shell pkg-config --libs QtCore QtGui 2>/dev/null) + +ifneq ($(QTLDFLAGS),) +QTGUI = proxgui.o proxguiqt.o proxguiqt.moc.o +CFLAGS += -DHAVE_GUI +MOC = $(shell type moc-qt4 >/dev/null 2>&1 && echo moc-qt4 || echo moc) +LINK.o = $(LINK.cpp) +else +QTGUI = guidummy.o +endif + +all: proxmark3 snooper + +proxmark3: LDFLAGS+=$(QTLDFLAGS) +proxmark3: proxmark3.o gui.o command.o usb.o $(QTGUI) + +snooper: snooper.o gui.o command.o usb.o guidummy.o + +proxguiqt.moc.cpp: proxguiqt.h + $(MOC) -o$@ $^ + +clean: + rm -f proxmark3 snooper *.o *.moc.cpp + +.PHONY: all clean diff --git a/linux/command.c b/linux/command.c new file mode 100644 index 000000000..902045c61 --- /dev/null +++ b/linux/command.c @@ -0,0 +1,2 @@ +#include "translate.h" +#include "../winsrc/command.cpp" diff --git a/linux/flasher.c b/linux/flasher.c new file mode 100644 index 000000000..05f312494 --- /dev/null +++ b/linux/flasher.c @@ -0,0 +1,166 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "translate.h" +#include "../winsrc/prox.h" +#include "proxmark3.h" + +static DWORD ExpectedAddr; +static BYTE QueuedToSend[256]; +static BOOL AllWritten; + +static void FlushPrevious(void) +{ + UsbCommand c; + memset(&c, 0, sizeof(c)); + + printf("expected = %08x flush, ", ExpectedAddr); + + int i; + for(i = 0; i < 240; i += 48) { + c.cmd = CMD_SETUP_WRITE; + memcpy(c.d.asBytes, QueuedToSend+i, 48); + c.ext1 = (i/4); + SendCommand(&c, TRUE); + } + + c.cmd = CMD_FINISH_WRITE; + c.ext1 = (ExpectedAddr-1) & (~255); + printf("c.ext1 = %08x\r", c.ext1); + memcpy(c.d.asBytes, QueuedToSend+240, 16); + SendCommand(&c, TRUE); + + AllWritten = TRUE; +} + +static void GotByte(DWORD where, BYTE which) +{ + AllWritten = FALSE; + + if(where != ExpectedAddr) { + printf("bad: got at %08x, expected at %08x\n", where, ExpectedAddr); + exit(-1); + } + QueuedToSend[where & 255] = which; + ExpectedAddr++; + + if((where & 255) == 255) { + // we have completed a full page + FlushPrevious(); + } +} + +static int HexVal(int c) +{ + c = tolower(c); + if(c >= '0' && c <= '9') { + return c - '0'; + } else if(c >= 'a' && c <= 'f') { + return (c - 'a') + 10; + } else { + printf("bad hex digit '%c'\n", c); + exit(-1); + } +} + +static BYTE HexByte(char *s) +{ + return (HexVal(s[0]) << 4) | HexVal(s[1]); +} + +static void LoadFlashFromSRecords(char *file, int addr) +{ + ExpectedAddr = addr; + + FILE *f = fopen(file, "r"); + if(!f) { + printf("couldn't open file\n"); + exit(-1); + } + + char line[512]; + while(fgets(line, sizeof(line), f)) { + if(memcmp(line, "S3", 2)==0) { + char *s = line + 2; + int len = HexByte(s) - 5; + s += 2; + + char addrStr[9]; + memcpy(addrStr, s, 8); + addrStr[8] = '\0'; + DWORD addr; + sscanf(addrStr, "%x", &addr); + s += 8; + + int i; + for(i = 0; i < len; i++) { + while((addr+i) > ExpectedAddr) { + GotByte(ExpectedAddr, 0xff); + } + GotByte(addr+i, HexByte(s)); + s += 2; + } + } + } + + if(!AllWritten) FlushPrevious(); + + fclose(f); + printf("\ndone.\n"); +} + +int main(int argc, char **argv) { + unsigned int addr = 0; + UsbCommand c; + + if (argc != 3) { + fprintf(stderr,"Usage: %s {bootrom|os|fpga} image.s19\n", argv[0]); + exit(EXIT_FAILURE); + } + + if (!strcmp(argv[1],"bootrom")) { + addr = 0; + } else if (!strcmp(argv[1],"os")) { + addr = 0x10000; + } else if (!strcmp(argv[1],"fpga")) { + addr = 0x2000; + } else { + fprintf(stderr,"Unknown action '%s'!\n", argv[1]); + exit(EXIT_FAILURE); + } + + usb_init(); + + fprintf(stderr,"Waiting for Proxmark to appear on USB...\n"); + while(!(devh=OpenProxmark(0))) { sleep(1); } + fprintf(stderr,"Found...\n"); + + fprintf(stderr,"Entering flash-mode...\n"); + bzero(&c, sizeof(c)); + c.cmd = CMD_START_FLASH; + SendCommand(&c, FALSE); + CloseProxmark(); + sleep(1); + + fprintf(stderr,"Waiting for Proxmark to reappear on USB...\n"); + while(!(devh=OpenProxmark(0))) { sleep(1); } + fprintf(stderr,"Found...\n"); + + LoadFlashFromSRecords(argv[2], addr); + + bzero(&c, sizeof(c)); + c.cmd = CMD_HARDWARE_RESET; + SendCommand(&c, FALSE); + + CloseProxmark(); + + fprintf(stderr,"Have a nice day!\n"); + + return 0; +} diff --git a/linux/gui.c b/linux/gui.c new file mode 100644 index 000000000..6d442f0ed --- /dev/null +++ b/linux/gui.c @@ -0,0 +1,54 @@ +#include +#include +#include + +#include "proxgui.h" +#include "translate.h" +#include "../winsrc/prox.h" + +int GraphBuffer[MAX_GRAPH_TRACE_LEN]; +int GraphTraceLen; +double CursorScaleFactor; +int CommandFinished; + +static char *logfilename = "proxmark3.log"; + +void PrintToScrollback(char *fmt, ...) { + va_list argptr; + static FILE *logfile = NULL; + static int logging=1; + + if (logging && !logfile) { + logfile=fopen(logfilename, "a"); + if (!logfile) { + fprintf(stderr, "Can't open logfile, logging disabled!\n"); + logging=0; + } + } + + va_start(argptr, fmt); + vprintf(fmt, argptr); + printf("\n"); + if (logging && logfile) { +#if 0 + char zeit[25]; + time_t jetzt_t; + struct tm *jetzt; + + jetzt_t = time(NULL); + jetzt = localtime(&jetzt_t); + strftime(zeit, 25, "%b %e %T", jetzt); + + fprintf(logfile,"%s ", zeit); +#endif + vfprintf(logfile, fmt, argptr); + fprintf(logfile,"\n"); + fflush(logfile); + } + va_end(argptr); +} + +void setlogfilename(char *fn) +{ + logfilename = fn; +} diff --git a/linux/guidummy.c b/linux/guidummy.c new file mode 100644 index 000000000..39bcc7561 --- /dev/null +++ b/linux/guidummy.c @@ -0,0 +1,17 @@ +#include + +void ShowGraphWindow(void) +{ + static int warned = 0; + + if (!warned) { + printf("No GUI in this build!\n"); + warned = 1; + } +} + +void HideGraphWindow(void) {} +void RepaintGraphWindow(void) {} +void MainGraphics() {} +void InitGraphics(int argc, char **argv) {} +void ExitGraphics(void) {} diff --git a/linux/proxgui.cpp b/linux/proxgui.cpp new file mode 100644 index 000000000..7e87b5821 --- /dev/null +++ b/linux/proxgui.cpp @@ -0,0 +1,58 @@ +#include "proxgui.h" +#include "proxguiqt.h" + +static ProxGuiQT *gui = NULL; + +extern "C" void ShowGraphWindow(void) +{ + if (!gui) + return; + + gui->ShowGraphWindow(); +} + +extern "C" void HideGraphWindow(void) +{ + if (!gui) + return; + + gui->HideGraphWindow(); +} + +extern "C" void RepaintGraphWindow(void) +{ + if (!gui) + return; + + gui->RepaintGraphWindow(); +} + +extern "C" void MainGraphics(void) +{ + if (!gui) + return; + + gui->MainLoop(); +} + +extern "C" void InitGraphics(int argc, char **argv) +{ +#ifdef Q_WS_X11 + bool useGUI = getenv("DISPLAY") != 0; +#else + bool useGUI = true; +#endif + if (!useGUI) + return; + + gui = new ProxGuiQT(argc, argv); +} + +extern "C" void ExitGraphics(void) +{ + if (!gui) + return; + + delete gui; + gui = NULL; +} diff --git a/linux/proxgui.h b/linux/proxgui.h new file mode 100644 index 000000000..c1e9198fa --- /dev/null +++ b/linux/proxgui.h @@ -0,0 +1,20 @@ +#ifdef __cplusplus +extern "C" { +#endif + +void ShowGraphWindow(void); +void HideGraphWindow(void); +void RepaintGraphWindow(void); +void MainGraphics(void); +void InitGraphics(int argc, char **argv); +void ExitGraphics(void); + +#define MAX_GRAPH_TRACE_LEN (1024*128) +extern int GraphBuffer[MAX_GRAPH_TRACE_LEN]; +extern int GraphTraceLen; +extern double CursorScaleFactor; +extern int CommandFinished; + +#ifdef __cplusplus +} +#endif diff --git a/linux/proxguiqt.cpp b/linux/proxguiqt.cpp new file mode 100644 index 000000000..773d74b85 --- /dev/null +++ b/linux/proxguiqt.cpp @@ -0,0 +1,309 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "proxguiqt.h" +#include "proxgui.h" + +void ProxGuiQT::ShowGraphWindow(void) +{ + emit ShowGraphWindowSignal(); +} + +void ProxGuiQT::RepaintGraphWindow(void) +{ + emit RepaintGraphWindowSignal(); +} + +void ProxGuiQT::HideGraphWindow(void) +{ + emit HideGraphWindowSignal(); +} + +void ProxGuiQT::_ShowGraphWindow(void) +{ + if(!plotapp) + return; + + if (!plotwidget) + plotwidget = new ProxWidget(); + + plotwidget->show(); +} + +void ProxGuiQT::_RepaintGraphWindow(void) +{ + if (!plotapp || !plotwidget) + return; + + plotwidget->update(); +} + +void ProxGuiQT::_HideGraphWindow(void) +{ + if (!plotapp || !plotwidget) + return; + + plotwidget->hide(); +} + +void ProxGuiQT::MainLoop() +{ + plotapp = new QApplication(argc, argv); + + connect(this, SIGNAL(ShowGraphWindowSignal()), this, SLOT(_ShowGraphWindow())); + connect(this, SIGNAL(RepaintGraphWindowSignal()), this, SLOT(_RepaintGraphWindow())); + connect(this, SIGNAL(HideGraphWindowSignal()), this, SLOT(_HideGraphWindow())); + + plotapp->exec(); +} + +ProxGuiQT::ProxGuiQT(int argc, char **argv) : plotapp(NULL), plotwidget(NULL), + argc(argc), argv(argv) +{ +} + +ProxGuiQT::~ProxGuiQT(void) +{ + if (plotwidget) { + delete plotwidget; + plotwidget = NULL; + } + + if (plotapp) { + plotapp->quit(); + delete plotapp; + plotapp = NULL; + } +} + +void ProxWidget::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + QPainterPath penPath, whitePath, greyPath, cursorAPath, cursorBPath; + QRect r; + QBrush brush(QColor(100, 255, 100)); + QPen pen(QColor(100, 255, 100)); + + painter.setFont(QFont("Arial", 10)); + + if(GraphStart < 0) { + GraphStart = 0; + } + + r = rect(); + + painter.fillRect(r, QColor(0, 0, 0)); + + whitePath.moveTo(r.left() + 40, r.top()); + whitePath.lineTo(r.left() + 40, r.bottom()); + + int zeroHeight = r.top() + (r.bottom() - r.top()) / 2; + + greyPath.moveTo(r.left(), zeroHeight); + greyPath.lineTo(r.right(), zeroHeight); + painter.setPen(QColor(100, 100, 100)); + painter.drawPath(greyPath); + + int startMax = + (GraphTraceLen - (int)((r.right() - r.left() - 40) / GraphPixelsPerPoint)); + if(startMax < 0) { + startMax = 0; + } + if(GraphStart > startMax) { + GraphStart = startMax; + } + + int absYMax = 1; + + int i; + for(i = GraphStart; ; i++) { + if(i >= GraphTraceLen) { + break; + } + if(fabs((double)GraphBuffer[i]) > absYMax) { + absYMax = (int)fabs((double)GraphBuffer[i]); + } + int x = 40 + (int)((i - GraphStart)*GraphPixelsPerPoint); + if(x > r.right()) { + break; + } + } + + absYMax = (int)(absYMax*1.2 + 1); + + // number of points that will be plotted + int span = (int)((r.right() - r.left()) / GraphPixelsPerPoint); + // one label every 100 pixels, let us say + int labels = (r.right() - r.left() - 40) / 100; + if(labels <= 0) labels = 1; + int pointsPerLabel = span / labels; + if(pointsPerLabel <= 0) pointsPerLabel = 1; + + int yMin = INT_MAX; + int yMax = INT_MIN; + int yMean = 0; + int n = 0; + + for(i = GraphStart; ; i++) { + if(i >= GraphTraceLen) { + break; + } + int x = 40 + (int)((i - GraphStart)*GraphPixelsPerPoint); + if(x > r.right() + GraphPixelsPerPoint) { + break; + } + + int y = GraphBuffer[i]; + if(y < yMin) { + yMin = y; + } + if(y > yMax) { + yMax = y; + } + yMean += y; + n++; + + y = (y * (r.top() - r.bottom()) / (2*absYMax)) + zeroHeight; + if(i == GraphStart) { + penPath.moveTo(x, y); + } else { + penPath.lineTo(x, y); + } + + if(GraphPixelsPerPoint > 10) { + QRect f(QPoint(x - 3, y - 3),QPoint(x + 3, y + 3)); + painter.fillRect(f, brush); + } + + if(((i - GraphStart) % pointsPerLabel == 0) && i != GraphStart) { + whitePath.moveTo(x, zeroHeight - 3); + whitePath.lineTo(x, zeroHeight + 3); + + char str[100]; + sprintf(str, "+%d", (i - GraphStart)); + + painter.setPen(QColor(255, 255, 255)); + QRect size; + QFontMetrics metrics(painter.font()); + size = metrics.boundingRect(str); + painter.drawText(x - (size.right() - size.left()), zeroHeight + 9, str); + + penPath.moveTo(x,y); + } + + if(i == CursorAPos || i == CursorBPos) { + QPainterPath *cursorPath; + + if(i == CursorAPos) { + cursorPath = &cursorAPath; + } else { + cursorPath = &cursorBPath; + } + cursorPath->moveTo(x, r.top()); + cursorPath->lineTo(x, r.bottom()); + penPath.moveTo(x, y); + } + } + + if(n != 0) { + yMean /= n; + } + + painter.setPen(QColor(255, 255, 255)); + painter.drawPath(whitePath); + painter.setPen(pen); + painter.drawPath(penPath); + painter.setPen(QColor(255, 255, 0)); + painter.drawPath(cursorAPath); + painter.setPen(QColor(255, 0, 255)); + painter.drawPath(cursorBPath); + + char str[100]; + sprintf(str, "@%d max=%d min=%d mean=%d n=%d/%d dt=%d [%.3f]", + GraphStart, yMax, yMin, yMean, n, GraphTraceLen, + CursorBPos - CursorAPos, (CursorBPos - CursorAPos)/CursorScaleFactor); + + painter.setPen(QColor(255, 255, 255)); + painter.drawText(50, r.bottom() - 20, str); +} + +ProxWidget::ProxWidget(QWidget *parent) : QWidget(parent), GraphStart(0), GraphPixelsPerPoint(1) +{ + resize(600, 500); + + QPalette palette(QColor(0,0,0,0)); + palette.setColor(QPalette::WindowText, QColor(255,255,255)); + palette.setColor(QPalette::Text, QColor(255,255,255)); + palette.setColor(QPalette::Button, QColor(100, 100, 100)); + setPalette(palette); + setAutoFillBackground(true); +} + +void ProxWidget::closeEvent(QCloseEvent *event) +{ + event->ignore(); + this->hide(); +} + +void ProxWidget::mouseMoveEvent(QMouseEvent *event) +{ + int x = event->x(); + x -= 40; + x = (int)(x / GraphPixelsPerPoint); + x += GraphStart; + if((event->buttons() & Qt::LeftButton)) { + CursorAPos = x; + } else if (event->buttons() & Qt::RightButton) { + CursorBPos = x; + } + + + this->update(); +} + +void ProxWidget::keyPressEvent(QKeyEvent *event) +{ + switch(event->key()) { + case Qt::Key_Down: + if(GraphPixelsPerPoint <= 50) { + GraphPixelsPerPoint *= 2; + } + break; + + case Qt::Key_Up: + if(GraphPixelsPerPoint >= 0.02) { + GraphPixelsPerPoint /= 2; + } + break; + + case Qt::Key_Right: + if(GraphPixelsPerPoint < 20) { + GraphStart += (int)(20 / GraphPixelsPerPoint); + } else { + GraphStart++; + } + break; + + case Qt::Key_Left: + if(GraphPixelsPerPoint < 20) { + GraphStart -= (int)(20 / GraphPixelsPerPoint); + } else { + GraphStart--; + } + break; + + default: + QWidget::keyPressEvent(event); + return; + break; + } + + this->update(); +} diff --git a/linux/proxguiqt.h b/linux/proxguiqt.h new file mode 100644 index 000000000..58ff8326b --- /dev/null +++ b/linux/proxguiqt.h @@ -0,0 +1,56 @@ +#include +#include +#include +#include +#include + +class ProxWidget : public QWidget +{ + Q_OBJECT; + + private: + int GraphStart; + double GraphPixelsPerPoint; + int CursorAPos; + int CursorBPos; + + public: + ProxWidget(QWidget *parent = 0); + + protected: + void paintEvent(QPaintEvent *event); + void closeEvent(QCloseEvent *event); + void mouseMoveEvent(QMouseEvent *event); + void mousePressEvent(QMouseEvent *event) { mouseMoveEvent(event); } + void keyPressEvent(QKeyEvent *event); +}; + +class ProxGuiQT : public QObject +{ + Q_OBJECT; + + private: + QApplication *plotapp; + ProxWidget *plotwidget; + int argc; + char **argv; + void (*main_func)(void); + + public: + ProxGuiQT(int argc, char **argv); + ~ProxGuiQT(void); + void ShowGraphWindow(void); + void RepaintGraphWindow(void); + void HideGraphWindow(void); + void MainLoop(void); + + private slots: + void _ShowGraphWindow(void); + void _RepaintGraphWindow(void); + void _HideGraphWindow(void); + + signals: + void ShowGraphWindowSignal(void); + void RepaintGraphWindowSignal(void); + void HideGraphWindowSignal(void); +}; diff --git a/linux/proxmark3.c b/linux/proxmark3.c new file mode 100644 index 000000000..5a3d6f2d2 --- /dev/null +++ b/linux/proxmark3.c @@ -0,0 +1,91 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "translate.h" +#include "../winsrc/prox.h" +#include "proxmark3.h" +#include "proxgui.h" + +struct usb_receiver_arg { + int run; +}; + +static void *usb_receiver(void *targ) { + struct usb_receiver_arg *arg = (struct usb_receiver_arg*)targ; + UsbCommand cmdbuf; + + while(arg->run) { + if (ReceiveCommandP(&cmdbuf) > 0) { + int i; + + for (i=0; i " + +extern usb_dev_handle *devh; +extern unsigned char return_on_error; +extern unsigned char error_occured; + +int ReceiveCommandP(UsbCommand *c); +usb_dev_handle* OpenProxmark(int); +void CloseProxmark(void); + +void setlogfilename(char *fn); diff --git a/linux/snooper.c b/linux/snooper.c new file mode 100644 index 000000000..63fa406f7 --- /dev/null +++ b/linux/snooper.c @@ -0,0 +1,49 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "translate.h" +#include "../winsrc/prox.h" +#include "proxmark3.h" + +#define HANDLE_ERROR if (error_occured) { \ + error_occured = 0;\ + break;\ +} + +int main() +{ + usb_init(); + setlogfilename("snooper.log"); + + return_on_error = 1; + + while(1) { + while(!(devh=OpenProxmark(0))) { sleep(1); } + + while(1) { + UsbCommand cmdbuf; + int i; + + CommandReceived("hi14asnoop"); + HANDLE_ERROR + + ReceiveCommand(&cmdbuf); + HANDLE_ERROR + for (i=0; i<5; i++) { + ReceiveCommandP(&cmdbuf); + } + HANDLE_ERROR + + CommandReceived("hi14alist"); + HANDLE_ERROR + } + } + + CloseProxmark(); + return 0; +} diff --git a/linux/translate.h b/linux/translate.h new file mode 100644 index 000000000..145268a0b --- /dev/null +++ b/linux/translate.h @@ -0,0 +1,9 @@ +#define BYTE unsigned char +#define WORD unsigned short +#define DWORD unsigned int +#define TRUE 1 +#define FALSE 0 +#define BOOL int + +#define max(a,b) (((a)>(b))?(a):(b)) +#define min(a,b) (((a)>(b))?(b):(a)) diff --git a/linux/unbind-proxmark b/linux/unbind-proxmark new file mode 100755 index 000000000..986c0015d --- /dev/null +++ b/linux/unbind-proxmark @@ -0,0 +1,16 @@ +#!/bin/sh + +for i in /sys/bus/usb/devices/*; do + if grep "9ac4" "${i}/idVendor" >/dev/null 2>&1; then + echo "Found Proxmark..." + dev=`basename "${i}"` + + for j in /sys/bus/usb/drivers/usbhid/*; do + if basename "${j}"|grep "^${dev}" >/dev/null; then + bound="`basename "${j}"`" + echo "Unbinding ${bound}..." + echo -n "${bound}" >/sys/bus/usb/drivers/usbhid/unbind + fi + done + fi +done diff --git a/linux/usb.c b/linux/usb.c new file mode 100644 index 000000000..8145b64af --- /dev/null +++ b/linux/usb.c @@ -0,0 +1,171 @@ +#include +#include +#include +#include +#include +#include + +#include "translate.h" +#include "../winsrc/prox.h" +#include "proxmark3.h" + +usb_dev_handle *devh = NULL; +static unsigned int claimed_iface = 0; +unsigned char return_on_error = 0; +unsigned char error_occured = 0; + +void SendCommand(UsbCommand *c, BOOL wantAck) { + int ret; + +#if 0 + printf("Sending %d bytes\n", sizeof(UsbCommand)); +#endif + ret = usb_bulk_write(devh, 0x01, (char*)c, sizeof(UsbCommand), 1000); + if (ret<0) { + error_occured = 1; + if (return_on_error) + return; + + fprintf(stderr, "write failed: %s!\nTrying to reopen device...\n", + usb_strerror()); + + if (devh) { + usb_close(devh); + devh = NULL; + } + while(!(devh=OpenProxmark(0))) { sleep(1); } + printf(PROXPROMPT); + fflush(NULL); + + return; + } + + if(wantAck) { + UsbCommand ack; + ReceiveCommand(&ack); + if(ack.cmd != CMD_ACK) { + printf("bad ACK\n"); + exit(-1); + } + } +} + +int ReceiveCommandP(UsbCommand *c) { + int ret; + + bzero(c, sizeof(UsbCommand)); + ret = usb_bulk_read(devh, 0x82, (char*)c, sizeof(UsbCommand), 500); + if (ret<0) { + if (ret != -ETIMEDOUT) { + error_occured = 1; + if (return_on_error) + return 0; + + fprintf(stderr, "read failed: %s(%d)!\nTrying to reopen device...\n", + usb_strerror(), ret); + + if (devh) { + usb_close(devh); + devh = NULL; + } + while(!(devh=OpenProxmark(0))) { sleep(1); } + printf(PROXPROMPT); + fflush(NULL); + + return 0; + } + } else { + if (ret && (ret < sizeof(UsbCommand))) { + fprintf(stderr, "Read only %d instead of requested %d bytes!\n", + ret, (int)sizeof(UsbCommand)); + } + +#if 0 + { + int i; + + printf("Read %d bytes\n", ret); + for (i = 0; i < ret; i++) { + printf("0x%02X ", ((unsigned char*)c)[i]); + if (!((i+1)%8)) + printf("\n"); + } + printf("\n"); + } +#endif + } + + return ret; +} + +void ReceiveCommand(UsbCommand *c) { + while(ReceiveCommandP(c)<0) {} +} + +usb_dev_handle* findProxmark(int verbose, unsigned int *iface) { + struct usb_bus *busses, *bus; + usb_dev_handle *handle = NULL; + + usb_find_busses(); + usb_find_devices(); + + busses = usb_get_busses(); + + for (bus = busses; bus; bus = bus->next) { + struct usb_device *dev; + + for (dev = bus->devices; dev; dev = dev->next) { + struct usb_device_descriptor *desc = &(dev->descriptor); + + if ((desc->idProduct == 0x4b8f) && (desc->idVendor == 0x9ac4)) { + handle = usb_open(dev); + if (!handle) { + if (verbose) + fprintf(stderr, "open failed: %s!\n", usb_strerror()); + return NULL; + } + + *iface = dev->config[0].interface[0].altsetting[0].bInterfaceNumber; + + return handle; + } + } + } + + return NULL; +} + +usb_dev_handle* OpenProxmark(int verbose) { + int ret; + usb_dev_handle *handle = NULL; + unsigned int iface; + +#ifndef __APPLE__ + handle = findProxmark(verbose, &iface); + if (!handle) + return NULL; + + /* Whatever... */ + usb_reset(handle); +#endif + + handle = findProxmark(verbose, &iface); + if (!handle) + return NULL; + + ret = usb_claim_interface(handle, iface); + if (ret<0) { + if (verbose) + fprintf(stderr, "claim failed: %s!\n", usb_strerror()); + return NULL; + } + + claimed_iface = iface; + devh = handle; + return handle; +} + +void CloseProxmark(void) { + usb_release_interface(devh, claimed_iface); + usb_close(devh); +} diff --git a/linux/windows.h b/linux/windows.h new file mode 100644 index 000000000..e69de29bb diff --git a/winsrc/Makefile b/winsrc/Makefile new file mode 100644 index 000000000..b398c2c19 --- /dev/null +++ b/winsrc/Makefile @@ -0,0 +1,31 @@ +BASE_DEFS = /D_WIN32_WINNT=0x501 /DISOLATION_AWARE_ENABLED /D_WIN32_IE=0x600 /DWIN32_LEAN_AND_MEAN /DWIN32 /D_MT /D_CRT_SECURE_NO_WARNINGS +BASE_CFLAGS = /W3 /nologo + +DEFINES = $(BASE_DEFS) +CFLAGS = $(BASE_CFLAGS) /Zi /MT + +OBJDIR = obj + +OBJS = $(OBJDIR)\prox.obj \ + $(OBJDIR)\gui.obj \ + $(OBJDIR)\command.obj + +LIBS = kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib setupapi.lib + +HEADERS = prox.h + +all: $(OBJDIR)/prox.exe + copy $(OBJDIR)\prox.exe . + +clean: + del /q obj\*.obj + del /q obj\*.ilk + del /q obj\*.exe + del /q obj\*.pdb + del /q *.pdb + +$(OBJDIR)/prox.exe: $(OBJS) + $(CC) $(DEFINES) $(CFLAGS) -Fe$(OBJDIR)/prox.exe $(OBJS) $(LIBS) + +$(OBJS): $(@B).cpp $(HEADERS) + $(CC) $(CFLAGS) $(DEFINES) -c -Fo$(OBJDIR)/$(@B).obj $(@B).cpp diff --git a/winsrc/command.cpp b/winsrc/command.cpp new file mode 100644 index 000000000..1da1e1c2c --- /dev/null +++ b/winsrc/command.cpp @@ -0,0 +1,1812 @@ +//----------------------------------------------------------------------------- +// The actual command interpeter for what the user types at the command line. +// Jonathan Westhues, Sept 2005 +// Edits by Gerhard de Koning Gans, Sep 2007 (##) +//----------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include + +#include "prox.h" +#include "../common/iso14443_crc.c" + +#define arraylen(x) (sizeof(x)/sizeof((x)[0])) + +static int CmdHisamplest(char *str, int nrlow); + +static void GetFromBigBuf(BYTE *dest, int bytes) +{ + int n = bytes/4; + + if(n % 48 != 0) { + PrintToScrollback("bad len in GetFromBigBuf"); + return; + } + + int i; + for(i = 0; i < n; i += 12) { + UsbCommand c; + c.cmd = CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K; + c.ext1 = i; + SendCommand(&c, FALSE); + ReceiveCommand(&c); + if(c.cmd != CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K) { + PrintToScrollback("bad resp\n"); + return; + } + + memcpy(dest+(i*4), c.d.asBytes, 48); + } +} + +static void CmdQuit(char *str) +{ + exit(0); +} + +static void CmdHIDdemodFSK(char *str) +{ + UsbCommand c; + c.cmd = CMD_HID_DEMOD_FSK; + SendCommand(&c, FALSE); +} + +static void CmdTune(char *str) +{ + UsbCommand c; + c.cmd = CMD_MEASURE_ANTENNA_TUNING; + SendCommand(&c, FALSE); +} + +static void CmdHi15read(char *str) +{ + UsbCommand c; + c.cmd = CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_15693; + SendCommand(&c, FALSE); +} + +static void CmdHi14read(char *str) +{ + UsbCommand c; + c.cmd = CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443; + c.ext1 = atoi(str); + SendCommand(&c, FALSE); +} + +// ## New command +static void CmdHi14areader(char *str) +{ + UsbCommand c; + c.cmd = CMD_READER_ISO_14443a; + c.ext1 = atoi(str); + SendCommand(&c, FALSE); +} + +// ## New command +static void CmdHi15reader(char *str) +{ + UsbCommand c; + c.cmd = CMD_READER_ISO_15693; + c.ext1 = atoi(str); + SendCommand(&c, FALSE); +} + +// ## New command +static void CmdHi15tag(char *str) +{ + UsbCommand c; + c.cmd = CMD_SIMTAG_ISO_15693; + c.ext1 = atoi(str); + SendCommand(&c, FALSE); +} + +static void CmdHi14read_sim(char *str) +{ + UsbCommand c; + c.cmd = CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM; + c.ext1 = atoi(str); + SendCommand(&c, FALSE); +} + +static void CmdHi14readt(char *str) +{ + UsbCommand c; + c.cmd = CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443; + c.ext1 = atoi(str); + SendCommand(&c, FALSE); + + //CmdHisamplest(str); + while(CmdHisamplest(str,atoi(str))==0) { + c.cmd = CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443; + c.ext1 = atoi(str); + SendCommand(&c, FALSE); + } + RepaintGraphWindow(); +} + +static void CmdHisimlisten(char *str) +{ + UsbCommand c; + c.cmd = CMD_SIMULATE_TAG_HF_LISTEN; + SendCommand(&c, FALSE); +} + +static void CmdHi14sim(char *str) +{ + UsbCommand c; + c.cmd = CMD_SIMULATE_TAG_ISO_14443; + SendCommand(&c, FALSE); +} + + + +static void CmdHi14asim(char *str) // ## simulate iso14443a tag +{ // ## greg - added ability to specify tag UID + + unsigned int hi=0, lo=0; + int n=0, i=0; + UsbCommand c; + + while (sscanf(&str[i++], "%1x", &n ) == 1) { + hi=(hi<<4)|(lo>>28); + lo=(lo<<4)|(n&0xf); + } + + c.cmd = CMD_SIMULATE_TAG_ISO_14443a; + // c.ext should be set to *str or convert *str to the correct format for a uid + c.ext1 = hi; + c.ext2 = lo; + PrintToScrollback("Emulating 14443A TAG with UID %x%16x", hi, lo); + SendCommand(&c, FALSE); +} + +static void CmdHi14snoop(char *str) +{ + UsbCommand c; + c.cmd = CMD_SNOOP_ISO_14443; + SendCommand(&c, FALSE); +} + +static void CmdHi14asnoop(char *str) +{ + UsbCommand c; + c.cmd = CMD_SNOOP_ISO_14443a; + SendCommand(&c, FALSE); +} + +static void CmdFPGAOff(char *str) // ## FPGA Control +{ + UsbCommand c; + c.cmd = CMD_FPGA_MAJOR_MODE_OFF; + SendCommand(&c, FALSE); +} + +static void CmdLosim(char *str) +{ + int i; + + for(i = 0; i < GraphTraceLen; i += 48) { + UsbCommand c; + int j; + for(j = 0; j < 48; j++) { + c.d.asBytes[j] = GraphBuffer[i+j]; + } + c.cmd = CMD_DOWNLOADED_SIM_SAMPLES_125K; + c.ext1 = i; + SendCommand(&c, FALSE); + } + + UsbCommand c; + c.cmd = CMD_SIMULATE_TAG_125K; + c.ext1 = GraphTraceLen; + SendCommand(&c, FALSE); +} + +static void CmdLoread(char *str) +{ + UsbCommand c; + // 'h' means higher-low-frequency, 134 kHz + if(*str == 'h') { + c.ext1 = 1; + } else if (*str == '\0') { + c.ext1 = 0; + } else { + PrintToScrollback("use 'loread' or 'loread h'"); + return; + } + c.cmd = CMD_ACQUIRE_RAW_ADC_SAMPLES_125K; + SendCommand(&c, FALSE); +} + +static void CmdLosamples(char *str) +{ + int cnt = 0; + int i; + int n; + + n=atoi(str); + if (n==0) n=128; + if (n>16000) n=16000; + + for(i = 0; i < n; i += 12) { + UsbCommand c; + c.cmd = CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K; + c.ext1 = i; + SendCommand(&c, FALSE); + ReceiveCommand(&c); + if(c.cmd != CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K) { + PrintToScrollback("bad resp\n"); + return; + } + int j; + for(j = 0; j < 48; j++) { + GraphBuffer[cnt++] = ((int)c.d.asBytes[j]) - 128; + } + } + GraphTraceLen = n*4; + RepaintGraphWindow(); +} + +static void CmdBitsamples(char *str) +{ + int cnt = 0; + int i; + int n; + + n = 3072; + for(i = 0; i < n; i += 12) { + UsbCommand c; + c.cmd = CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K; + c.ext1 = i; + SendCommand(&c, FALSE); + ReceiveCommand(&c); + if(c.cmd != CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K) { + PrintToScrollback("bad resp\n"); + return; + } + int j, k; + for(j = 0; j < 48; j++) { + for(k = 0; k < 8; k++) { + if(c.d.asBytes[j] & (1 << (7 - k))) { + GraphBuffer[cnt++] = 1; + } else { + GraphBuffer[cnt++] = 0; + } + } + } + } + GraphTraceLen = cnt; + RepaintGraphWindow(); +} + +static void CmdHisamples(char *str) +{ + int cnt = 0; + int i; + int n; + n = 1000; + for(i = 0; i < n; i += 12) { + UsbCommand c; + c.cmd = CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K; + c.ext1 = i; + SendCommand(&c, FALSE); + ReceiveCommand(&c); + if(c.cmd != CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K) { + PrintToScrollback("bad resp\n"); + return; + } + int j; + for(j = 0; j < 48; j++) { + GraphBuffer[cnt++] = (int)((BYTE)c.d.asBytes[j]); + } + } + GraphTraceLen = n*4; + + RepaintGraphWindow(); +} + + +static int CmdHisamplest(char *str, int nrlow) +{ + int cnt = 0; + int t1, t2; + int i; + int n; + int hasbeennull; + int show; + + + n = 1000; + hasbeennull = 0; + for(i = 0; i < n; i += 12) { + UsbCommand c; + c.cmd = CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K; + c.ext1 = i; + SendCommand(&c, FALSE); + ReceiveCommand(&c); + if(c.cmd != CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K) { + PrintToScrollback("bad resp\n"); + return 0; + } + int j; + for(j = 0; j < 48; j++) { + t2 = (int)((BYTE)c.d.asBytes[j]); + if((t2 ^ 0xC0) & 0xC0) { hasbeennull++; } + + show = 0; + switch(show) { + case 0: + // combined + t1 = (t2 & 0x80) ^ (t2 & 0x20); + t2 = ((t2 << 1) & 0x80) ^ ((t2 << 1) & 0x20); + break; + + case 1: + // only reader + t1 = (t2 & 0x80); + t2 = ((t2 << 1) & 0x80); + break; + + case 2: + // only tag + t1 = (t2 & 0x20); + t2 = ((t2 << 1) & 0x20); + break; + + case 3: + // both, but tag with other algorithm + t1 = (t2 & 0x80) ^ (t2 & 0x08); + t2 = ((t2 << 1) & 0x80) ^ ((t2 << 1) & 0x08); + break; + } + + GraphBuffer[cnt++] = t1; + GraphBuffer[cnt++] = t2; + } + } + GraphTraceLen = n*4; +// 1130 + if(hasbeennull>nrlow || nrlow==0) { + PrintToScrollback("hasbeennull=%d", hasbeennull); + return 1; + } + else { + return 0; + } +} + + +static void CmdHexsamples(char *str) +{ + int i; + int n; + + if(atoi(str) == 0) { + n = 12; + } else { + n = atoi(str)/4; + } + + for(i = 0; i < n; i += 12) { + UsbCommand c; + c.cmd = CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K; + c.ext1 = i; + SendCommand(&c, FALSE); + ReceiveCommand(&c); + if(c.cmd != CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K) { + PrintToScrollback("bad resp\n"); + return; + } + int j; + for(j = 0; j < 48; j += 8) { + PrintToScrollback("%02x %02x %02x %02x %02x %02x %02x %02x", + c.d.asBytes[j+0], + c.d.asBytes[j+1], + c.d.asBytes[j+2], + c.d.asBytes[j+3], + c.d.asBytes[j+4], + c.d.asBytes[j+5], + c.d.asBytes[j+6], + c.d.asBytes[j+7], + c.d.asBytes[j+8] + ); + } + } +} + +static void CmdHisampless(char *str) +{ + int cnt = 0; + int i; + int n; + + if(atoi(str) == 0) { + n = 1000; + } else { + n = atoi(str)/4; + } + + for(i = 0; i < n; i += 12) { + UsbCommand c; + c.cmd = CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K; + c.ext1 = i; + SendCommand(&c, FALSE); + ReceiveCommand(&c); + if(c.cmd != CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K) { + PrintToScrollback("bad resp\n"); + return; + } + int j; + for(j = 0; j < 48; j++) { + GraphBuffer[cnt++] = (int)((signed char)c.d.asBytes[j]); + } + } + GraphTraceLen = cnt; + + RepaintGraphWindow(); +} + +static WORD Iso15693Crc(BYTE *v, int n) +{ + DWORD reg; + int i, j; + + reg = 0xffff; + for(i = 0; i < n; i++) { + reg = reg ^ ((DWORD)v[i]); + for (j = 0; j < 8; j++) { + if (reg & 0x0001) { + reg = (reg >> 1) ^ 0x8408; + } else { + reg = (reg >> 1); + } + } + } + + return (WORD)~reg; +} + +static void CmdHi14bdemod(char *str) +{ + int i, j, iold; + int isum, qsum; + int outOfWeakAt; + BOOL negateI, negateQ; + + BYTE data[256]; + int dataLen=0; + + // As received, the samples are pairs, correlations against I and Q + // square waves. So estimate angle of initial carrier (or just + // quadrant, actually), and then do the demod. + + // First, estimate where the tag starts modulating. + for(i = 0; i < GraphTraceLen; i += 2) { + if(abs(GraphBuffer[i]) + abs(GraphBuffer[i+1]) > 40) { + break; + } + } + if(i >= GraphTraceLen) { + PrintToScrollback("too weak to sync"); + return; + } + PrintToScrollback("out of weak at %d", i); + outOfWeakAt = i; + + // Now, estimate the phase in the initial modulation of the tag + isum = 0; + qsum = 0; + for(; i < (outOfWeakAt + 16); i += 2) { + isum += GraphBuffer[i+0]; + qsum += GraphBuffer[i+1]; + } + negateI = (isum < 0); + negateQ = (qsum < 0); + + // Turn the correlation pairs into soft decisions on the bit. + j = 0; + for(i = 0; i < GraphTraceLen/2; i++) { + int si = GraphBuffer[j]; + int sq = GraphBuffer[j+1]; + if(negateI) si = -si; + if(negateQ) sq = -sq; + GraphBuffer[i] = si + sq; + j += 2; + } + GraphTraceLen = i; + + i = outOfWeakAt/2; + while(GraphBuffer[i] > 0 && i < GraphTraceLen) + i++; + if(i >= GraphTraceLen) goto demodError; + + iold = i; + while(GraphBuffer[i] < 0 && i < GraphTraceLen) + i++; + if(i >= GraphTraceLen) goto demodError; + if((i - iold) > 23) goto demodError; + + PrintToScrollback("make it to demod loop"); + + for(;;) { + iold = i; + while(GraphBuffer[i] >= 0 && i < GraphTraceLen) + i++; + if(i >= GraphTraceLen) goto demodError; + if((i - iold) > 6) goto demodError; + + WORD shiftReg = 0; + if(i + 20 >= GraphTraceLen) goto demodError; + + for(j = 0; j < 10; j++) { + int soft = GraphBuffer[i] + GraphBuffer[i+1]; + + if(abs(soft) < ((abs(isum) + abs(qsum))/20)) { + PrintToScrollback("weak bit"); + } + + shiftReg >>= 1; + if(GraphBuffer[i] + GraphBuffer[i+1] >= 0) { + shiftReg |= 0x200; + } + + i+= 2; + } + + if( (shiftReg & 0x200) && + !(shiftReg & 0x001)) + { + // valid data byte, start and stop bits okay + PrintToScrollback(" %02x", (shiftReg >> 1) & 0xff); + data[dataLen++] = (shiftReg >> 1) & 0xff; + if(dataLen >= sizeof(data)) { + return; + } + } else if(shiftReg == 0x000) { + // this is EOF + break; + } else { + goto demodError; + } + } + + BYTE first, second; + ComputeCrc14443(CRC_14443_B, data, dataLen-2, &first, &second); + PrintToScrollback("CRC: %02x %02x (%s)\n", first, second, + (first == data[dataLen-2] && second == data[dataLen-1]) ? + "ok" : "****FAIL****"); + + RepaintGraphWindow(); + return; + +demodError: + PrintToScrollback("demod error"); + RepaintGraphWindow(); +} + +static void CmdHi14list(char *str) +{ + BYTE got[960]; + GetFromBigBuf(got, sizeof(got)); + + PrintToScrollback("recorded activity:"); + PrintToScrollback(" time :rssi: who bytes"); + PrintToScrollback("---------+----+----+-----------"); + + int i = 0; + int prev = -1; + + for(;;) { + if(i >= 900) { + break; + } + + BOOL isResponse; + int timestamp = *((DWORD *)(got+i)); + if(timestamp & 0x80000000) { + timestamp &= 0x7fffffff; + isResponse = 1; + } else { + isResponse = 0; + } + int metric = *((DWORD *)(got+i+4)); + + int len = got[i+8]; + + if(len > 100) { + break; + } + if(i + len >= 900) { + break; + } + + BYTE *frame = (got+i+9); + + char line[1000] = ""; + int j; + for(j = 0; j < len; j++) { + sprintf(line+(j*3), "%02x ", frame[j]); + } + + char *crc; + if(len > 2) { + BYTE b1, b2; + ComputeCrc14443(CRC_14443_B, frame, len-2, &b1, &b2); + if(b1 != frame[len-2] || b2 != frame[len-1]) { + crc = "**FAIL CRC**"; + } else { + crc = ""; + } + } else { + crc = "(SHORT)"; + } + + char metricString[100]; + if(isResponse) { + sprintf(metricString, "%3d", metric); + } else { + strcpy(metricString, " "); + } + + PrintToScrollback(" +%7d: %s: %s %s %s", + (prev < 0 ? 0 : timestamp - prev), + metricString, + (isResponse ? "TAG" : " "), line, crc); + + prev = timestamp; + i += (len + 9); + } +} + +static void CmdHi14alist(char *str) +{ + BYTE got[1920]; + GetFromBigBuf(got, sizeof(got)); + + PrintToScrollback("recorded activity:"); + PrintToScrollback(" ETU :rssi: who bytes"); + PrintToScrollback("---------+----+----+-----------"); + + int i = 0; + int prev = -1; + + for(;;) { + if(i >= 1900) { + break; + } + + BOOL isResponse; + int timestamp = *((DWORD *)(got+i)); + if(timestamp & 0x80000000) { + timestamp &= 0x7fffffff; + isResponse = 1; + } else { + isResponse = 0; + } + + int metric = 0; + int parityBits = *((DWORD *)(got+i+4)); + // 4 bytes of additional information... + // maximum of 32 additional parity bit information + // + // TODO: + // at each quarter bit period we can send power level (16 levels) + // or each half bit period in 256 levels. + + + int len = got[i+8]; + + if(len > 100) { + break; + } + if(i + len >= 1900) { + break; + } + + BYTE *frame = (got+i+9); + + // Break and stick with current result if buffer was not completely full + if(frame[0] == 0x44 && frame[1] == 0x44 && frame[3] == 0x44) { break; } + + char line[1000] = ""; + int j; + for(j = 0; j < len; j++) { + int oddparity = 0x01; + int k; + + for(k=0;k<8;k++) { + oddparity ^= (((frame[j] & 0xFF) >> k) & 0x01); + } + + //if((parityBits >> (len - j - 1)) & 0x01) { + if(isResponse && (oddparity != ((parityBits >> (len - j - 1)) & 0x01))) { + sprintf(line+(j*4), "%02x! ", frame[j]); + } + else { + sprintf(line+(j*4), "%02x ", frame[j]); + } + } + + char *crc; + crc = ""; + if(len > 2) { + BYTE b1, b2; + for(j = 0; j < (len - 1); j++) { + // gives problems... search for the reason.. + /*if(frame[j] == 0xAA) { + switch(frame[j+1]) { + case 0x01: + crc = "[1] Two drops close after each other"; + break; + case 0x02: + crc = "[2] Potential SOC with a drop in second half of bitperiod"; + break; + case 0x03: + crc = "[3] Segment Z after segment X is not possible"; + break; + case 0x04: + crc = "[4] Parity bit of a fully received byte was wrong"; + break; + default: + crc = "[?] Unknown error"; + break; + } + break; + }*/ + } + + if(strlen(crc)==0) { + ComputeCrc14443(CRC_14443_A, frame, len-2, &b1, &b2); + if(b1 != frame[len-2] || b2 != frame[len-1]) { + crc = (isResponse & (len < 6)) ? "" : " !crc"; + } else { + crc = ""; + } + } + } else { + crc = ""; // SHORT + } + + char metricString[100]; + if(isResponse) { + sprintf(metricString, "%3d", metric); + } else { + strcpy(metricString, " "); + } + + PrintToScrollback(" +%7d: %s: %s %s %s", + (prev < 0 ? 0 : (timestamp - prev)), + metricString, + (isResponse ? "TAG" : " "), line, crc); + + prev = timestamp; + i += (len + 9); + } + CommandFinished = 1; +} + +static void CmdHi15demod(char *str) +{ + // The sampling rate is 106.353 ksps/s, for T = 18.8 us + + // SOF defined as + // 1) Unmodulated time of 56.64us + // 2) 24 pulses of 423.75khz + // 3) logic '1' (unmodulated for 18.88us followed by 8 pulses of 423.75khz) + + static const int FrameSOF[] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + -1, -1, -1, -1, + -1, -1, -1, -1, + 1, 1, 1, 1, + 1, 1, 1, 1 + }; + static const int Logic0[] = { + 1, 1, 1, 1, + 1, 1, 1, 1, + -1, -1, -1, -1, + -1, -1, -1, -1 + }; + static const int Logic1[] = { + -1, -1, -1, -1, + -1, -1, -1, -1, + 1, 1, 1, 1, + 1, 1, 1, 1 + }; + + // EOF defined as + // 1) logic '0' (8 pulses of 423.75khz followed by unmodulated for 18.88us) + // 2) 24 pulses of 423.75khz + // 3) Unmodulated time of 56.64us + + static const int FrameEOF[] = { + 1, 1, 1, 1, + 1, 1, 1, 1, + -1, -1, -1, -1, + -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + }; + + int i, j; + int max = 0, maxPos; + + int skip = 4; + + if(GraphTraceLen < 1000) return; + + // First, correlate for SOF + for(i = 0; i < 100; i++) { + int corr = 0; + for(j = 0; j < arraylen(FrameSOF); j += skip) { + corr += FrameSOF[j]*GraphBuffer[i+(j/skip)]; + } + if(corr > max) { + max = corr; + maxPos = i; + } + } + PrintToScrollback("SOF at %d, correlation %d", maxPos, + max/(arraylen(FrameSOF)/skip)); + + i = maxPos + arraylen(FrameSOF)/skip; + int k = 0; + BYTE outBuf[20]; + memset(outBuf, 0, sizeof(outBuf)); + BYTE mask = 0x01; + for(;;) { + int corr0 = 0, corr1 = 0, corrEOF = 0; + for(j = 0; j < arraylen(Logic0); j += skip) { + corr0 += Logic0[j]*GraphBuffer[i+(j/skip)]; + } + for(j = 0; j < arraylen(Logic1); j += skip) { + corr1 += Logic1[j]*GraphBuffer[i+(j/skip)]; + } + for(j = 0; j < arraylen(FrameEOF); j += skip) { + corrEOF += FrameEOF[j]*GraphBuffer[i+(j/skip)]; + } + // Even things out by the length of the target waveform. + corr0 *= 4; + corr1 *= 4; + + if(corrEOF > corr1 && corrEOF > corr0) { + PrintToScrollback("EOF at %d", i); + break; + } else if(corr1 > corr0) { + i += arraylen(Logic1)/skip; + outBuf[k] |= mask; + } else { + i += arraylen(Logic0)/skip; + } + mask <<= 1; + if(mask == 0) { + k++; + mask = 0x01; + } + if((i+(int)arraylen(FrameEOF)) >= GraphTraceLen) { + PrintToScrollback("ran off end!"); + break; + } + } + if(mask != 0x01) { + PrintToScrollback("error, uneven octet! (discard extra bits!)"); + PrintToScrollback(" mask=%02x", mask); + } + PrintToScrollback("%d octets", k); + + for(i = 0; i < k; i++) { + PrintToScrollback("# %2d: %02x ", i, outBuf[i]); + } + PrintToScrollback("CRC=%04x", Iso15693Crc(outBuf, k-2)); +} + +static void CmdTiread(char *str) +{ + UsbCommand c; + c.cmd = CMD_ACQUIRE_RAW_BITS_TI_TYPE; + SendCommand(&c, FALSE); +} + +static void CmdTibits(char *str) +{ + int cnt = 0; + int i; + for(i = 0; i < 1536; i += 12) { + UsbCommand c; + c.cmd = CMD_DOWNLOAD_RAW_BITS_TI_TYPE; + c.ext1 = i; + SendCommand(&c, FALSE); + ReceiveCommand(&c); + if(c.cmd != CMD_DOWNLOADED_RAW_BITS_TI_TYPE) { + PrintToScrollback("bad resp\n"); + return; + } + int j; + for(j = 0; j < 12; j++) { + int k; + for(k = 31; k >= 0; k--) { + if(c.d.asDwords[j] & (1 << k)) { + GraphBuffer[cnt++] = 1; + } else { + GraphBuffer[cnt++] = -1; + } + } + } + } + GraphTraceLen = 1536*32; + RepaintGraphWindow(); +} + +static void CmdTidemod(char *cmdline) +{ + /* MATLAB as follows: +f_s = 2000000; % sampling frequency +f_l = 123200; % low FSK tone +f_h = 134200; % high FSK tone + +T_l = 119e-6; % low bit duration +T_h = 130e-6; % high bit duration + +l = 2*pi*ones(1, floor(f_s*T_l))*(f_l/f_s); +h = 2*pi*ones(1, floor(f_s*T_h))*(f_h/f_s); + +l = sign(sin(cumsum(l))); +h = sign(sin(cumsum(h))); + */ + static const int LowTone[] = { + 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, + 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, + 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, + -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, + -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, + -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, + 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, + 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, + 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, + -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, + -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, + 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, + }; + static const int HighTone[] = { + 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, + 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, + -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, + -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, + 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, + 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, + -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, + -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, + 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, + -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, + -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, + 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, + 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, + }; + + int convLen = max(arraylen(HighTone), arraylen(LowTone)); + + int i; + for(i = 0; i < GraphTraceLen - convLen; i++) { + int j; + int lowSum = 0, highSum = 0;; + int lowLen = arraylen(LowTone); + int highLen = arraylen(HighTone); + + for(j = 0; j < lowLen; j++) { + lowSum += LowTone[j]*GraphBuffer[i+j]; + } + for(j = 0; j < highLen; j++) { + highSum += HighTone[j]*GraphBuffer[i+j]; + } + lowSum = abs((100*lowSum) / lowLen); + highSum = abs((100*highSum) / highLen); + GraphBuffer[i] = (highSum << 16) | lowSum; + } + + for(i = 0; i < GraphTraceLen - convLen - 16; i++) { + int j; + int lowTot = 0, highTot = 0; + // 16 and 15 are f_s divided by f_l and f_h, rounded + for(j = 0; j < 16; j++) { + lowTot += (GraphBuffer[i+j] & 0xffff); + } + for(j = 0; j < 15; j++) { + highTot += (GraphBuffer[i+j] >> 16); + } + GraphBuffer[i] = lowTot - highTot; + } + + GraphTraceLen -= (convLen + 16); + + RepaintGraphWindow(); + + // Okay, so now we have unsliced soft decisions; find bit-sync, and then + // get some bits. + + int max = 0, maxPos = 0; + for(i = 0; i < 6000; i++) { + int j; + int dec = 0; + for(j = 0; j < 8*arraylen(LowTone); j++) { + dec -= GraphBuffer[i+j]; + } + for(; j < 8*arraylen(LowTone) + 8*arraylen(HighTone); j++) { + dec += GraphBuffer[i+j]; + } + if(dec > max) { + max = dec; + maxPos = i; + } + } + GraphBuffer[maxPos] = 800; + GraphBuffer[maxPos+1] = -800; + + maxPos += 8*arraylen(LowTone); + GraphBuffer[maxPos] = 800; + GraphBuffer[maxPos+1] = -800; + maxPos += 8*arraylen(HighTone); + + GraphBuffer[maxPos] = 800; + GraphBuffer[maxPos+1] = -800; + + PrintToScrollback("actual data bits start at sample %d", maxPos); + + PrintToScrollback("length %d/%d", arraylen(HighTone), arraylen(LowTone)); + + GraphBuffer[maxPos] = 800; + GraphBuffer[maxPos+1] = -800; + + BYTE bits[64+16+8+1]; + bits[sizeof(bits)-1] = '\0'; + + for(i = 0; i < arraylen(bits); i++) { + int high = 0; + int low = 0; + int j; + for(j = 0; j < arraylen(LowTone); j++) { + low -= GraphBuffer[maxPos+j]; + } + for(j = 0; j < arraylen(HighTone); j++) { + high += GraphBuffer[maxPos+j]; + } + if(high > low) { + bits[i] = '1'; + maxPos += arraylen(HighTone); + } else { + bits[i] = '.'; + maxPos += arraylen(LowTone); + } + GraphBuffer[maxPos] = 800; + GraphBuffer[maxPos+1] = -800; + } + PrintToScrollback("bits: '%s'", bits); + + DWORD h = 0, l = 0; + for(i = 0; i < 32; i++) { + if(bits[i] == '1') { + l |= (1< max) { + max = GraphBuffer[i]; + } + if(GraphBuffer[i] < min) { + min = GraphBuffer[i]; + } + } + if(max != min) { + for(i = 0; i < GraphTraceLen; i++) { + GraphBuffer[i] = (GraphBuffer[i] - ((max + min)/2))*1000/ + (max - min); + } + } + RepaintGraphWindow(); +} + +static void CmdDec(char *str) +{ + int i; + for(i = 0; i < (GraphTraceLen/2); i++) { + GraphBuffer[i] = GraphBuffer[i*2]; + } + GraphTraceLen /= 2; + PrintToScrollback("decimated by 2"); + RepaintGraphWindow(); +} + +static void CmdHpf(char *str) +{ + int i; + int accum = 0; + for(i = 10; i < GraphTraceLen; i++) { + accum += GraphBuffer[i]; + } + accum /= (GraphTraceLen - 10); + for(i = 0; i < GraphTraceLen; i++) { + GraphBuffer[i] -= accum; + } + + RepaintGraphWindow(); +} + +static void CmdZerocrossings(char *str) +{ + int i; + // Zero-crossings aren't meaningful unless the signal is zero-mean. + CmdHpf(""); + + int sign = 1; + int zc = 0; + int lastZc = 0; + for(i = 0; i < GraphTraceLen; i++) { + if(GraphBuffer[i]*sign >= 0) { + // No change in sign, reproduce the previous sample count. + zc++; + GraphBuffer[i] = lastZc; + } else { + // Change in sign, reset the sample count. + sign = -sign; + GraphBuffer[i] = lastZc; + if(sign > 0) { + lastZc = zc; + zc = 0; + } + } + } + + RepaintGraphWindow(); +} + +static void CmdLtrim(char *str) +{ + int i; + int ds = atoi(str); + + for(i = ds; i < GraphTraceLen; i++) { + GraphBuffer[i-ds] = GraphBuffer[i]; + } + GraphTraceLen -= ds; + + RepaintGraphWindow(); +} + +static void CmdAutoCorr(char *str) +{ + static int CorrelBuffer[MAX_GRAPH_TRACE_LEN]; + + int window = atoi(str); + + if(window == 0) { + PrintToScrollback("needs a window"); + return; + } + + if(window >= GraphTraceLen) { + PrintToScrollback("window must be smaller than trace (%d samples)", + GraphTraceLen); + return; + } + + PrintToScrollback("performing %d correlations", GraphTraceLen - window); + + int i; + for(i = 0; i < GraphTraceLen - window; i++) { + int sum = 0; + int j; + for(j = 0; j < window; j++) { + sum += (GraphBuffer[j]*GraphBuffer[i+j]) / 256; + } + CorrelBuffer[i] = sum; + } + GraphTraceLen = GraphTraceLen - window; + memcpy(GraphBuffer, CorrelBuffer, GraphTraceLen*sizeof(int)); + + RepaintGraphWindow(); +} + +static void CmdVchdemod(char *str) +{ + // Is this the entire sync pattern, or does this also include some + // data bits that happen to be the same everywhere? That would be + // lovely to know. + static const int SyncPattern[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + }; + + // So first, we correlate for the sync pattern, and mark that. + int bestCorrel = 0, bestPos = 0; + int i; + // It does us no good to find the sync pattern, with fewer than + // 2048 samples after it... + for(i = 0; i < (GraphTraceLen-2048); i++) { + int sum = 0; + int j; + for(j = 0; j < arraylen(SyncPattern); j++) { + sum += GraphBuffer[i+j]*SyncPattern[j]; + } + if(sum > bestCorrel) { + bestCorrel = sum; + bestPos = i; + } + } + PrintToScrollback("best sync at %d [metric %d]", bestPos, bestCorrel); + + char bits[257]; + bits[256] = '\0'; + + int worst = INT_MAX; + int worstPos; + + for(i = 0; i < 2048; i += 8) { + int sum = 0; + int j; + for(j = 0; j < 8; j++) { + sum += GraphBuffer[bestPos+i+j]; + } + if(sum < 0) { + bits[i/8] = '.'; + } else { + bits[i/8] = '1'; + } + if(abs(sum) < worst) { + worst = abs(sum); + worstPos = i; + } + } + PrintToScrollback("bits:"); + PrintToScrollback("%s", bits); + PrintToScrollback("worst metric: %d at pos %d", worst, worstPos); + + if(strcmp(str, "clone")==0) { + GraphTraceLen = 0; + char *s; + for(s = bits; *s; s++) { + int j; + for(j = 0; j < 16; j++) { + GraphBuffer[GraphTraceLen++] = (*s == '1') ? 1 : 0; + } + } + RepaintGraphWindow(); + } +} + +static void CmdFlexdemod(char *str) +{ + int i; + for(i = 0; i < GraphTraceLen; i++) { + if(GraphBuffer[i] < 0) { + GraphBuffer[i] = -1; + } else { + GraphBuffer[i] = 1; + } + } + +#define LONG_WAIT 100 + int start; + for(start = 0; start < GraphTraceLen - LONG_WAIT; start++) { + int first = GraphBuffer[start]; + for(i = start; i < start + LONG_WAIT; i++) { + if(GraphBuffer[i] != first) { + break; + } + } + if(i == (start + LONG_WAIT)) { + break; + } + } + if(start == GraphTraceLen - LONG_WAIT) { + PrintToScrollback("nothing to wait for"); + return; + } + + GraphBuffer[start] = 2; + GraphBuffer[start+1] = -2; + + BYTE bits[64]; + + int bit; + i = start; + for(bit = 0; bit < 64; bit++) { + int j; + int sum = 0; + for(j = 0; j < 16; j++) { + sum += GraphBuffer[i++]; + } + if(sum > 0) { + bits[bit] = 1; + } else { + bits[bit] = 0; + } + PrintToScrollback("bit %d sum %d", bit, sum); + } + + for(bit = 0; bit < 64; bit++) { + int j; + int sum = 0; + for(j = 0; j < 16; j++) { + sum += GraphBuffer[i++]; + } + if(sum > 0 && bits[bit] != 1) { + PrintToScrollback("oops1 at %d", bit); + } + if(sum < 0 && bits[bit] != 0) { + PrintToScrollback("oops2 at %d", bit); + } + } + + GraphTraceLen = 32*64; + i = 0; + int phase = 0; + for(bit = 0; bit < 64; bit++) { + if(bits[bit] == 0) { + phase = 0; + } else { + phase = 1; + } + int j; + for(j = 0; j < 32; j++) { + GraphBuffer[i++] = phase; + phase = !phase; + } + } + + RepaintGraphWindow(); +} + +/* + * Generic command to demodulate ASK. bit length in argument. + * Giving the bit length helps discriminate ripple effects + * upon zero crossing for noisy traces. + * + * Second is convention: positive or negative (High mod means zero + * or high mod means one) + * + * Updates the Graph trace with 0/1 values + * + * Arguments: + * sl : bit length in terms of number of samples per bit + * (use yellow/purple markers to compute). + * c : 0 or 1 + */ + +static void Cmdaskdemod(char *str) { + int i; + int sign = 1; + int n = 0; + int c = 0; + int t1 = 0; + + // TODO: complain if we do not give 2 arguments here ! + sscanf(str, "%i %i", &n, &c); + if (c == 0) { + c = 1 ; + } else { + c = -1; + } + + if (GraphBuffer[0]*c > 0) { + GraphBuffer[0] = 1; + } else { + GraphBuffer[0] = 0; + } + for(i=1;i n/4 ) { + sign = -sign; + t1=i; + if (GraphBuffer[i]*c > 0){ + GraphBuffer[i]=1; + } else { + GraphBuffer[i]=0; + } + } else { + /* This is a ripple, set the current sample value + to the same as previous */ + GraphBuffer[i] = GraphBuffer[i-1]; + } + } else { + GraphBuffer[i] = GraphBuffer[i-1]; + } + } + RepaintGraphWindow(); +} + + +/* + * Manchester demodulate a bitstream. The bitstream needs to be already in + * the GraphBuffer as 0 and 1 values + * + * Give the clock rate as argument in order to help the sync - the algorithm + * resyncs at each pulse anyway. + * + * Not optimized by any means, this is the 1st time I'm writing this type of + * routine, feel free to improve... + * + * 1st argument: clock rate (as number of samples per clock rate) + */ +static void Cmdmanchesterdemod(char *str) { + int i; + int clock; + int grouping=16; + int lastval; + int lc = 0; + int bitidx = 0; + int bitidx2; + + + sscanf(str, "%i", &clock); + + int tolerance = clock/4; + /* Holds the decoded bitstream. */ + int BitStream[MAX_GRAPH_TRACE_LEN*2]; + int BitStream2[MAX_GRAPH_TRACE_LEN]; + + /* Detect first transition */ + /* Lo-Hi (arbitrary) */ + for(i=1;i>28); + lo=(lo<<4)|(n&0xf); + } + + PrintToScrollback("Emulating tag with ID %x%16x", hi, lo); + + c.cmd = CMD_HID_SIM_TAG; + c.ext1 = hi; + c.ext2 = lo; + SendCommand(&c, FALSE); +} + +static void CmdLcdReset(char *str) +{ + UsbCommand c; + c.cmd = CMD_LCD_RESET; + c.ext1 = atoi(str); + SendCommand(&c, FALSE); +} + +static void CmdLcd(char *str) +{ + int i, j; + UsbCommand c; + c.cmd = CMD_LCD; + sscanf(str, "%x %d", &i, &j); + while (j--) { + c.ext1 = i&0x1ff; + SendCommand(&c, FALSE); + } +} + +static void CmdTest(char *str) +{ +} + +typedef void HandlerFunction(char *cmdline); + +static struct { + char *name; + HandlerFunction *handler; + char *docString; +} CommandTable[] = { + "tune", CmdTune, "measure antenna tuning", + "tiread", CmdTiread, "read a TI-type 134 kHz tag", + "tibits", CmdTibits, "get raw bits for TI-type LF tag", + "tidemod", CmdTidemod, "demod raw bits for TI-type LF tag", + "vchdemod", CmdVchdemod, "demod samples for VeriChip", + "plot", CmdPlot, "show graph window", + "hide", CmdHide, "hide graph window", + "losim", CmdLosim, "simulate LF tag", + "loread", CmdLoread, "read (125/134 kHz) LF ID-only tag", + "losamples", CmdLosamples, "get raw samples for LF tag", + "hisamples", CmdHisamples, "get raw samples for HF tag", + "hisampless", CmdHisampless, "get signed raw samples, HF tag", + "hisamplest", CmdHi14readt, "get samples HF, for testing", + "higet", CmdHi14read_sim, "get samples HF, 'analog'", + "bitsamples", CmdBitsamples, "get raw samples as bitstring", + "hexsamples", CmdHexsamples, "dump big buffer as hex bytes", + "hi15read", CmdHi15read, "read HF tag (ISO 15693)", + "hi15reader", CmdHi15reader, "act like an ISO15693 reader", // new command greg + "hi15sim", CmdHi15tag, "fake an ISO15693 tag", // new command greg + "hi14read", CmdHi14read, "read HF tag (ISO 14443)", + "hi14areader", CmdHi14areader, "act like an ISO14443 Type A reader", // ## New reader command + "hi15demod", CmdHi15demod, "demod ISO15693 from tag", + "hi14bdemod", CmdHi14bdemod, "demod ISO14443 Type B from tag", + "autocorr", CmdAutoCorr, "autocorrelation over window", + "norm", CmdNorm, "normalize max/min to +/-500", + "dec", CmdDec, "decimate", + "hpf", CmdHpf, "remove DC offset from trace", + "zerocrossings", CmdZerocrossings, "count time between zero-crossings", + "ltrim", CmdLtrim, "trim from left of trace", + "scale", CmdScale, "set cursor display scale", + "flexdemod", CmdFlexdemod, "demod samples for FlexPass", + "save", CmdSave, "save trace (from graph window)", + "load", CmdLoad, "load trace (to graph window", + "hisimlisten", CmdHisimlisten, "get HF samples as fake tag", + "hi14sim", CmdHi14sim, "fake ISO 14443 tag", + "hi14asim", CmdHi14asim, "fake ISO 14443a tag", // ## Simulate 14443a tag + "hi14snoop", CmdHi14snoop, "eavesdrop ISO 14443", + "hi14asnoop", CmdHi14asnoop, "eavesdrop ISO 14443 Type A", // ## New snoop command + "hi14list", CmdHi14list, "list ISO 14443 history", + "hi14alist", CmdHi14alist, "list ISO 14443a history", // ## New list command + "hiddemod", CmdHiddemod, "HID Prox Card II (not optimal)", + "hidfskdemod", CmdHIDdemodFSK, "HID FSK demodulator", + "askdemod", Cmdaskdemod, "Attempt to demodulate simple ASK tags", + "hidsimtag", CmdHIDsimTAG, "HID tag simulator", + "mandemod", Cmdmanchesterdemod, "Try a Manchester demodulation on a binary stream", + "fpgaoff", CmdFPGAOff, "set FPGA off", // ## FPGA Control + "lcdreset", CmdLcdReset, "Hardware reset LCD", + "lcd", CmdLcd, "Send command/data to LCD", + "test", CmdTest, "Placeholder command for testing new code", + "quit", CmdQuit, "quit program" +}; + +//----------------------------------------------------------------------------- +// Entry point into our code: called whenever the user types a command and +// then presses Enter, which the full command line that they typed. +//----------------------------------------------------------------------------- +void CommandReceived(char *cmd) +{ + int i; + + PrintToScrollback("> %s", cmd); + + if(strcmp(cmd, "help")==0) { + PrintToScrollback("\r\nAvailable commands:"); + for(i = 0; i < sizeof(CommandTable) / sizeof(CommandTable[0]); i++) { + char line[256]; + memset(line, ' ', sizeof(line)); + strcpy(line+2, CommandTable[i].name); + line[strlen(line)] = ' '; + sprintf(line+15, " -- %s", CommandTable[i].docString); + PrintToScrollback("%s", line); + } + PrintToScrollback(""); + PrintToScrollback("and also: help, cls"); + return; + } + + for(i = 0; i < sizeof(CommandTable) / sizeof(CommandTable[0]); i++) { + char *name = CommandTable[i].name; + if(memcmp(cmd, name, strlen(name))==0 && + (cmd[strlen(name)] == ' ' || cmd[strlen(name)] == '\0')) + { + cmd += strlen(name); + while(*cmd == ' ') { + cmd++; + } + (CommandTable[i].handler)(cmd); + return; + } + } + PrintToScrollback(">> bad command '%s'", cmd); +} + +//----------------------------------------------------------------------------- +// Entry point into our code: called whenever we received a packet over USB +// that we weren't necessarily expecting, for example a debug print. +//----------------------------------------------------------------------------- +void UsbCommandReceived(UsbCommand *c) +{ + switch(c->cmd) { + case CMD_DEBUG_PRINT_STRING: { + char s[100]; + if(c->ext1 > 70 || c->ext1 < 0) { + c->ext1 = 0; + } + memcpy(s, c->d.asBytes, c->ext1); + s[c->ext1] = '\0'; + PrintToScrollback("#db# %s", s); + break; + } + + case CMD_DEBUG_PRINT_INTEGERS: + PrintToScrollback("#db# %08x, %08x, %08x\r\n", c->ext1, c->ext2, c->ext3); + break; + + case CMD_MEASURED_ANTENNA_TUNING: { + int zLf, zHf; + int vLf125, vLf134, vHf; + vLf125 = c->ext1 & 0xffff; + vLf134 = c->ext1 >> 16; + vHf = c->ext2; + zLf = c->ext3 & 0xffff; + zHf = c->ext3 >> 16; + PrintToScrollback("# LF antenna @ %3d mA / %5d mV [%d ohms] 125Khz", + vLf125/zLf, vLf125, zLf); + PrintToScrollback("# LF antenna @ %3d mA / %5d mV [%d ohms] 134Khz", + vLf134/((zLf*125)/134), vLf134, (zLf*125)/134); + PrintToScrollback("# HF antenna @ %3d mA / %5d mV [%d ohms] 13.56Mhz", + vHf/zHf, vHf, zHf); + break; + } + default: + PrintToScrollback("unrecognized command %08x\n", c->cmd); + break; + } +} diff --git a/winsrc/gui.cpp b/winsrc/gui.cpp new file mode 100644 index 000000000..e4e530b33 --- /dev/null +++ b/winsrc/gui.cpp @@ -0,0 +1,510 @@ +//----------------------------------------------------------------------------- +// Routines for the user interface when doing interactive things with prox +// cards; this is basically a command line thing, in one window, and then +// another window to do the graphs. +// Jonathan Westhues, Sept 2005 +//----------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include + +#include "prox.h" + +#define oops() do { \ + char line[100]; \ + sprintf(line, "Internal error at line %d file '%s'", __LINE__, \ + __FILE__); \ + MessageBox(NULL, line, "Error", MB_ICONERROR); \ + exit(-1); \ +} while(0) + +void dbp(char *str, ...) +{ + va_list f; + char buf[1024]; + va_start(f, str); + vsprintf(buf, str, f); + OutputDebugString(buf); + OutputDebugString("\n"); +} + +int GraphBuffer[MAX_GRAPH_TRACE_LEN]; +int GraphTraceLen; + +HPEN GreyPen, GreenPen, WhitePen, YellowPen; +HBRUSH GreenBrush, YellowBrush; + +static int GraphStart = 0; +static double GraphPixelsPerPoint = 1; + +static int CursorAPos; +static int CursorBPos; +double CursorScaleFactor = 1.0; +static HPEN CursorAPen; +static HPEN CursorBPen; + +static HWND CommandWindow; +static HWND GraphWindow; +static HWND ScrollbackEdit; +static HWND CommandEdit; + +#define COMMAND_HISTORY_MAX 16 +static char CommandHistory[COMMAND_HISTORY_MAX][256]; +static int CommandHistoryPos = -1; +static int CommandHistoryNext; + +static HFONT MyFixedFont; +#define FixedFont(x) SendMessage((x), WM_SETFONT, (WPARAM)MyFixedFont, TRUE) + +void ExecCmd(char *cmd) +{ + +} +int CommandFinished; + +static void ResizeCommandWindow(void) +{ + int w, h; + RECT r; + GetClientRect(CommandWindow, &r); + w = r.right - r.left; + h = r.bottom - r.top; + MoveWindow(ScrollbackEdit, 10, 10, w - 20, h - 50, TRUE); + MoveWindow(CommandEdit, 10, h - 29, w - 20, 22, TRUE); +} + +void RepaintGraphWindow(void) +{ + InvalidateRect(GraphWindow, NULL, TRUE); +} + +static LRESULT CALLBACK + CommandWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) { + case WM_DESTROY: + case WM_QUIT: + exit(0); + return 0; + + case WM_SIZE: + ResizeCommandWindow(); + return 0; + + case WM_SETFOCUS: + SetFocus(CommandEdit); + break; + + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + } + + return 1; +} + +static void PaintGraph(HDC hdc) +{ + HBRUSH brush; + HPEN pen; + + brush = GreenBrush; + pen = GreenPen; + + if(GraphStart < 0) { + GraphStart = 0; + } + + RECT r; + GetClientRect(GraphWindow, &r); + + SelectObject(hdc, WhitePen); + + MoveToEx(hdc, r.left + 40, r.top, NULL); + LineTo(hdc, r.left + 40, r.bottom); + + int zeroHeight = r.top + (r.bottom - r.top) / 2; + SelectObject(hdc, GreyPen); + MoveToEx(hdc, r.left, zeroHeight, NULL); + LineTo(hdc, r.right, zeroHeight); + + int startMax = + (GraphTraceLen - (int)((r.right - r.left - 40) / GraphPixelsPerPoint)); + if(startMax < 0) { + startMax = 0; + } + if(GraphStart > startMax) { + GraphStart = startMax; + } + + int absYMax = 1; + + SelectObject(hdc, pen); + + int i; + for(i = GraphStart; ; i++) { + if(i >= GraphTraceLen) { + break; + } + if(fabs((double)GraphBuffer[i]) > absYMax) { + absYMax = (int)fabs((double)GraphBuffer[i]); + } + int x = 40 + (int)((i - GraphStart)*GraphPixelsPerPoint); + if(x > r.right) { + break; + } + } + + absYMax = (int)(absYMax*1.2 + 1); + SelectObject(hdc, MyFixedFont); + SetTextColor(hdc, RGB(255, 255, 255)); + SetBkColor(hdc, RGB(0, 0, 0)); + + // number of points that will be plotted + int span = (int)((r.right - r.left) / GraphPixelsPerPoint); + // one label every 100 pixels, let us say + int labels = (r.right - r.left - 40) / 100; + if(labels <= 0) labels = 1; + int pointsPerLabel = span / labels; + if(pointsPerLabel <= 0) pointsPerLabel = 1; + + int yMin = INT_MAX; + int yMax = INT_MIN; + int yMean = 0; + int n = 0; + + for(i = GraphStart; ; i++) { + if(i >= GraphTraceLen) { + break; + } + int x = 40 + (int)((i - GraphStart)*GraphPixelsPerPoint); + if(x > r.right + GraphPixelsPerPoint) { + break; + } + + int y = GraphBuffer[i]; + if(y < yMin) { + yMin = y; + } + if(y > yMax) { + yMax = y; + } + yMean += y; + n++; + + y = (y * (r.top - r.bottom) / (2*absYMax)) + zeroHeight; + if(i == GraphStart) { + MoveToEx(hdc, x, y, NULL); + } else { + LineTo(hdc, x, y); + } + + if(GraphPixelsPerPoint > 10) { + RECT f; + f.left = x - 3; + f.top = y - 3; + f.right = x + 3; + f.bottom = y + 3; + FillRect(hdc, &f, brush); + } + + if(((i - GraphStart) % pointsPerLabel == 0) && i != GraphStart) { + SelectObject(hdc, WhitePen); + MoveToEx(hdc, x, zeroHeight - 3, NULL); + LineTo(hdc, x, zeroHeight + 3); + + char str[100]; + sprintf(str, "+%d", (i - GraphStart)); + SIZE size; + GetTextExtentPoint32(hdc, str, strlen(str), &size); + TextOut(hdc, x - size.cx, zeroHeight + 8, str, strlen(str)); + + SelectObject(hdc, pen); + MoveToEx(hdc, x, y, NULL); + } + + if(i == CursorAPos || i == CursorBPos) { + if(i == CursorAPos) { + SelectObject(hdc, CursorAPen); + } else { + SelectObject(hdc, CursorBPen); + } + MoveToEx(hdc, x, r.top, NULL); + LineTo(hdc, x, r.bottom); + + SelectObject(hdc, pen); + MoveToEx(hdc, x, y, NULL); + } + } + + if(n != 0) { + yMean /= n; + } + + char str[100]; + sprintf(str, "@%d max=%d min=%d mean=%d n=%d/%d dt=%d [%.3f]", + GraphStart, yMax, yMin, yMean, n, GraphTraceLen, + CursorBPos - CursorAPos, (CursorBPos - CursorAPos)/CursorScaleFactor); + TextOut(hdc, 50, r.bottom - 20, str, strlen(str)); +} + +static LRESULT CALLBACK + GraphWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) { + case WM_DESTROY: + case WM_QUIT: + GraphWindow = NULL; + return DefWindowProc(hwnd, msg, wParam, lParam); + + case WM_SIZE: + RepaintGraphWindow(); + return 0; + + case WM_PAINT: { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hwnd, &ps); + if(GraphStart < 0) { + GraphStart = 0; + } + // This draws the trace. + PaintGraph(hdc); + EndPaint(hwnd, &ps); + break; + } + case WM_KEYDOWN: + switch(wParam) { + case VK_DOWN: + if(GraphPixelsPerPoint <= 50) { + GraphPixelsPerPoint *= 2; + } + break; + + case VK_UP: + if(GraphPixelsPerPoint >= 0.02) { + GraphPixelsPerPoint /= 2; + } + break; + + case VK_RIGHT: + if(GraphPixelsPerPoint < 20) { + GraphStart += (int)(20 / GraphPixelsPerPoint); + } else { + GraphStart++; + } + break; + + case VK_LEFT: + if(GraphPixelsPerPoint < 20) { + GraphStart -= (int)(20 / GraphPixelsPerPoint); + } else { + GraphStart--; + } + break; + + default: + goto nopaint; + } + RepaintGraphWindow(); +nopaint: + break; + + case WM_LBUTTONDOWN: + case WM_RBUTTONDOWN: { + int x = LOWORD(lParam); + x -= 40; + x = (int)(x / GraphPixelsPerPoint); + x += GraphStart; + if(msg == WM_LBUTTONDOWN) { + CursorAPos = x; + } else { + CursorBPos = x; + } + RepaintGraphWindow(); + break; + } + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + } + + return 1; +} + +void PrintToScrollback(char *fmt, ...) +{ + va_list f; + char str[1024]; + strcpy(str, "\r\n"); + va_start(f, fmt); + vsprintf(str+2, fmt, f); + + static char TextBuf[1024*32]; + SendMessage(ScrollbackEdit, WM_GETTEXT, (WPARAM)sizeof(TextBuf), + (LPARAM)TextBuf); + + if(strlen(TextBuf) + strlen(str) + 1 <= sizeof(TextBuf)) { + strcat(TextBuf, str); + } else { + lstrcpyn(TextBuf, str, sizeof(TextBuf)); + } + + SendMessage(ScrollbackEdit, WM_SETTEXT, 0, (LPARAM)TextBuf); + SendMessage(ScrollbackEdit, EM_LINESCROLL, 0, (LPARAM)INT_MAX); +} + +void ShowGraphWindow(void) +{ + if(GraphWindow) return; + + GraphWindow = CreateWindowEx(0, "Graph", "graphed", + WS_OVERLAPPED | WS_BORDER | WS_MINIMIZEBOX | WS_SYSMENU | + WS_SIZEBOX | WS_VISIBLE, 200, 150, 600, 500, NULL, NULL, NULL, + NULL); + if(!GraphWindow) oops(); +} + +void HideGraphWindow(void) +{ + if(GraphWindow) { + DestroyWindow(GraphWindow); + GraphWindow = NULL; + } +} + +static void SetCommandEditTo(char *str) +{ + SendMessage(CommandEdit, WM_SETTEXT, 0, (LPARAM)str); + SendMessage(CommandEdit, EM_SETSEL, strlen(str), strlen(str)); +} + +void ShowGui(void) +{ + WNDCLASSEX wc; + memset(&wc, 0, sizeof(wc)); + wc.cbSize = sizeof(wc); + + wc.style = CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW | CS_OWNDC; + wc.lpfnWndProc = (WNDPROC)CommandWindowProc; + wc.hInstance = NULL; + wc.hbrBackground = (HBRUSH)(COLOR_BTNSHADOW); + wc.lpszClassName = "Command"; + wc.lpszMenuName = NULL; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + + if(!RegisterClassEx(&wc)) oops(); + + wc.lpszClassName = "Graph"; + wc.lpfnWndProc = (WNDPROC)GraphWindowProc; + wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); + + if(!RegisterClassEx(&wc)) oops(); + + CommandWindow = CreateWindowEx(0, "Command", "prox", + WS_OVERLAPPED | WS_BORDER | WS_MINIMIZEBOX | WS_SYSMENU | + WS_SIZEBOX | WS_VISIBLE, 20, 20, 500, 400, NULL, NULL, NULL, + NULL); + if(!CommandWindow) oops(); + + ScrollbackEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", "", + WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | ES_MULTILINE | + ES_AUTOVSCROLL | WS_VSCROLL, 0, 0, 0, 0, CommandWindow, NULL, + NULL, NULL); + + CommandEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", "", + WS_CHILD | WS_CLIPSIBLINGS | WS_TABSTOP | WS_VISIBLE | + ES_AUTOHSCROLL, 0, 0, 0, 0, CommandWindow, NULL, NULL, NULL); + + MyFixedFont = CreateFont(14, 0, 0, 0, FW_REGULAR, FALSE, FALSE, FALSE, + ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, + FF_DONTCARE, "Lucida Console"); + if(!MyFixedFont) + MyFixedFont = (HFONT)GetStockObject(SYSTEM_FONT); + + FixedFont(ScrollbackEdit); + FixedFont(CommandEdit); + + ResizeCommandWindow(); + SetFocus(CommandEdit); + + PrintToScrollback(">> Started prox, built " __DATE__ " " __TIME__); + PrintToScrollback(">> Connected to device"); + + GreyPen = CreatePen(PS_SOLID, 1, RGB(100, 100, 100)); + GreenPen = CreatePen(PS_SOLID, 1, RGB(100, 255, 100)); + YellowPen = CreatePen(PS_SOLID, 1, RGB(255, 255, 0)); + GreenBrush = CreateSolidBrush(RGB(100, 255, 100)); + YellowBrush = CreateSolidBrush(RGB(255, 255, 0)); + WhitePen = CreatePen(PS_SOLID, 1, RGB(255, 255, 255)); + + CursorAPen = CreatePen(PS_DASH, 1, RGB(255, 255, 0)); + CursorBPen = CreatePen(PS_DASH, 1, RGB(255, 0, 255)); + + MSG msg; + for(;;) { + if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { + if(msg.message == WM_KEYDOWN && msg.wParam == VK_RETURN) { + char got[1024]; + SendMessage(CommandEdit, WM_GETTEXT, (WPARAM)sizeof(got), + (LPARAM)got); + + if(strcmp(got, "cls")==0) { + SendMessage(ScrollbackEdit, WM_SETTEXT, 0, (LPARAM)""); + } else { + CommandReceived(got); + } + SendMessage(CommandEdit, WM_SETTEXT, 0, (LPARAM)""); + + // Insert it into the command history, unless it is + // identical to the previous command in the history. + int prev = CommandHistoryNext - 1; + if(prev < 0) prev += COMMAND_HISTORY_MAX; + if(strcmp(CommandHistory[prev], got) != 0) { + strcpy(CommandHistory[CommandHistoryNext], got); + CommandHistoryNext++; + if(CommandHistoryNext == COMMAND_HISTORY_MAX) { + CommandHistoryNext = 0; + } + } + CommandHistoryPos = -1; + } else if(msg.message == WM_KEYDOWN && msg.wParam == VK_UP && + msg.hwnd == CommandEdit) + { + if(CommandHistoryPos == -1) { + CommandHistoryPos = CommandHistoryNext; + } + CommandHistoryPos--; + if(CommandHistoryPos < 0) { + CommandHistoryPos = COMMAND_HISTORY_MAX-1; + } + SetCommandEditTo(CommandHistory[CommandHistoryPos]); + } else if(msg.message == WM_KEYDOWN && msg.wParam == VK_DOWN && + msg.hwnd == CommandEdit) + { + CommandHistoryPos++; + if(CommandHistoryPos >= COMMAND_HISTORY_MAX) { + CommandHistoryPos = 0; + } + SetCommandEditTo(CommandHistory[CommandHistoryPos]); + } else if(msg.message == WM_KEYDOWN && msg.wParam == VK_ESCAPE && + msg.hwnd == CommandEdit) + { + SendMessage(CommandEdit, WM_SETTEXT, 0, (LPARAM)""); + } else { + if(msg.message == WM_KEYDOWN) { + CommandHistoryPos = -1; + } + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + UsbCommand c; + if(ReceiveCommandPoll(&c)) { + UsbCommandReceived(&c); + } + + Sleep(10); + } +} diff --git a/winsrc/include/hidpi.h b/winsrc/include/hidpi.h new file mode 100644 index 000000000..e9816cf4b --- /dev/null +++ b/winsrc/include/hidpi.h @@ -0,0 +1,1787 @@ +/*++ + +Copyright (c) 1996-1998 Microsoft Corporation + +Module Name: + + HIDPI.H + +Abstract: + + Public Interface to the HID parsing library. + +Environment: + + Kernel & user mode + +--*/ + +#ifndef __HIDPI_H__ +#define __HIDPI_H__ + +#include + +// Please include "hidsdi.h" to use the user space (dll / parser) +// Please include "hidpddi.h" to use the kernel space parser + +// +// Special Link collection values for using the query functions +// +// Root collection references the collection at the base of the link +// collection tree. +// Unspecifies, references all collections in the link collection tree. +// +#define HIDP_LINK_COLLECTION_ROOT ((USHORT) -1) +#define HIDP_LINK_COLLECTION_UNSPECIFIED ((USHORT) 0) + + +typedef enum _HIDP_REPORT_TYPE +{ + HidP_Input, + HidP_Output, + HidP_Feature +} HIDP_REPORT_TYPE; + +typedef struct _USAGE_AND_PAGE +{ + USAGE Usage; + USAGE UsagePage; +} USAGE_AND_PAGE, *PUSAGE_AND_PAGE; + +#define HidP_IsSameUsageAndPage(u1, u2) ((* (PULONG) &u1) == (* (PULONG) &u2)) + +typedef struct _HIDP_BUTTON_CAPS +{ + USAGE UsagePage; + UCHAR ReportID; + BOOLEAN IsAlias; + + USHORT BitField; + USHORT LinkCollection; // A unique internal index pointer + + USAGE LinkUsage; + USAGE LinkUsagePage; + + BOOLEAN IsRange; + BOOLEAN IsStringRange; + BOOLEAN IsDesignatorRange; + BOOLEAN IsAbsolute; + + ULONG Reserved[10]; + union { + struct { + USAGE UsageMin, UsageMax; + USHORT StringMin, StringMax; + USHORT DesignatorMin, DesignatorMax; + USHORT DataIndexMin, DataIndexMax; + } Range; + struct { + USAGE Usage, Reserved1; + USHORT StringIndex, Reserved2; + USHORT DesignatorIndex, Reserved3; + USHORT DataIndex, Reserved4; + } NotRange; + }; + +} HIDP_BUTTON_CAPS, *PHIDP_BUTTON_CAPS; + + +typedef struct _HIDP_VALUE_CAPS +{ + USAGE UsagePage; + UCHAR ReportID; + BOOLEAN IsAlias; + + USHORT BitField; + USHORT LinkCollection; // A unique internal index pointer + + USAGE LinkUsage; + USAGE LinkUsagePage; + + BOOLEAN IsRange; + BOOLEAN IsStringRange; + BOOLEAN IsDesignatorRange; + BOOLEAN IsAbsolute; + + BOOLEAN HasNull; // Does this channel have a null report union + UCHAR Reserved; + USHORT BitSize; // How many bits are devoted to this value? + + USHORT ReportCount; // See Note below. Usually set to 1. + USHORT Reserved2[5]; + + ULONG UnitsExp; + ULONG Units; + + LONG LogicalMin, LogicalMax; + LONG PhysicalMin, PhysicalMax; + + union { + struct { + USAGE UsageMin, UsageMax; + USHORT StringMin, StringMax; + USHORT DesignatorMin, DesignatorMax; + USHORT DataIndexMin, DataIndexMax; + } Range; + + struct { + USAGE Usage, Reserved1; + USHORT StringIndex, Reserved2; + USHORT DesignatorIndex, Reserved3; + USHORT DataIndex, Reserved4; + } NotRange; + }; +} HIDP_VALUE_CAPS, *PHIDP_VALUE_CAPS; + +// +// Notes: +// +// ReportCount: When a report descriptor declares an Input, Output, or +// Feature main item with fewer usage declarations than the report count, then +// the last usage applies to all remaining unspecified count in that main item. +// (As an example you might have data that required many fields to describe, +// possibly buffered bytes.) In this case, only one value cap structure is +// allocated for these associtated fields, all with the same usage, and Report +// Count reflects the number of fields involved. Normally ReportCount is 1. +// To access all of the fields in such a value structure would require using +// HidP_GetUsageValueArray and HidP_SetUsageValueArray. HidP_GetUsageValue/ +// HidP_SetScaledUsageValue will also work, however, these functions will only +// work with the first field of the structure. +// + +// +// The link collection tree consists of an array of LINK_COLLECTION_NODES +// where the index into this array is the same as the collection number. +// +// Given a collection A which contains a subcollection B, A is defined to be +// the parent B, and B is defined to be the child. +// +// Given collections A, B, and C where B and C are children of A, and B was +// encountered before C in the report descriptor, B is defined as a sibling of +// C. (This implies, of course, that if B is a sibling of C, then C is NOT a +// sibling of B). +// +// B is defined as the NextSibling of C if and only if there exists NO +// child collection of A, call it D, such that B is a sibling of D and D +// is a sibling of C. +// +// E is defined to be the FirstChild of A if and only if for all children of A, +// F, that are not equivalent to E, F is a sibling of E. +// (This implies, of course, that the does not exist a child of A, call it G, +// where E is a sibling of G). In other words the first sibling is the last +// link collection found in the list. +// +// In other words, if a collection B is defined within the definition of another +// collection A, B becomes a child of A. All collections with the same parent +// are considered siblings. The FirstChild of the parent collection, A, will be +// last collection defined that has A as a parent. The order of sibling pointers +// is similarly determined. When a collection B is defined, it becomes the +// FirstChild of it's parent collection. The previously defined FirstChild of the +// parent collection becomes the NextSibling of the new collection. As new +// collections with the same parent are discovered, the chain of sibling is built. +// +// With that in mind, the following describes conclusively a data structure +// that provides direct traversal up, down, and accross the link collection +// tree. +// +// +typedef struct _HIDP_LINK_COLLECTION_NODE +{ + USAGE LinkUsage; + USAGE LinkUsagePage; + USHORT Parent; + USHORT NumberOfChildren; + USHORT NextSibling; + USHORT FirstChild; + ULONG CollectionType: 8; // As defined in 6.2.2.6 of HID spec + ULONG IsAlias : 1; // This link node is an allias of the next link node. + ULONG Reserved: 23; + PVOID UserContext; // The user can hang his coat here. +} HIDP_LINK_COLLECTION_NODE, *PHIDP_LINK_COLLECTION_NODE; + +// +// When a link collection is described by a delimiter, alias link collection +// nodes are created. (One for each usage within the delimiter). +// The parser assigns each capability description listed above only one +// link collection. +// +// If a control is defined within a collection defined by +// delimited usages, then that control is said to be within multiple link +// collections, one for each usage within the open and close delimiter tokens. +// Such multiple link collecions are said to be aliases. The first N-1 such +// collections, listed in the link collection node array, have their IsAlias +// bit set. The last such link collection is the link collection index used +// in the capabilities described above. +// Clients wishing to set a control in an aliased collection, should walk the +// collection array once for each time they see the IsAlias flag set, and use +// the last link collection as the index for the below accessor functions. +// +// NB: if IsAlias is set, then NextSibling should be one more than the current +// link collection node index. +// + +typedef PUCHAR PHIDP_REPORT_DESCRIPTOR; +typedef struct _HIDP_PREPARSED_DATA * PHIDP_PREPARSED_DATA; + +typedef struct _HIDP_CAPS +{ + USAGE Usage; + USAGE UsagePage; + USHORT InputReportByteLength; + USHORT OutputReportByteLength; + USHORT FeatureReportByteLength; + USHORT Reserved[17]; + + USHORT NumberLinkCollectionNodes; + + USHORT NumberInputButtonCaps; + USHORT NumberInputValueCaps; + USHORT NumberInputDataIndices; + + USHORT NumberOutputButtonCaps; + USHORT NumberOutputValueCaps; + USHORT NumberOutputDataIndices; + + USHORT NumberFeatureButtonCaps; + USHORT NumberFeatureValueCaps; + USHORT NumberFeatureDataIndices; +} HIDP_CAPS, *PHIDP_CAPS; + +typedef struct _HIDP_DATA +{ + USHORT DataIndex; + USHORT Reserved; + union { + ULONG RawValue; // for values + BOOLEAN On; // for buttons MUST BE TRUE for buttons. + }; +} HIDP_DATA, *PHIDP_DATA; +// +// The HIDP_DATA structure is used with HidP_GetData and HidP_SetData +// functions. +// +// The parser contiguously assigns every control (button or value) in a hid +// device a unique data index from zero to NumberXXXDataIndices -1 , inclusive. +// This value is found in the HIDP_BUTTON_CAPS and HIDP_VALUE_CAPS structures. +// +// Most clients will find the Get/Set Buttons / Value accessor functions +// sufficient to their needs, as they will allow the clients to access the +// data known to them while ignoring the other controls. +// +// More complex clients, which actually read the Button / Value Caps, and which +// do a value add service to these routines (EG Direct Input), will need to +// access all the data in the device without interest in the individual usage +// or link collection location. These are the clients that will find +// HidP_Data useful. +// + +typedef struct _HIDP_UNKNOWN_TOKEN +{ + UCHAR Token; + UCHAR Reserved[3]; + ULONG BitField; +} HIDP_UNKNOWN_TOKEN, *PHIDP_UNKNOWN_TOKEN; + +typedef struct _HIDP_EXTENDED_ATTRIBUTES +{ + UCHAR NumGlobalUnknowns; + UCHAR Reserved [3]; + PHIDP_UNKNOWN_TOKEN GlobalUnknowns; + // ... Additional attributes + ULONG Data [1]; // variableLength DO NOT ACCESS THIS FIELD +} HIDP_EXTENDED_ATTRIBUTES, *PHIDP_EXTENDED_ATTRIBUTES; + +NTSTATUS __stdcall +HidP_GetCaps ( + IN PHIDP_PREPARSED_DATA PreparsedData, + OUT PHIDP_CAPS Capabilities + ); +/*++ +Routine Description: + Returns a list of capabilities of a given hid device as described by its + preparsed data. + +Arguments: + PreparsedData The preparsed data returned from HIDCLASS. + Capabilities a HIDP_CAPS structure + +Return Value: +· HIDP_STATUS_SUCCESS +· HIDP_STATUS_INVALID_PREPARSED_DATA +--*/ + +NTSTATUS __stdcall +HidP_GetLinkCollectionNodes ( + OUT PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes, + IN OUT PULONG LinkCollectionNodesLength, + IN PHIDP_PREPARSED_DATA PreparsedData + ); +/*++ +Routine Description: + Return a list of PHIDP_LINK_COLLECTION_NODEs used to describe the link + collection tree of this hid device. See the above description of + struct _HIDP_LINK_COLLECTION_NODE. + +Arguments: + LinkCollectionNodes - a caller allocated array into which + HidP_GetLinkCollectionNodes will store the information + + LinKCollectionNodesLength - the caller sets this value to the length of the + the array in terms of number of elements. + HidP_GetLinkCollectionNodes sets this value to the actual + number of elements set. The total number of nodes required to + describe this HID device can be found in the + NumberLinkCollectionNodes field in the HIDP_CAPS structure. + +--*/ + +NTSTATUS __stdcall +HidP_GetButtonCaps ( + IN HIDP_REPORT_TYPE ReportType, + OUT PHIDP_BUTTON_CAPS ButtonCaps, + IN OUT PUSHORT ButtonCapsLength, + IN PHIDP_PREPARSED_DATA PreparsedData +); +#define HidP_GetButtonCaps(_Type_, _Caps_, _Len_, _Data_) \ + HidP_GetSpecificButtonCaps (_Type_, 0, 0, 0, _Caps_, _Len_, _Data_) +NTSTATUS __stdcall +HidP_GetSpecificButtonCaps ( + IN HIDP_REPORT_TYPE ReportType, + IN USAGE UsagePage, // Optional (0 => ignore) + IN USHORT LinkCollection, // Optional (0 => ignore) + IN USAGE Usage, // Optional (0 => ignore) + OUT PHIDP_BUTTON_CAPS ButtonCaps, + IN OUT PUSHORT ButtonCapsLength, + IN PHIDP_PREPARSED_DATA PreparsedData + ); +/*++ +Description: + HidP_GetButtonCaps returns all the buttons (binary values) that are a part + of the given report type for the Hid device represented by the given + preparsed data. + +Parameters: + ReportType One of HidP_Input, HidP_Output, or HidP_Feature. + + UsagePage A usage page value used to limit the button caps returned to + those on a given usage page. If set to 0, this parameter is + ignored. Can be used with LinkCollection and Usage parameters + to further limit the number of button caps structures returned. + + LinkCollection HIDP_LINK_COLLECTION node array index used to limit the + button caps returned to those buttons in a given link + collection. If set to 0, this parameter is + ignored. Can be used with UsagePage and Usage parameters + to further limit the number of button caps structures + returned. + + Usage A usage value used to limit the button caps returned to those + with the specified usage value. If set to 0, this parameter + is ignored. Can be used with LinkCollection and UsagePage + parameters to further limit the number of button caps + structures returned. + + ButtonCaps A _HIDP_BUTTON_CAPS array containing information about all the + binary values in the given report. This buffer is provided by + the caller. + + ButtonLength As input, this parameter specifies the length of the + ButtonCaps parameter (array) in number of array elements. + As output, this value is set to indicate how many of those + array elements were filled in by the function. The maximum number of + button caps that can be returned is found in the HIDP_CAPS + structure. If HIDP_STATUS_BUFFER_TOO_SMALL is returned, + this value contains the number of array elements needed to + successfully complete the request. + + PreparsedData The preparsed data returned from HIDCLASS. + + +Return Value +HidP_GetSpecificButtonCaps returns the following error codes: +· HIDP_STATUS_SUCCESS. +· HIDP_STATUS_INVALID_REPORT_TYPE +· HIDP_STATUS_INVALID_PREPARSED_DATA +· HIDP_STATUS_BUFFER_TOO_SMALL (all given entries however have been filled in) +· HIDP_STATUS_USAGE_NOT_FOUND +--*/ + +NTSTATUS __stdcall +HidP_GetValueCaps ( + IN HIDP_REPORT_TYPE ReportType, + OUT PHIDP_VALUE_CAPS ValueCaps, + IN OUT PUSHORT ValueCapsLength, + IN PHIDP_PREPARSED_DATA PreparsedData +); +#define HidP_GetValueCaps(_Type_, _Caps_, _Len_, _Data_) \ + HidP_GetSpecificValueCaps (_Type_, 0, 0, 0, _Caps_, _Len_, _Data_) +NTSTATUS __stdcall +HidP_GetSpecificValueCaps ( + IN HIDP_REPORT_TYPE ReportType, + IN USAGE UsagePage, // Optional (0 => ignore) + IN USHORT LinkCollection, // Optional (0 => ignore) + IN USAGE Usage, // Optional (0 => ignore) + OUT PHIDP_VALUE_CAPS ValueCaps, + IN OUT PUSHORT ValueCapsLength, + IN PHIDP_PREPARSED_DATA PreparsedData + ); +/*++ +Description: + HidP_GetValueCaps returns all the values (non-binary) that are a part + of the given report type for the Hid device represented by the given + preparsed data. + +Parameters: + ReportType One of HidP_Input, HidP_Output, or HidP_Feature. + + UsagePage A usage page value used to limit the value caps returned to + those on a given usage page. If set to 0, this parameter is + ignored. Can be used with LinkCollection and Usage parameters + to further limit the number of value caps structures returned. + + LinkCollection HIDP_LINK_COLLECTION node array index used to limit the + value caps returned to those buttons in a given link + collection. If set to 0, this parameter is + ignored. Can be used with UsagePage and Usage parameters + to further limit the number of value caps structures + returned. + + Usage A usage value used to limit the value caps returned to those + with the specified usage value. If set to 0, this parameter + is ignored. Can be used with LinkCollection and UsagePage + parameters to further limit the number of value caps + structures returned. + + ValueCaps A _HIDP_VALUE_CAPS array containing information about all the + non-binary values in the given report. This buffer is provided + by the caller. + + ValueLength As input, this parameter specifies the length of the ValueCaps + parameter (array) in number of array elements. As output, + this value is set to indicate how many of those array elements + were filled in by the function. The maximum number of + value caps that can be returned is found in the HIDP_CAPS + structure. If HIDP_STATUS_BUFFER_TOO_SMALL is returned, + this value contains the number of array elements needed to + successfully complete the request. + + PreparsedData The preparsed data returned from HIDCLASS. + + +Return Value +HidP_GetValueCaps returns the following error codes: +· HIDP_STATUS_SUCCESS. +· HIDP_STATUS_INVALID_REPORT_TYPE +· HIDP_STATUS_INVALID_PREPARSED_DATA +· HIDP_STATUS_BUFFER_TOO_SMALL (all given entries however have been filled in) +· HIDP_STATUS_USAGE_NOT_FOUND + +--*/ + +NTSTATUS __stdcall +HidP_GetExtendedAttributes ( + IN HIDP_REPORT_TYPE ReportType, + IN USHORT DataIndex, + IN PHIDP_PREPARSED_DATA PreparsedData, + OUT PHIDP_EXTENDED_ATTRIBUTES Attributes, + IN OUT PULONG LengthAttributes + ); +/*++ +Description: + Given a data index from the value or button capabilities of a given control + return any extended attributes for the control if any exist. + +Parameters: + ReportType One of HidP_Input, HidP_Output, or HidP_Feature. + + DataIndex The data index for the given control, found in the capabilities + structure for that control + + PreparsedData The preparsed data returned from HIDCLASS. + + Attributes Pointer to a buffer into which the extended attribute data will + be copied. + + LengthAttributes Length of the given buffer in bytes. + +Return Value + HIDP_STATUS_SUCCESS + HIDP_STATUS_DATA_INDEX_NOT_FOUND +--*/ + +NTSTATUS __stdcall +HidP_InitializeReportForID ( + IN HIDP_REPORT_TYPE ReportType, + IN UCHAR ReportID, + IN PHIDP_PREPARSED_DATA PreparsedData, + IN OUT PCHAR Report, + IN ULONG ReportLength + ); +/*++ + +Routine Description: + + Initialize a report based on the given report ID. + +Parameters: + + ReportType One of HidP_Input, HidP_Output, or HidP_Feature. + + PreparasedData Preparsed data structure returned by HIDCLASS + + Report Buffer which to set the data into. + + ReportLength Length of Report...Report should be at least as long as the + value indicated in the HIDP_CAPS structure for the device and + the corresponding ReportType + +Return Value + +· HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. +· HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid +· HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not equal + to the length specified in HIDP_CAPS + structure for the given ReportType +· HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device + for the given ReportType + +--*/ + +NTSTATUS __stdcall +HidP_SetData ( + IN HIDP_REPORT_TYPE ReportType, + IN PHIDP_DATA DataList, + IN OUT PULONG DataLength, + IN PHIDP_PREPARSED_DATA PreparsedData, + IN OUT PCHAR Report, + IN ULONG ReportLength + ); +/*++ + +Routine Description: + + Please Note: Since usage value arrays deal with multiple fields for + for one usage value, they cannot be used with HidP_SetData + and HidP_GetData. In this case, + HIDP_STATUS_IS_USAGE_VALUE_ARRAY will be returned. + +Parameters: + + ReportType One of HidP_Input, HidP_Output, or HidP_Feature. + + DataList Array of HIDP_DATA structures that contains the data values + that are to be set into the given report + + DataLength As input, length in array elements of DataList. As output, + contains the number of data elements set on successful + completion or an index into the DataList array to identify + the faulting HIDP_DATA value if an error code is returned. + + PreparasedData Preparsed data structure returned by HIDCLASS + + Report Buffer which to set the data into. + + ReportLength Length of Report...Report should be at least as long as the + value indicated in the HIDP_CAPS structure for the device and + the corresponding ReportType + +Return Value + HidP_SetData returns the following error codes. The report packet will + have all the data set up until the HIDP_DATA structure that caused the + error. DataLength, in the error case, will return this problem index. + +· HIDP_STATUS_SUCCESS -- upon successful insertion of all data + into the report packet. +· HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. +· HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid +· HIDP_STATUS_DATA_INDEX_NOT_FOUND -- if a HIDP_DATA structure referenced a + data index that does not exist for this + device's ReportType +· HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not equal + to the length specified in HIDP_CAPS + structure for the given ReportType +· HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device + for the given ReportType +· HIDP_STATUS_IS_USAGE_VALUE_ARRAY -- if one of the HIDP_DATA structures + references a usage value array. + DataLength will contain the index into + the array that was invalid +· HIDP_STATUS_BUTTON_NOT_PRESSED -- if a HIDP_DATA structure attempted + to unset a button that was not already + set in the Report +· HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- a HIDP_DATA structure was found with + a valid index value but is contained + in a different report than the one + currently being processed +· HIDP_STATUS_BUFFER_TOO_SMALL -- if there are not enough entries in + a given Main Array Item to report all + buttons that have been requested to be + set +--*/ + +NTSTATUS __stdcall +HidP_GetData ( + IN HIDP_REPORT_TYPE ReportType, + OUT PHIDP_DATA DataList, + IN OUT PULONG DataLength, + IN PHIDP_PREPARSED_DATA PreparsedData, + IN PCHAR Report, + IN ULONG ReportLength + ); +/*++ + +Routine Description: + + Please Note: For obvious reasons HidP_SetData and HidP_GetData will not + access UsageValueArrays. + +Parameters: + ReportType One of HidP_Input, HidP_Output, or HidP_Feature. + + DataList Array of HIDP_DATA structures that will receive the data + values that are set in the given report + + DataLength As input, length in array elements of DataList. As output, + contains the number of data elements that were successfully + set by HidP_GetData. The maximum size necessary for DataList + can be determined by calling HidP_MaxDataListLength + + PreparasedData Preparsed data structure returned by HIDCLASS + + Report Buffer which to set the data into. + + ReportLength Length of Report...Report should be at least as long as the + value indicated in the HIDP_CAPS structure for the device and + the corresponding ReportType + +Return Value + HidP_GetData returns the following error codes. + +· HIDP_STATUS_SUCCESS -- upon successful retrieval of all data + from the report packet. +· HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. +· HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid +· HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not equal + to the length specified in HIDP_CAPS + structure for the given ReportType +· HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device + for the given ReportType +· HIDP_STATUS_BUFFER_TOO_SMALL -- if there are not enough array entries in + DataList to store all the indice values + in the given report. DataLength will + contain the number of array entries + required to hold all data +--*/ + +ULONG __stdcall +HidP_MaxDataListLength ( + IN HIDP_REPORT_TYPE ReportType, + IN PHIDP_PREPARSED_DATA PreparsedData + ); +/*++ +Routine Description: + + This function returns the maximum length of HIDP_DATA elements that + HidP_GetData could return for the given report type. + +Parameters: + + ReportType One of HidP_Input, HidP_Output or HidP_Feature. + + PreparsedData Preparsed data structure returned by HIDCLASS + +Return Value: + + The length of the data list array required for the HidP_GetData function + call. If an error occurs (either HIDP_STATUS_INVALID_REPORT_TYPE or + HIDP_STATUS_INVALID_PREPARSED_DATA), this function returns 0. + +--*/ + +#define HidP_SetButtons(Rty, Up, Lco, ULi, ULe, Ppd, Rep, Rle) \ + HidP_SetUsages(Rty, Up, Lco, ULi, ULe, Ppd, Rep, Rle) + +NTSTATUS __stdcall +HidP_SetUsages ( + IN HIDP_REPORT_TYPE ReportType, + IN USAGE UsagePage, + IN USHORT LinkCollection, // Optional + IN PUSAGE UsageList, + IN OUT PULONG UsageLength, + IN PHIDP_PREPARSED_DATA PreparsedData, + IN OUT PCHAR Report, + IN ULONG ReportLength + ); +/*++ + +Routine Description: + This function sets binary values (buttons) in a report. Given an + initialized packet of correct length, it modifies the report packet so that + each element in the given list of usages has been set in the report packet. + For example, in an output report with 5 LED’s, each with a given usage, + an application could turn on any subset of these lights by placing their + usages in any order into the usage array (UsageList). HidP_SetUsages would, + in turn, set the appropriate bit or add the corresponding byte into the + HID Main Array Item. + + A properly initialized Report packet is one of the correct byte length, + and all zeros. + + NOTE: A packet that has already been set with a call to a HidP_Set routine + can also be passed in. This routine then sets processes the UsageList + in the same fashion but verifies that the ReportID already set in + Report matches the report ID for the given usages. + +Parameters: + ReportType One of HidP_Input, HidP_Output or HidP_Feature. + + UsagePage All of the usages in the usage array, which HidP_SetUsages will + set in the report, refer to this same usage page. + If a client wishes to set usages in a report for multiple + usage pages then that client needs to make multiple calls to + HidP_SetUsages for each of the usage pages. + + UsageList A usage array containing the usages that HidP_SetUsages will set in + the report packet. + + UsageLength The length of the given usage array in array elements. + The parser will set this value to the position in the usage + array where it stopped processing. If successful, UsageLength + will be unchanged. In any error condition, this parameter + reflects how many of the usages in the usage list have + actually been set by the parser. This is useful for finding + the usage in the list which caused the error. + + PreparsedData The preparsed data recevied from HIDCLASS + + Report The report packet. + + ReportLength Length of the given report packet...Must be equal to the + value reported in the HIDP_CAPS structure for the device + and corresponding report type. + +Return Value + HidP_SetUsages returns the following error codes. On error, the report packet + will be correct up until the usage element that caused the error. + +· HIDP_STATUS_SUCCESS -- upon successful insertion of all usages + into the report packet. +· HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. +· HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid +· HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not + equal to the length specified in + the HIDP_CAPS structure for the given + ReportType +· HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device + for the given ReportType +· HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- if a usage was found that exists in a + different report. If the report is + zero-initialized on entry the first + usage in the list will determine which + report ID is used. Otherwise, the + parser will verify that usage matches + the passed in report's ID +· HIDP_STATUS_USAGE_NOT_FOUND -- if the usage does not exist for any + report (no matter what the report ID) + for the given report type. +· HIDP_STATUS_BUFFER_TOO_SMALL -- if there are not enough entries in a + given Main Array Item to list all of + the given usages. The caller needs + to split his request into more than + one call +--*/ + +#define HidP_UnsetButtons(Rty, Up, Lco, ULi, ULe, Ppd, Rep, Rle) \ + HidP_UnsetUsages(Rty, Up, Lco, ULi, ULe, Ppd, Rep, Rle) + +NTSTATUS __stdcall +HidP_UnsetUsages ( + IN HIDP_REPORT_TYPE ReportType, + IN USAGE UsagePage, + IN USHORT LinkCollection, // Optional + IN PUSAGE UsageList, + IN OUT PULONG UsageLength, + IN PHIDP_PREPARSED_DATA PreparsedData, + IN OUT PCHAR Report, + IN ULONG ReportLength + ); +/*++ + +Routine Description: + This function unsets (turns off) binary values (buttons) in the report. Given + an initialized packet of correct length, it modifies the report packet so + that each element in the given list of usages has been unset in the + report packet. + + This function is the "undo" operation for SetUsages. If the given usage + is not already set in the Report, it will return an error code of + HIDP_STATUS_BUTTON_NOT_PRESSED. If the button is pressed, HidP_UnsetUsages + will unset the appropriate bit or remove the corresponding index value from + the HID Main Array Item. + + A properly initialized Report packet is one of the correct byte length, + and all zeros.. + + NOTE: A packet that has already been set with a call to a HidP_Set routine + can also be passed in. This routine then processes the UsageList + in the same fashion but verifies that the ReportID already set in + Report matches the report ID for the given usages. + +Parameters: + ReportType One of HidP_Input, HidP_Output or HidP_Feature. + + UsagePage All of the usages in the usage array, which HidP_UnsetUsages will + unset in the report, refer to this same usage page. + If a client wishes to unset usages in a report for multiple + usage pages then that client needs to make multiple calls to + HidP_UnsetUsages for each of the usage pages. + + UsageList A usage array containing the usages that HidP_UnsetUsages will + unset in the report packet. + + UsageLength The length of the given usage array in array elements. + The parser will set this value to the position in the usage + array where it stopped processing. If successful, UsageLength + will be unchanged. In any error condition, this parameter + reflects how many of the usages in the usage list have + actually been unset by the parser. This is useful for finding + the usage in the list which caused the error. + + PreparsedData The preparsed data recevied from HIDCLASS + + Report The report packet. + + ReportLength Length of the given report packet...Must be equal to the + value reported in the HIDP_CAPS structure for the device + and corresponding report type. + +Return Value + HidP_UnsetUsages returns the following error codes. On error, the report + packet will be correct up until the usage element that caused the error. + +· HIDP_STATUS_SUCCESS -- upon successful "unsetting" of all usages + in the report packet. +· HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. +· HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid +· HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not + equal to the length specified in + the HIDP_CAPS structure for the given + ReportType +· HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device + for the given ReportType +· HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- if a usage was found that exists in a + different report. If the report is + zero-initialized on entry the first + usage in the list will determine which + report ID is used. Otherwise, the + parser will verify that usage matches + the passed in report's ID +· HIDP_STATUS_USAGE_NOT_FOUND -- if the usage does not exist for any + report (no matter what the report ID) + for the given report type. +· HIDP_STATUS_BUTTON_NOT_PRESSED -- if a usage corresponds to a button that + is not already set in the given report +--*/ + +#define HidP_GetButtons(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe) \ + HidP_GetUsages(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe) + +NTSTATUS __stdcall +HidP_GetUsages ( + IN HIDP_REPORT_TYPE ReportType, + IN USAGE UsagePage, + IN USHORT LinkCollection, // Optional + OUT USAGE * UsageList, + IN OUT ULONG * UsageLength, + IN PHIDP_PREPARSED_DATA PreparsedData, + IN PCHAR Report, + IN ULONG ReportLength + ); +/*++ + +Routine Description: + This function returns the binary values (buttons) that are set in a HID + report. Given a report packet of correct length, it searches the report + packet for each usage for the given usage page and returns them in the + usage list. + +Parameters: + ReportType One of HidP_Input, HidP_Output or HidP_Feature. + + UsagePage All of the usages in the usage list, which HidP_GetUsages will + retrieve in the report, refer to this same usage page. + If the client wishes to get usages in a packet for multiple + usage pages then that client needs to make multiple calls + to HidP_GetUsages. + + LinkCollection An optional value which can limit which usages are returned + in the UsageList to those usages that exist in a specific + LinkCollection. A non-zero value indicates the index into + the HIDP_LINK_COLLECITON_NODE list returned by + HidP_GetLinkCollectionNodes of the link collection the + usage should belong to. A value of 0 indicates this + should value be ignored. + + UsageList The usage array that will contain all the usages found in + the report packet. + + UsageLength The length of the given usage array in array elements. + On input, this value describes the length of the usage list. + On output, HidP_GetUsages sets this value to the number of + usages that was found. Use HidP_MaxUsageListLength to + determine the maximum length needed to return all the usages + that a given report packet may contain. + + PreparsedData Preparsed data structure returned by HIDCLASS + + Report The report packet. + + ReportLength Length (in bytes) of the given report packet + + +Return Value + HidP_GetUsages returns the following error codes: + +· HIDP_STATUS_SUCCESS -- upon successfully retrieving all the + usages from the report packet +· HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. +· HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid +· HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not + equal to the length specified in + the HIDP_CAPS structure for the given + ReportType +· HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device + for the given ReportType +· HIDP_STATUS_BUFFER_TOO_SMALL -- if the UsageList is not big enough to + hold all the usages found in the report + packet. If this is returned, the buffer + will contain UsageLength number of + usages. Use HidP_MaxUsageListLength to + find the maximum length needed +· HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- if no usages were found but usages + that match the UsagePage and + LinkCollection specified could be found + in a report with a different report ID +· HIDP_STATUS_USAGE_NOT_FOUND -- if there are no usages in a reports for + the device and ReportType that match the + UsagePage and LinkCollection that were + specified +--*/ + +#define HidP_GetButtonsEx(Rty, LCo, BLi, ULe, Ppd, Rep, RLe) \ + HidP_GetUsagesEx(Rty, LCo, BLi, ULe, Ppd, Rep, RLe) + +NTSTATUS __stdcall +HidP_GetUsagesEx ( + IN HIDP_REPORT_TYPE ReportType, + IN USHORT LinkCollection, // Optional + OUT PUSAGE_AND_PAGE ButtonList, + IN OUT ULONG * UsageLength, + IN PHIDP_PREPARSED_DATA PreparsedData, + IN PCHAR Report, + IN ULONG ReportLength + ); + +/*++ + +Routine Description: + This function returns the binary values (buttons) in a HID report. + Given a report packet of correct length, it searches the report packet + for all buttons and returns the UsagePage and Usage for each of the buttons + it finds. + +Parameters: + ReportType One of HidP_Input, HidP_Output or HidP_Feature. + + LinkCollection An optional value which can limit which usages are returned + in the ButtonList to those usages that exist in a specific + LinkCollection. A non-zero value indicates the index into + the HIDP_LINK_COLLECITON_NODE list returned by + HidP_GetLinkCollectionNodes of the link collection the + usage should belong to. A value of 0 indicates this + should value be ignored. + + ButtonList An array of USAGE_AND_PAGE structures describing all the + buttons currently ``down'' in the device. + + UsageLength The length of the given array in terms of elements. + On input, this value describes the length of the list. On + output, HidP_GetUsagesEx sets this value to the number of + usages that were found. Use HidP_MaxUsageListLength to + determine the maximum length needed to return all the usages + that a given report packet may contain. + + PreparsedData Preparsed data returned by HIDCLASS + + Report The report packet. + + ReportLength Length (in bytes) of the given report packet. + + +Return Value + HidP_GetUsagesEx returns the following error codes: + +· HIDP_STATUS_SUCCESS -- upon successfully retrieving all the + usages from the report packet +· HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. +· HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid +· HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not + equal to the length specified in + the HIDP_CAPS structure for the given + ReportType +· HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device + for the given ReportType +· HIDP_STATUS_BUFFER_TOO_SMALL -- if ButtonList is not big enough to + hold all the usages found in the report + packet. If this is returned, the buffer + will contain UsageLength number of + usages. Use HidP_MaxUsageListLength to + find the maximum length needed +· HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- if no usages were found but usages + that match the specified LinkCollection + exist in report with a different report + ID. +· HIDP_STATUS_USAGE_NOT_FOUND -- if there are no usages in any reports that + match the LinkCollection parameter +--*/ + +#define HidP_GetButtonListLength(RTy, UPa, Ppd) \ + HidP_GetUsageListLength(Rty, UPa, Ppd) + +ULONG __stdcall +HidP_MaxUsageListLength ( + IN HIDP_REPORT_TYPE ReportType, + IN USAGE UsagePage, // Optional + IN PHIDP_PREPARSED_DATA PreparsedData + ); +/*++ +Routine Description: + This function returns the maximum number of usages that a call to + HidP_GetUsages or HidP_GetUsagesEx could return for a given HID report. + If calling for number of usages returned by HidP_GetUsagesEx, use 0 as + the UsagePage value. + +Parameters: + ReportType One of HidP_Input, HidP_Output or HidP_Feature. + + UsagePage Specifies the optional UsagePage to query for. If 0, will + return all the maximum number of usage values that could be + returned for a given ReportType. If non-zero, will return + the maximum number of usages that would be returned for the + ReportType with the given UsagePage. + + PreparsedData Preparsed data returned from HIDCLASS + +Return Value: + The length of the usage list array required for the HidP_GetUsages or + HidP_GetUsagesEx function call. If an error occurs (such as + HIDP_STATUS_INVALID_REPORT_TYPE or HIDP_INVALID_PREPARSED_DATA, this + returns 0. +--*/ + +NTSTATUS __stdcall +HidP_SetUsageValue ( + IN HIDP_REPORT_TYPE ReportType, + IN USAGE UsagePage, + IN USHORT LinkCollection, // Optional + IN USAGE Usage, + IN ULONG UsageValue, + IN PHIDP_PREPARSED_DATA PreparsedData, + IN OUT PCHAR Report, + IN ULONG ReportLength + ); +/*++ +Description: + HidP_SetUsageValue inserts a value into the HID Report Packet in the field + corresponding to the given usage page and usage. HidP_SetUsageValue + casts this value to the appropriate bit length. If a report packet + contains two different fields with the same Usage and UsagePage, + they can be distinguished with the optional LinkCollection field value. + Using this function sets the raw value into the report packet with + no checking done as to whether it actually falls within the logical + minimum/logical maximum range. Use HidP_SetScaledUsageValue for this... + + NOTE: Although the UsageValue parameter is a ULONG, any casting that is + done will preserve or sign-extend the value. The value being set + should be considered a LONG value and will be treated as such by + this function. + +Parameters: + + ReportType One of HidP_Output or HidP_Feature. + + UsagePage The usage page to which the given usage refers. + + LinkCollection (Optional) This value can be used to differentiate + between two fields that may have the same + UsagePage and Usage but exist in different + collections. If the link collection value + is zero, this function will set the first field + it finds that matches the usage page and + usage. + + Usage The usage whose value HidP_SetUsageValue will set. + + UsageValue The raw value to set in the report buffer. This value must be within + the logical range or if a NULL value this value should be the + most negative value that can be represented by the number of bits + for this field. + + PreparsedData The preparsed data returned for HIDCLASS + + Report The report packet. + + ReportLength Length (in bytes) of the given report packet. + + +Return Value: + HidP_SetUsageValue returns the following error codes: + +· HIDP_STATUS_SUCCESS -- upon successfully setting the value + in the report packet +· HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. +· HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid +· HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not + equal to the length specified in + the HIDP_CAPS structure for the given + ReportType +· HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device + for the given ReportType +· HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- the specified usage page, usage and + link collection exist but exists in + a report with a different report ID + than the report being passed in. To + set this value, call HidP_SetUsageValue + again with a zero-initizialed report + packet +· HIDP_STATUS_USAGE_NOT_FOUND -- if the usage page, usage, and link + collection combination does not exist + in any reports for this ReportType +--*/ + +NTSTATUS __stdcall +HidP_SetScaledUsageValue ( + IN HIDP_REPORT_TYPE ReportType, + IN USAGE UsagePage, + IN USHORT LinkCollection, // Optional + IN USAGE Usage, + IN LONG UsageValue, + IN PHIDP_PREPARSED_DATA PreparsedData, + IN OUT PCHAR Report, + IN ULONG ReportLength + ); + +/*++ +Description: + HidP_SetScaledUsageValue inserts the UsageValue into the HID report packet + in the field corresponding to the given usage page and usage. If a report + packet contains two different fields with the same Usage and UsagePage, + they can be distinguished with the optional LinkCollection field value. + + If the specified field has a defined physical range, this function converts + the physical value specified to the corresponding logical value for the + report. If a physical value does not exist, the function will verify that + the value specified falls within the logical range and set according. + + If the range checking fails but the field has NULL values, the function will + set the field to the defined NULL value (most negative number possible) and + return HIDP_STATUS_NULL. In other words, use this function to set NULL + values for a given field by passing in a value that falls outside the + physical range if it is defined or the logical range otherwise. + + If the field does not support NULL values, an out of range error will be + returned instead. + +Parameters: + + ReportType One of HidP_Output or HidP_Feature. + + UsagePage The usage page to which the given usage refers. + + LinkCollection (Optional) This value can be used to differentiate + between two fields that may have the same + UsagePage and Usage but exist in different + collections. If the link collection value + is zero, this function will set the first field + it finds that matches the usage page and + usage. + + Usage The usage whose value HidP_SetScaledUsageValue will set. + + UsageValue The value to set in the report buffer. See the routine + description above for the different interpretations of this + value + + PreparsedData The preparsed data returned from HIDCLASS + + Report The report packet. + + ReportLength Length (in bytes) of the given report packet. + + +Return Value: + HidP_SetScaledUsageValue returns the following error codes: + +· HIDP_STATUS_SUCCESS -- upon successfully setting the value + in the report packet +· HIDP_STATUS_NULL -- upon successfully setting the value + in the report packet as a NULL value +· HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. +· HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid +· HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not + equal to the length specified in + the HIDP_CAPS structure for the given + ReportType +· HIDP_STATUS_VALUE_OUT_OF_RANGE -- if the value specified failed to fall + within the physical range if it exists + or within the logical range otherwise + and the field specified by the usage + does not allow NULL values +· HIDP_STATUS_BAD_LOG_PHY_VALUES -- if the field has a physical range but + either the logical range is invalid + (max <= min) or the physical range is + invalid +· HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- the specified usage page, usage and + link collection exist but exists in + a report with a different report ID + than the report being passed in. To + set this value, call + HidP_SetScaledUsageValue again with + a zero-initialized report packet +· HIDP_STATUS_USAGE_NOT_FOUND -- if the usage page, usage, and link + collection combination does not exist + in any reports for this ReportType +--*/ + +NTSTATUS __stdcall +HidP_SetUsageValueArray ( + IN HIDP_REPORT_TYPE ReportType, + IN USAGE UsagePage, + IN USHORT LinkCollection, // Optional + IN USAGE Usage, + IN PCHAR UsageValue, + IN USHORT UsageValueByteLength, + IN PHIDP_PREPARSED_DATA PreparsedData, + OUT PCHAR Report, + IN ULONG ReportLength + ); + +/*++ +Routine Descripton: + A usage value array occurs when the last usage in the list of usages + describing a main item must be repeated because there are less usages defined + than there are report counts declared for the given main item. In this case + a single value cap is allocated for that usage and the report count of that + value cap is set to reflect the number of fields to which that usage refers. + + HidP_SetUsageValueArray sets the raw bits for that usage which spans + more than one field in a report. + + NOTE: This function currently does not support value arrays where the + ReportSize for each of the fields in the array is not a multiple + of 8 bits. + + The UsageValue buffer should have the values set as they would appear + in the report buffer. If this function supported non 8-bit multiples + for the ReportSize then caller should format the input buffer so that + each new value begins at the bit immediately following the last bit + of the previous value + +Parameters: + + ReportType One of HidP_Output or HidP_Feature. + + UsagePage The usage page to which the given usage refers. + + LinkCollection (Optional) This value can be used to differentiate + between two fields that may have the same + UsagePage and Usage but exist in different + collections. If the link collection value + is zero, this function will set the first field + it finds that matches the usage page and + usage. + + Usage The usage whose value array HidP_SetUsageValueArray will set. + + UsageValue The buffer with the values to set into the value array. + The number of BITS required is found by multiplying the + BitSize and ReportCount fields of the Value Cap for this + control. The least significant bit of this control found in the + given report will be placed in the least significan bit location + of the array given (little-endian format), regardless of whether + or not the field is byte alligned or if the BitSize is a multiple + of sizeof (CHAR). + + See the above note for current implementation limitations. + + UsageValueByteLength Length of the UsageValue buffer (in bytes) + + PreparsedData The preparsed data returned from HIDCLASS + + Report The report packet. + + ReportLength Length (in bytes) of the given report packet. + + +Return Value: +· HIDP_STATUS_SUCCESS -- upon successfully setting the value + array in the report packet +· HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. +· HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid +· HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not + equal to the length specified in + the HIDP_CAPS structure for the given + ReportType +· HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device + for the given ReportType +· HIDP_STATUS_NOT_VALUE_ARRAY -- if the control specified is not a + value array -- a value array will have + a ReportCount field in the + HIDP_VALUE_CAPS structure that is > 1 + Use HidP_SetUsageValue instead +· HIDP_STATUS_BUFFER_TOO_SMALL -- if the size of the passed in buffer with + the values to set is too small (ie. has + fewer values than the number of fields in + the array +· HIDP_STATUS_NOT_IMPLEMENTED -- if the usage value array has field sizes + that are not multiples of 8 bits, this + error code is returned since the function + currently does not handle setting into + such arrays. +· HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- the specified usage page, usage and + link collection exist but exists in + a report with a different report ID + than the report being passed in. To + set this value, call + HidP_SetUsageValueArray again with + a zero-initialized report packet +· HIDP_STATUS_USAGE_NOT_FOUND -- if the usage page, usage, and link + collection combination does not exist + in any reports for this ReportType +--*/ + + +NTSTATUS __stdcall +HidP_GetUsageValue ( + IN HIDP_REPORT_TYPE ReportType, + IN USAGE UsagePage, + IN USHORT LinkCollection, // Optional + IN USAGE Usage, + OUT PULONG UsageValue, + IN PHIDP_PREPARSED_DATA PreparsedData, + IN PCHAR Report, + IN ULONG ReportLength + ); + +/* +Description + HidP_GetUsageValue retrieves the value from the HID Report for the usage + specified by the combination of usage page, usage and link collection. + If a report packet contains two different fields with the same + Usage and UsagePage, they can be distinguished with the optional + LinkCollection field value. + +Parameters: + + ReportType One of HidP_Input or HidP_Feature. + + UsagePage The usage page to which the given usage refers. + + LinkCollection (Optional) This value can be used to differentiate + between two fields that may have the same + UsagePage and Usage but exist in different + collections. If the link collection value + is zero, this function will set the first field + it finds that matches the usage page and + usage. + + Usage The usage whose value HidP_GetUsageValue will retrieve + + UsageValue The raw value that is set for the specified field in the report + buffer. This value will either fall within the logical range + or if NULL values are allowed, a number outside the range to + indicate a NULL + + PreparsedData The preparsed data returned for HIDCLASS + + Report The report packet. + + ReportLength Length (in bytes) of the given report packet. + + +Return Value: + HidP_GetUsageValue returns the following error codes: + +· HIDP_STATUS_SUCCESS -- upon successfully retrieving the value + from the report packet +· HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. +· HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid +· HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not + equal to the length specified in + the HIDP_CAPS structure for the given + ReportType +· HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device + for the given ReportType +· HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- the specified usage page, usage and + link collection exist but exists in + a report with a different report ID + than the report being passed in. To + set this value, call HidP_GetUsageValue + again with a different report packet +· HIDP_STATUS_USAGE_NOT_FOUND -- if the usage page, usage, and link + collection combination does not exist + in any reports for this ReportType +--*/ + + +NTSTATUS __stdcall +HidP_GetScaledUsageValue ( + IN HIDP_REPORT_TYPE ReportType, + IN USAGE UsagePage, + IN USHORT LinkCollection, // Optional + IN USAGE Usage, + OUT PLONG UsageValue, + IN PHIDP_PREPARSED_DATA PreparsedData, + IN PCHAR Report, + IN ULONG ReportLength + ); + +/*++ +Description + HidP_GetScaledUsageValue retrieves a UsageValue from the HID report packet + in the field corresponding to the given usage page and usage. If a report + packet contains two different fields with the same Usage and UsagePage, + they can be distinguished with the optional LinkCollection field value. + + If the specified field has a defined physical range, this function converts + the logical value that exists in the report packet to the corresponding + physical value. If a physical range does not exist, the function will + return the logical value. This function will check to verify that the + logical value in the report falls within the declared logical range. + + When doing the conversion between logical and physical values, this + function assumes a linear extrapolation between the physical max/min and + the logical max/min. (Where logical is the values reported by the device + and physical is the value returned by this function). If the data field + size is less than 32 bits, then HidP_GetScaledUsageValue will sign extend + the value to 32 bits. + + If the range checking fails but the field has NULL values, the function + will set UsageValue to 0 and return HIDP_STATUS_NULL. Otherwise, it + returns a HIDP_STATUS_OUT_OF_RANGE error. + +Parameters: + + ReportType One of HidP_Output or HidP_Feature. + + UsagePage The usage page to which the given usage refers. + + LinkCollection (Optional) This value can be used to differentiate + between two fields that may have the same + UsagePage and Usage but exist in different + collections. If the link collection value + is zero, this function will retrieve the first + field it finds that matches the usage page + and usage. + + Usage The usage whose value HidP_GetScaledUsageValue will retrieve + + UsageValue The value retrieved from the report buffer. See the routine + description above for the different interpretations of this + value + + PreparsedData The preparsed data returned from HIDCLASS + + Report The report packet. + + ReportLength Length (in bytes) of the given report packet. + + +Return Value: + HidP_GetScaledUsageValue returns the following error codes: + +· HIDP_STATUS_SUCCESS -- upon successfully retrieving the value + from the report packet +· HIDP_STATUS_NULL -- if the report packet had a NULL value + set +· HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. +· HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid +· HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not + equal to the length specified in + the HIDP_CAPS structure for the given + ReportType +· HIDP_STATUS_VALUE_OUT_OF_RANGE -- if the value retrieved from the packet + falls outside the logical range and + the field does not support NULL values +· HIDP_STATUS_BAD_LOG_PHY_VALUES -- if the field has a physical range but + either the logical range is invalid + (max <= min) or the physical range is + invalid +· HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- the specified usage page, usage and + link collection exist but exists in + a report with a different report ID + than the report being passed in. To + set this value, call + HidP_GetScaledUsageValue with a + different report packet +· HIDP_STATUS_USAGE_NOT_FOUND -- if the usage page, usage, and link + collection combination does not exist + in any reports for this ReportType +--*/ + +NTSTATUS __stdcall +HidP_GetUsageValueArray ( + IN HIDP_REPORT_TYPE ReportType, + IN USAGE UsagePage, + IN USHORT LinkCollection, // Optional + IN USAGE Usage, + OUT PCHAR UsageValue, + IN USHORT UsageValueByteLength, + IN PHIDP_PREPARSED_DATA PreparsedData, + IN PCHAR Report, + IN ULONG ReportLength + ); + +/*++ +Routine Descripton: + A usage value array occurs when the last usage in the list of usages + describing a main item must be repeated because there are less usages defined + than there are report counts declared for the given main item. In this case + a single value cap is allocated for that usage and the report count of that + value cap is set to reflect the number of fields to which that usage refers. + + HidP_GetUsageValueArray returns the raw bits for that usage which spans + more than one field in a report. + + NOTE: This function currently does not support value arrays where the + ReportSize for each of the fields in the array is not a multiple + of 8 bits. + + The UsageValue buffer will have the raw values as they are set + in the report packet. + +Parameters: + + ReportType One of HidP_Input, HidP_Output or HidP_Feature. + + UsagePage The usage page to which the given usage refers. + + LinkCollection (Optional) This value can be used to differentiate + between two fields that may have the same + UsagePage and Usage but exist in different + collections. If the link collection value + is zero, this function will set the first field + it finds that matches the usage page and + usage. + + Usage The usage whose value HidP_GetUsageValueArray will retreive. + + UsageValue A pointer to an array of characters where the value will be + placed. The number of BITS required is found by multiplying the + BitSize and ReportCount fields of the Value Cap for this + control. The least significant bit of this control found in the + given report will be placed in the least significant bit location + of the buffer (little-endian format), regardless of whether + or not the field is byte aligned or if the BitSize is a multiple + of sizeof (CHAR). + + See note above about current implementation limitations + + UsageValueByteLength + the length of the given UsageValue buffer. + + PreparsedData The preparsed data returned by the HIDCLASS + + Report The report packet. + + ReportLength Length of the given report packet. + +Return Value: + +· HIDP_STATUS_SUCCESS -- upon successfully retrieving the value + from the report packet +· HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. +· HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid +· HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not + equal to the length specified in + the HIDP_CAPS structure for the given + ReportType +· HIDP_STATUS_NOT_VALUE_ARRAY -- if the control specified is not a + value array -- a value array will have + a ReportCount field in the + HIDP_VALUE_CAPS structure that is > 1 + Use HidP_GetUsageValue instead +· HIDP_STATUS_BUFFER_TOO_SMALL -- if the size of the passed in buffer in + which to return the array is too small + (ie. has fewer values than the number of + fields in the array +· HIDP_STATUS_NOT_IMPLEMENTED -- if the usage value array has field sizes + that are not multiples of 8 bits, this + error code is returned since the function + currently does not handle getting values + from such arrays. +· HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- the specified usage page, usage and + link collection exist but exists in + a report with a different report ID + than the report being passed in. To + set this value, call + HidP_GetUsageValueArray with a + different report packet +· HIDP_STATUS_USAGE_NOT_FOUND -- if the usage page, usage, and link + collection combination does not exist + in any reports for this ReportType +--*/ + +NTSTATUS __stdcall +HidP_UsageListDifference ( + IN PUSAGE PreviousUsageList, + IN PUSAGE CurrentUsageList, + OUT PUSAGE BreakUsageList, + OUT PUSAGE MakeUsageList, + IN ULONG UsageListLength + ); +/*++ +Routine Description: + This function will return the difference between a two lists of usages + (as might be returned from HidP_GetUsages), In other words, it will return + return a list of usages that are in the current list but not the previous + list as well as a list of usages that are in the previous list but not + the current list. + +Parameters: + + PreviousUsageList The list of usages before. + CurrentUsageList The list of usages now. + BreakUsageList Previous - Current. + MakeUsageList Current - Previous. + UsageListLength Represents the length of the usage lists in array + elements. If comparing two lists with a differing + number of array elements, this value should be + the size of the larger of the two lists. Any + zero found with a list indicates an early termination + of the list and any usages found after the first zero + will be ignored. +--*/ + +NTSTATUS __stdcall +HidP_UsageAndPageListDifference ( + IN PUSAGE_AND_PAGE PreviousUsageList, + IN PUSAGE_AND_PAGE CurrentUsageList, + OUT PUSAGE_AND_PAGE BreakUsageList, + OUT PUSAGE_AND_PAGE MakeUsageList, + IN ULONG UsageListLength + ); + +// +// Produce Make or Break Codes +// +typedef enum _HIDP_KEYBOARD_DIRECTION { + HidP_Keyboard_Break, + HidP_Keyboard_Make +} HIDP_KEYBOARD_DIRECTION; + +// +// A bitmap of the current shift state of the keyboard when using the +// below keyboard usages to i8042 translation function. +// +typedef struct _HIDP_KEYBOARD_MODIFIER_STATE { + union { + struct { + ULONG LeftControl: 1; + ULONG LeftShift: 1; + ULONG LeftAlt: 1; + ULONG LeftGUI: 1; + ULONG RightControl: 1; + ULONG RightShift: 1; + ULONG RightAlt: 1; + ULONG RigthGUI: 1; + ULONG CapsLock: 1; + ULONG ScollLock: 1; + ULONG NumLock: 1; + ULONG Reserved: 21; + }; + ULONG ul; + }; + +} HIDP_KEYBOARD_MODIFIER_STATE, * PHIDP_KEYBOARD_MODIFIER_STATE; + +// +// A call back function to give the i8042 scan codes to the caller of +// the below translation function. +// +typedef BOOLEAN (* PHIDP_INSERT_SCANCODES) ( + IN PVOID Context, // Some caller supplied context. + IN PCHAR NewScanCodes, // A list of i8042 scan codes. + IN ULONG Length // the length of the scan codes. + ); + +NTSTATUS __stdcall +HidP_TranslateUsageAndPagesToI8042ScanCodes ( + IN PUSAGE_AND_PAGE ChangedUsageList, + IN ULONG UsageListLength, + IN HIDP_KEYBOARD_DIRECTION KeyAction, + IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState, + IN PHIDP_INSERT_SCANCODES InsertCodesProcedure, + IN PVOID InsertCodesContext + ); +/*++ +Routine Description: +Parameters: +--*/ + +NTSTATUS __stdcall +HidP_TranslateUsagesToI8042ScanCodes ( + IN PUSAGE ChangedUsageList, + IN ULONG UsageListLength, + IN HIDP_KEYBOARD_DIRECTION KeyAction, + IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState, + IN PHIDP_INSERT_SCANCODES InsertCodesProcedure, + IN PVOID InsertCodesContext + ); +/*++ +Routine Description: +Parameters: +--*/ + + + +// +// Define NT Status codes with Facility Code of FACILITY_HID_ERROR_CODE +// + +// FACILITY_HID_ERROR_CODE defined in ntstatus.h +#ifndef FACILITY_HID_ERROR_CODE +#define FACILITY_HID_ERROR_CODE 0x11 +#endif + +#define HIDP_ERROR_CODES(SEV, CODE) \ + ((NTSTATUS) (((SEV) << 28) | (FACILITY_HID_ERROR_CODE << 16) | (CODE))) + +#define HIDP_STATUS_SUCCESS (HIDP_ERROR_CODES(0x0,0)) +#define HIDP_STATUS_NULL (HIDP_ERROR_CODES(0x8,1)) +#define HIDP_STATUS_INVALID_PREPARSED_DATA (HIDP_ERROR_CODES(0xC,1)) +#define HIDP_STATUS_INVALID_REPORT_TYPE (HIDP_ERROR_CODES(0xC,2)) +#define HIDP_STATUS_INVALID_REPORT_LENGTH (HIDP_ERROR_CODES(0xC,3)) +#define HIDP_STATUS_USAGE_NOT_FOUND (HIDP_ERROR_CODES(0xC,4)) +#define HIDP_STATUS_VALUE_OUT_OF_RANGE (HIDP_ERROR_CODES(0xC,5)) +#define HIDP_STATUS_BAD_LOG_PHY_VALUES (HIDP_ERROR_CODES(0xC,6)) +#define HIDP_STATUS_BUFFER_TOO_SMALL (HIDP_ERROR_CODES(0xC,7)) +#define HIDP_STATUS_INTERNAL_ERROR (HIDP_ERROR_CODES(0xC,8)) +#define HIDP_STATUS_I8042_TRANS_UNKNOWN (HIDP_ERROR_CODES(0xC,9)) +#define HIDP_STATUS_INCOMPATIBLE_REPORT_ID (HIDP_ERROR_CODES(0xC,0xA)) +#define HIDP_STATUS_NOT_VALUE_ARRAY (HIDP_ERROR_CODES(0xC,0xB)) +#define HIDP_STATUS_IS_VALUE_ARRAY (HIDP_ERROR_CODES(0xC,0xC)) +#define HIDP_STATUS_DATA_INDEX_NOT_FOUND (HIDP_ERROR_CODES(0xC,0xD)) +#define HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE (HIDP_ERROR_CODES(0xC,0xE)) +#define HIDP_STATUS_BUTTON_NOT_PRESSED (HIDP_ERROR_CODES(0xC,0xF)) +#define HIDP_STATUS_REPORT_DOES_NOT_EXIST (HIDP_ERROR_CODES(0xC,0x10)) +#define HIDP_STATUS_NOT_IMPLEMENTED (HIDP_ERROR_CODES(0xC,0x20)) + +// +// We blundered this status code. +// +#define HIDP_STATUS_I8242_TRANS_UNKNOWN HIDP_STATUS_I8042_TRANS_UNKNOWN + +#include + +#endif diff --git a/winsrc/include/hidsdi.h b/winsrc/include/hidsdi.h new file mode 100644 index 000000000..d0db806b8 --- /dev/null +++ b/winsrc/include/hidsdi.h @@ -0,0 +1,412 @@ +/*++ + +Copyright (c) 1996 Microsoft Corporation + +Module Name: + + HIDSDI.H + +Abstract: + + This module contains the PUBLIC definitions for the + code that implements the HID dll. + +Environment: + + Kernel & user mode + +--*/ + + +#ifndef _HIDSDI_H +#define _HIDSDI_H + +#include + +//#include "wtypes.h" + +//#include +//#include +//#include + +typedef LONG NTSTATUS; +#include "hidusage.h" +#include "hidpi.h" + +typedef struct _HIDD_CONFIGURATION { + PVOID cookie; + ULONG size; + ULONG RingBufferSize; +} HIDD_CONFIGURATION, *PHIDD_CONFIGURATION; + +typedef struct _HIDD_ATTRIBUTES { + ULONG Size; // = sizeof (struct _HIDD_ATTRIBUTES) + + // + // Vendor ids of this hid device + // + USHORT VendorID; + USHORT ProductID; + USHORT VersionNumber; + + // + // Additional fields will be added to the end of this structure. + // +} HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES; + + +BOOLEAN __stdcall +HidD_GetAttributes ( + IN HANDLE HidDeviceObject, + OUT PHIDD_ATTRIBUTES Attributes + ); +/*++ +Routine Description: + Fill in the given HIDD_ATTRIBUTES structure with the attributes of the + given hid device. + +--*/ + + +void __stdcall +HidD_GetHidGuid ( + OUT LPGUID HidGuid + ); + +BOOLEAN __stdcall +HidD_GetPreparsedData ( + IN HANDLE HidDeviceObject, + OUT PHIDP_PREPARSED_DATA * PreparsedData + ); +/*++ +Routine Description: + Given a handle to a valid Hid Class Device Object, retrieve the preparsed + data for the device. This routine will allocate the appropriately + sized buffer to hold this preparsed data. It is up to client to call + HidP_FreePreparsedData to free the memory allocated to this structure when + it is no longer needed. + +Arguments: + HidDeviceObject A handle to a Hid Device that the client obtains using + a call to CreateFile on a valid Hid device string name. + The string name can be obtained using standard PnP calls. + + PreparsedData An opaque data structure used by other functions in this + library to retrieve information about a given device. + +Return Value: + TRUE if successful. + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +BOOLEAN __stdcall +HidD_FreePreparsedData ( + IN PHIDP_PREPARSED_DATA PreparsedData + ); + +BOOLEAN __stdcall +HidD_FlushQueue ( + IN HANDLE HidDeviceObject + ); +/*++ +Routine Description: + Flush the input queue for the given HID device. + +Arguments: + HidDeviceObject A handle to a Hid Device that the client obtains using + a call to CreateFile on a valid Hid device string name. + The string name can be obtained using standard PnP calls. + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +BOOLEAN __stdcall +HidD_GetConfiguration ( + IN HANDLE HidDeviceObject, + OUT PHIDD_CONFIGURATION Configuration, + IN ULONG ConfigurationLength + ); +/*++ +Routine Description: + Get the configuration information for this Hid device + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + Configuration A configuration structure. HidD_GetConfiguration MUST + be called before the configuration can be modified and + set using HidD_SetConfiguration + + ConfigurationLength That is ``sizeof (HIDD_CONFIGURATION)''. Using this + parameter, we can later increase the length of the + configuration array and not break older apps. + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +BOOLEAN __stdcall +HidD_SetConfiguration ( + IN HANDLE HidDeviceObject, + IN PHIDD_CONFIGURATION Configuration, + IN ULONG ConfigurationLength + ); +/*++ +Routine Description: + Set the configuration information for this Hid device... + + NOTE: HidD_GetConfiguration must be called to retrieve the current + configuration information before this information can be modified + and set. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + Configuration A configuration structure. HidD_GetConfiguration MUST + be called before the configuration can be modified and + set using HidD_SetConfiguration + + ConfigurationLength That is ``sizeof (HIDD_CONFIGURATION)''. Using this + parameter, we can later increase the length of the + configuration array and not break older apps. + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +BOOLEAN __stdcall +HidD_GetFeature ( + IN HANDLE HidDeviceObject, + OUT PVOID ReportBuffer, + IN ULONG ReportBufferLength + ); +/*++ +Routine Description: + Retrieve a feature report from a HID device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + ReportBuffer The buffer that the feature report should be placed + into. The first byte of the buffer should be set to + the report ID of the desired report + + ReportBufferLength The size (in bytes) of ReportBuffer. This value + should be greater than or equal to the + FeatureReportByteLength field as specified in the + HIDP_CAPS structure for the device +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +BOOLEAN __stdcall +HidD_SetFeature ( + IN HANDLE HidDeviceObject, + IN PVOID ReportBuffer, + IN ULONG ReportBufferLength + ); +/*++ +Routine Description: + Send a feature report to a HID device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + ReportBuffer The buffer of the feature report to send to the device + + ReportBufferLength The size (in bytes) of ReportBuffer. This value + should be greater than or equal to the + FeatureReportByteLength field as specified in the + HIDP_CAPS structure for the device +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +BOOLEAN __stdcall +HidD_GetNumInputBuffers ( + IN HANDLE HidDeviceObject, + OUT PULONG NumberBuffers + ); +/*++ +Routine Description: + This function returns the number of input buffers used by the specified + file handle to the Hid device. Each file object has a number of buffers + associated with it to queue reports read from the device but which have + not yet been read by the user-mode app with a handle to that device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + NumberBuffers Number of buffers currently being used for this file + handle to the Hid device + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +BOOLEAN __stdcall +HidD_SetNumInputBuffers ( + IN HANDLE HidDeviceObject, + OUT ULONG NumberBuffers + ); +/*++ + +Routine Description: + This function sets the number of input buffers used by the specified + file handle to the Hid device. Each file object has a number of buffers + associated with it to queue reports read from the device but which have + not yet been read by the user-mode app with a handle to that device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + NumberBuffers New number of buffers to use for this file handle to + the Hid device + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +BOOLEAN __stdcall +HidD_GetPhysicalDescriptor ( + IN HANDLE HidDeviceObject, + OUT PVOID Buffer, + IN ULONG BufferLength + ); +/*++ +Routine Description: + This function retrieves the raw physical descriptor for the specified + Hid device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + Buffer Buffer which on return will contain the physical + descriptor if one exists for the specified device + handle + + BufferLength Length of buffer (in bytes) + + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +BOOLEAN __stdcall +HidD_GetManufacturerString ( + IN HANDLE HidDeviceObject, + OUT PVOID Buffer, + IN ULONG BufferLength + ); +/*++ +Routine Description: + This function retrieves the manufacturer string from the specified + Hid device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + Buffer Buffer which on return will contain the manufacturer + string returned from the device. This string is a + wide-character string + + BufferLength Length of Buffer (in bytes) + + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +BOOLEAN __stdcall +HidD_GetProductString ( + IN HANDLE HidDeviceObject, + OUT PVOID Buffer, + IN ULONG BufferLength + ); +/*++ +Routine Description: + This function retrieves the product string from the specified + Hid device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + Buffer Buffer which on return will contain the product + string returned from the device. This string is a + wide-character string + + BufferLength Length of Buffer (in bytes) + + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +BOOLEAN __stdcall +HidD_GetIndexedString ( + IN HANDLE HidDeviceObject, + IN ULONG StringIndex, + OUT PVOID Buffer, + IN ULONG BufferLength + ); +/*++ +Routine Description: + This function retrieves a string from the specified Hid device that is + specified with a certain string index. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + StringIndex Index of the string to retrieve + + Buffer Buffer which on return will contain the product + string returned from the device. This string is a + wide-character string + + BufferLength Length of Buffer (in bytes) + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +BOOLEAN __stdcall +HidD_GetSerialNumberString ( + IN HANDLE HidDeviceObject, + OUT PVOID Buffer, + IN ULONG BufferLength + ); +/*++ +Routine Description: + This function retrieves the serial number string from the specified + Hid device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + Buffer Buffer which on return will contain the serial number + string returned from the device. This string is a + wide-character string + + BufferLength Length of Buffer (in bytes) + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + + +#include + +#endif diff --git a/winsrc/include/hidusage.h b/winsrc/include/hidusage.h new file mode 100644 index 000000000..4ea9dd125 --- /dev/null +++ b/winsrc/include/hidusage.h @@ -0,0 +1,263 @@ +/*++ + +Copyright (c) 1996, 1997 Microsoft Corporation + +Module Name: + + HIDUSAGE.H + +Abstract: + + Public Definitions of HID USAGES. + +Environment: + + Kernel & user mode + +--*/ + +#ifndef __HIDUSAGE_H__ +#define __HIDUSAGE_H__ + +// +// Usage Pages +// + +typedef USHORT USAGE, *PUSAGE; + +#define HID_USAGE_PAGE_GENERIC ((USAGE) 0x01) +#define HID_USAGE_PAGE_SIMULATION ((USAGE) 0x02) +#define HID_USAGE_PAGE_VR ((USAGE) 0x03) +#define HID_USAGE_PAGE_SPORT ((USAGE) 0x04) +#define HID_USAGE_PAGE_GAME ((USAGE) 0x05) +#define HID_USAGE_PAGE_KEYBOARD ((USAGE) 0x07) +#define HID_USAGE_PAGE_LED ((USAGE) 0x08) +#define HID_USAGE_PAGE_BUTTON ((USAGE) 0x09) +#define HID_USAGE_PAGE_ORDINAL ((USAGE) 0x0A) +#define HID_USAGE_PAGE_TELEPHONY ((USAGE) 0x0B) +#define HID_USAGE_PAGE_CONSUMER ((USAGE) 0x0C) +#define HID_USAGE_PAGE_DIGITIZER ((USAGE) 0x0D) +#define HID_USAGE_PAGE_UNICODE ((USAGE) 0x10) +#define HID_USAGE_PAGE_ALPHANUMERIC ((USAGE) 0x14) + + +// +// Usages from Generic Desktop Page (0x01) +// + +#define HID_USAGE_GENERIC_POINTER ((USAGE) 0x01) +#define HID_USAGE_GENERIC_MOUSE ((USAGE) 0x02) +#define HID_USAGE_GENERIC_JOYSTICK ((USAGE) 0x04) +#define HID_USAGE_GENERIC_GAMEPAD ((USAGE) 0x05) +#define HID_USAGE_GENERIC_KEYBOARD ((USAGE) 0x06) +#define HID_USAGE_GENERIC_KEYPAD ((USAGE) 0x07) +#define HID_USAGE_GENERIC_SYSTEM_CTL ((USAGE) 0x80) + +#define HID_USAGE_GENERIC_X ((USAGE) 0x30) +#define HID_USAGE_GENERIC_Y ((USAGE) 0x31) +#define HID_USAGE_GENERIC_Z ((USAGE) 0x32) +#define HID_USAGE_GENERIC_RX ((USAGE) 0x33) +#define HID_USAGE_GENERIC_RY ((USAGE) 0x34) +#define HID_USAGE_GENERIC_RZ ((USAGE) 0x35) +#define HID_USAGE_GENERIC_SLIDER ((USAGE) 0x36) +#define HID_USAGE_GENERIC_DIAL ((USAGE) 0x37) +#define HID_USAGE_GENERIC_WHEEL ((USAGE) 0x38) +#define HID_USAGE_GENERIC_HATSWITCH ((USAGE) 0x39) +#define HID_USAGE_GENERIC_COUNTED_BUFFER ((USAGE) 0x3A) +#define HID_USAGE_GENERIC_BYTE_COUNT ((USAGE) 0x3B) +#define HID_USAGE_GENERIC_MOTION_WAKEUP ((USAGE) 0x3C) +#define HID_USAGE_GENERIC_VX ((USAGE) 0x40) +#define HID_USAGE_GENERIC_VY ((USAGE) 0x41) +#define HID_USAGE_GENERIC_VZ ((USAGE) 0x42) +#define HID_USAGE_GENERIC_VBRX ((USAGE) 0x43) +#define HID_USAGE_GENERIC_VBRY ((USAGE) 0x44) +#define HID_USAGE_GENERIC_VBRZ ((USAGE) 0x45) +#define HID_USAGE_GENERIC_VNO ((USAGE) 0x46) +#define HID_USAGE_GENERIC_SYSCTL_POWER ((USAGE) 0x81) +#define HID_USAGE_GENERIC_SYSCTL_SLEEP ((USAGE) 0x82) +#define HID_USAGE_GENERIC_SYSCTL_WAKE ((USAGE) 0x83) +#define HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU ((USAGE) 0x84) +#define HID_USAGE_GENERIC_SYSCTL_MAIN_MENU ((USAGE) 0x85) +#define HID_USAGE_GENERIC_SYSCTL_APP_MENU ((USAGE) 0x86) +#define HID_USAGE_GENERIC_SYSCTL_HELP_MENU ((USAGE) 0x87) +#define HID_USAGE_GENERIC_SYSCTL_MENU_EXIT ((USAGE) 0x88) +#define HID_USAGE_GENERIC_SYSCTL_MENU_SELECT ((USAGE) 0x89) +#define HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT ((USAGE) 0x8A) +#define HID_USAGE_GENERIC_SYSCTL_MENU_LEFT ((USAGE) 0x8B) +#define HID_USAGE_GENERIC_SYSCTL_MENU_UP ((USAGE) 0x8C) +#define HID_USAGE_GENERIC_SYSCTL_MENU_DOWN ((USAGE) 0x8D) + +// +// Usages from Simulation Controls Page (0x02) +// + +#define HID_USAGE_SIMULATION_RUDDER ((USAGE) 0xBA) +#define HID_USAGE_SIMULATION_THROTTLE ((USAGE) 0xBB) + +// +// Virtual Reality Controls Page (0x03) +// + + +// +// Sport Controls Page (0x04) +// + + +// +// Game Controls Page (0x05) +// + + +// +// Keyboard/Keypad Page (0x07) +// + + // Error "keys" +#define HID_USAGE_KEYBOARD_NOEVENT ((USAGE) 0x00) +#define HID_USAGE_KEYBOARD_ROLLOVER ((USAGE) 0x01) +#define HID_USAGE_KEYBOARD_POSTFAIL ((USAGE) 0x02) +#define HID_USAGE_KEYBOARD_UNDEFINED ((USAGE) 0x03) + + // Letters +#define HID_USAGE_KEYBOARD_aA ((USAGE) 0x04) +#define HID_USAGE_KEYBOARD_zZ ((USAGE) 0x1D) + // Numbers +#define HID_USAGE_KEYBOARD_ONE ((USAGE) 0x1E) +#define HID_USAGE_KEYBOARD_ZERO ((USAGE) 0x27) + // Modifier Keys +#define HID_USAGE_KEYBOARD_LCTRL ((USAGE) 0xE0) +#define HID_USAGE_KEYBOARD_LSHFT ((USAGE) 0xE1) +#define HID_USAGE_KEYBOARD_LALT ((USAGE) 0xE2) +#define HID_USAGE_KEYBOARD_LGUI ((USAGE) 0xE3) +#define HID_USAGE_KEYBOARD_RCTRL ((USAGE) 0xE4) +#define HID_USAGE_KEYBOARD_RSHFT ((USAGE) 0xE5) +#define HID_USAGE_KEYBOARD_RALT ((USAGE) 0xE6) +#define HID_USAGE_KEYBOARD_RGUI ((USAGE) 0xE7) +#define HID_USAGE_KEYBOARD_SCROLL_LOCK ((USAGE) 0x47) +#define HID_USAGE_KEYBOARD_NUM_LOCK ((USAGE) 0x53) +#define HID_USAGE_KEYBOARD_CAPS_LOCK ((USAGE) 0x39) + // Funtion keys +#define HID_USAGE_KEYBOARD_F1 ((USAGE) 0x3A) +#define HID_USAGE_KEYBOARD_F12 ((USAGE) 0x45) + +#define HID_USAGE_KEYBOARD_RETURN ((USAGE) 0x28) +#define HID_USAGE_KEYBOARD_ESCAPE ((USAGE) 0x29) +#define HID_USAGE_KEYBOARD_DELETE ((USAGE) 0x2A) + +#define HID_USAGE_KEYBOARD_PRINT_SCREEN ((USAGE) 0x46) + +// and hundreds more... + +// +// LED Page (0x08) +// + +#define HID_USAGE_LED_NUM_LOCK ((USAGE) 0x01) +#define HID_USAGE_LED_CAPS_LOCK ((USAGE) 0x02) +#define HID_USAGE_LED_SCROLL_LOCK ((USAGE) 0x03) +#define HID_USAGE_LED_COMPOSE ((USAGE) 0x04) +#define HID_USAGE_LED_KANA ((USAGE) 0x05) +#define HID_USAGE_LED_POWER ((USAGE) 0x06) +#define HID_USAGE_LED_SHIFT ((USAGE) 0x07) +#define HID_USAGE_LED_DO_NOT_DISTURB ((USAGE) 0x08) +#define HID_USAGE_LED_MUTE ((USAGE) 0x09) +#define HID_USAGE_LED_TONE_ENABLE ((USAGE) 0x0A) +#define HID_USAGE_LED_HIGH_CUT_FILTER ((USAGE) 0x0B) +#define HID_USAGE_LED_LOW_CUT_FILTER ((USAGE) 0x0C) +#define HID_USAGE_LED_EQUALIZER_ENABLE ((USAGE) 0x0D) +#define HID_USAGE_LED_SOUND_FIELD_ON ((USAGE) 0x0E) +#define HID_USAGE_LED_SURROUND_FIELD_ON ((USAGE) 0x0F) +#define HID_USAGE_LED_REPEAT ((USAGE) 0x10) +#define HID_USAGE_LED_STEREO ((USAGE) 0x11) +#define HID_USAGE_LED_SAMPLING_RATE_DETECT ((USAGE) 0x12) +#define HID_USAGE_LED_SPINNING ((USAGE) 0x13) +#define HID_USAGE_LED_CAV ((USAGE) 0x14) +#define HID_USAGE_LED_CLV ((USAGE) 0x15) +#define HID_USAGE_LED_RECORDING_FORMAT_DET ((USAGE) 0x16) +#define HID_USAGE_LED_OFF_HOOK ((USAGE) 0x17) +#define HID_USAGE_LED_RING ((USAGE) 0x18) +#define HID_USAGE_LED_MESSAGE_WAITING ((USAGE) 0x19) +#define HID_USAGE_LED_DATA_MODE ((USAGE) 0x1A) +#define HID_USAGE_LED_BATTERY_OPERATION ((USAGE) 0x1B) +#define HID_USAGE_LED_BATTERY_OK ((USAGE) 0x1C) +#define HID_USAGE_LED_BATTERY_LOW ((USAGE) 0x1D) +#define HID_USAGE_LED_SPEAKER ((USAGE) 0x1E) +#define HID_USAGE_LED_HEAD_SET ((USAGE) 0x1F) +#define HID_USAGE_LED_HOLD ((USAGE) 0x20) +#define HID_USAGE_LED_MICROPHONE ((USAGE) 0x21) +#define HID_USAGE_LED_COVERAGE ((USAGE) 0x22) +#define HID_USAGE_LED_NIGHT_MODE ((USAGE) 0x23) +#define HID_USAGE_LED_SEND_CALLS ((USAGE) 0x24) +#define HID_USAGE_LED_CALL_PICKUP ((USAGE) 0x25) +#define HID_USAGE_LED_CONFERENCE ((USAGE) 0x26) +#define HID_USAGE_LED_STAND_BY ((USAGE) 0x27) +#define HID_USAGE_LED_CAMERA_ON ((USAGE) 0x28) +#define HID_USAGE_LED_CAMERA_OFF ((USAGE) 0x29) +#define HID_USAGE_LED_ON_LINE ((USAGE) 0x2A) +#define HID_USAGE_LED_OFF_LINE ((USAGE) 0x2B) +#define HID_USAGE_LED_BUSY ((USAGE) 0x2C) +#define HID_USAGE_LED_READY ((USAGE) 0x2D) +#define HID_USAGE_LED_PAPER_OUT ((USAGE) 0x2E) +#define HID_USAGE_LED_PAPER_JAM ((USAGE) 0x2F) +#define HID_USAGE_LED_REMOTE ((USAGE) 0x30) +#define HID_USAGE_LED_FORWARD ((USAGE) 0x31) +#define HID_USAGE_LED_REVERSE ((USAGE) 0x32) +#define HID_USAGE_LED_STOP ((USAGE) 0x33) +#define HID_USAGE_LED_REWIND ((USAGE) 0x34) +#define HID_USAGE_LED_FAST_FORWARD ((USAGE) 0x35) +#define HID_USAGE_LED_PLAY ((USAGE) 0x36) +#define HID_USAGE_LED_PAUSE ((USAGE) 0x37) +#define HID_USAGE_LED_RECORD ((USAGE) 0x38) +#define HID_USAGE_LED_ERROR ((USAGE) 0x39) +#define HID_USAGE_LED_SELECTED_INDICATOR ((USAGE) 0x3A) +#define HID_USAGE_LED_IN_USE_INDICATOR ((USAGE) 0x3B) +#define HID_USAGE_LED_MULTI_MODE_INDICATOR ((USAGE) 0x3C) +#define HID_USAGE_LED_INDICATOR_ON ((USAGE) 0x3D) +#define HID_USAGE_LED_INDICATOR_FLASH ((USAGE) 0x3E) +#define HID_USAGE_LED_INDICATOR_SLOW_BLINK ((USAGE) 0x3F) +#define HID_USAGE_LED_INDICATOR_FAST_BLINK ((USAGE) 0x40) +#define HID_USAGE_LED_INDICATOR_OFF ((USAGE) 0x41) +#define HID_USAGE_LED_FLASH_ON_TIME ((USAGE) 0x42) +#define HID_USAGE_LED_SLOW_BLINK_ON_TIME ((USAGE) 0x43) +#define HID_USAGE_LED_SLOW_BLINK_OFF_TIME ((USAGE) 0x44) +#define HID_USAGE_LED_FAST_BLINK_ON_TIME ((USAGE) 0x45) +#define HID_USAGE_LED_FAST_BLINK_OFF_TIME ((USAGE) 0x46) +#define HID_USAGE_LED_INDICATOR_COLOR ((USAGE) 0x47) +#define HID_USAGE_LED_RED ((USAGE) 0x48) +#define HID_USAGE_LED_GREEN ((USAGE) 0x49) +#define HID_USAGE_LED_AMBER ((USAGE) 0x4A) +#define HID_USAGE_LED_GENERIC_INDICATOR ((USAGE) 0x3B) + +// +// Button Page (0x09) +// +// There is no need to label these usages. +// + + +// +// Ordinal Page (0x0A) +// +// There is no need to label these usages. +// + + +// +// Telephony Device Page (0x0B) +// + +#define HID_USAGE_TELEPHONY_PHONE ((USAGE) 0x01) +#define HID_USAGE_TELEPHONY_ANSWERING_MACHINE ((USAGE) 0x02) +#define HID_USAGE_TELEPHONY_MESSAGE_CONTROLS ((USAGE) 0x03) +#define HID_USAGE_TELEPHONY_HANDSET ((USAGE) 0x04) +#define HID_USAGE_TELEPHONY_HEADSET ((USAGE) 0x05) +#define HID_USAGE_TELEPHONY_KEYPAD ((USAGE) 0x06) +#define HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON ((USAGE) 0x07) + +// +// and others... +// + + +#endif diff --git a/winsrc/prox.cpp b/winsrc/prox.cpp new file mode 100644 index 000000000..e95a4aff6 --- /dev/null +++ b/winsrc/prox.cpp @@ -0,0 +1,379 @@ +#include +#include +#include +#include +#include +extern "C" { +#include "include/hidsdi.h" +#include "include/hidpi.h" +} + +#include "prox.h" + +#define OUR_VID 0x9ac4 +#define OUR_PID 0x4b8f + +HANDLE UsbHandle; + +static void ShowError(void) +{ + char buf[1024]; + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, + buf, sizeof(buf), NULL); + printf("ERROR: %s", buf); +} + +static BOOL UsbConnect(void) +{ + typedef void (__stdcall *GetGuidProc)(GUID *); + typedef BOOLEAN (__stdcall *GetAttrProc)(HANDLE, HIDD_ATTRIBUTES *); + typedef BOOLEAN (__stdcall *GetPreparsedProc)(HANDLE, + PHIDP_PREPARSED_DATA *); + typedef NTSTATUS (__stdcall *GetCapsProc)(PHIDP_PREPARSED_DATA, PHIDP_CAPS); + GetGuidProc getGuid; + GetAttrProc getAttr; + GetPreparsedProc getPreparsed; + GetCapsProc getCaps; + + HMODULE h = LoadLibrary("hid.dll"); + getGuid = (GetGuidProc)GetProcAddress(h, "HidD_GetHidGuid"); + getAttr = (GetAttrProc)GetProcAddress(h, "HidD_GetAttributes"); + getPreparsed = (GetPreparsedProc)GetProcAddress(h, "HidD_GetPreparsedData"); + getCaps = (GetCapsProc)GetProcAddress(h, "HidP_GetCaps"); + + GUID hidGuid; + getGuid(&hidGuid); + + HDEVINFO devInfo; + devInfo = SetupDiGetClassDevs(&hidGuid, NULL, NULL, + DIGCF_PRESENT | DIGCF_INTERFACEDEVICE); + + SP_DEVICE_INTERFACE_DATA devInfoData; + devInfoData.cbSize = sizeof(devInfoData); + + int i; + for(i = 0;; i++) { + if(!SetupDiEnumDeviceInterfaces(devInfo, 0, &hidGuid, i, &devInfoData)) + { + if(GetLastError() != ERROR_NO_MORE_ITEMS) { +// printf("SetupDiEnumDeviceInterfaces failed\n"); + } +// printf("done list\n"); + SetupDiDestroyDeviceInfoList(devInfo); + return FALSE; + } + +// printf("item %d:\n", i); + + DWORD sizeReqd = 0; + if(!SetupDiGetDeviceInterfaceDetail(devInfo, &devInfoData, + NULL, 0, &sizeReqd, NULL)) + { + if(GetLastError() != ERROR_INSUFFICIENT_BUFFER) { +// printf("SetupDiGetDeviceInterfaceDetail (0) failed\n"); + continue; + } + } + + SP_DEVICE_INTERFACE_DETAIL_DATA *devInfoDetailData = + (SP_DEVICE_INTERFACE_DETAIL_DATA *)malloc(sizeReqd); + devInfoDetailData->cbSize = sizeof(*devInfoDetailData); + + if(!SetupDiGetDeviceInterfaceDetail(devInfo, &devInfoData, + devInfoDetailData, 87, NULL, NULL)) + { +// printf("SetupDiGetDeviceInterfaceDetail (1) failed\n"); + continue; + } + + char *path = devInfoDetailData->DevicePath; + + UsbHandle = CreateFile(path, /*GENERIC_READ |*/ GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, NULL); + + if(UsbHandle == INVALID_HANDLE_VALUE) { + ShowError(); +// printf("CreateFile failed: for '%s'\n", path); + continue; + } + + HIDD_ATTRIBUTES attr; + attr.Size = sizeof(attr); + if(!getAttr(UsbHandle, &attr)) { + ShowError(); +// printf("HidD_GetAttributes failed\n"); + continue; + } + +// printf("VID: %04x PID %04x\n", attr.VendorID, attr.ProductID); + + if(attr.VendorID != OUR_VID || attr.ProductID != OUR_PID) { + CloseHandle(UsbHandle); +// printf(" nope, not us\n"); + continue; + } + +// printf ("got it!\n"); + CloseHandle(UsbHandle); + + UsbHandle = CreateFile(path, GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, NULL); + + if(UsbHandle == INVALID_HANDLE_VALUE) { + ShowError(); +// printf("Error, couldn't open our own handle as desired.\n"); + return FALSE; + } + + PHIDP_PREPARSED_DATA pp; + getPreparsed(UsbHandle, &pp); + HIDP_CAPS caps; + + if(getCaps(pp, &caps) != HIDP_STATUS_SUCCESS) { +// printf("getcaps failed\n"); + return FALSE; + } + +// printf("input/out report %d/%d\n", caps.InputReportByteLength, +// caps.OutputReportByteLength); + + + return TRUE; + } + return FALSE; +} + +BOOL ReceiveCommandPoll(UsbCommand *c) +{ + static BOOL ReadInProgress = FALSE; + static OVERLAPPED Ov; + static BYTE Buf[65]; + static DWORD HaveRead; + + if(!ReadInProgress) { + memset(&Ov, 0, sizeof(Ov)); + ReadFile(UsbHandle, Buf, 65, &HaveRead, &Ov); + if(GetLastError() != ERROR_IO_PENDING) { + ShowError(); + exit(-1); + } + ReadInProgress = TRUE; + } + + if(HasOverlappedIoCompleted(&Ov)) { + ReadInProgress = FALSE; + + if(!GetOverlappedResult(UsbHandle, &Ov, &HaveRead, FALSE)) { + ShowError(); + exit(-1); + } + + memcpy(c, Buf+1, 64); + + return TRUE; + } else { + return FALSE; + } +} + +void ReceiveCommand(UsbCommand *c) +{ + while(!ReceiveCommandPoll(c)) { + Sleep(0); + } +} + +void SendCommand(UsbCommand *c, BOOL wantAck) +{ + BYTE buf[65]; + buf[0] = 0; + memcpy(buf+1, c, 64); + + DWORD written; + OVERLAPPED ov; + memset(&ov, 0, sizeof(ov)); + WriteFile(UsbHandle, buf, 65, &written, &ov); + if(GetLastError() != ERROR_IO_PENDING) { + ShowError(); + exit(-1); + } + + while(!HasOverlappedIoCompleted(&ov)) { + Sleep(0); + } + + if(!GetOverlappedResult(UsbHandle, &ov, &written, FALSE)) { + ShowError(); + exit(-1); + } + + if(wantAck) { + UsbCommand ack; + ReceiveCommand(&ack); + if(ack.cmd != CMD_ACK) { + printf("bad ACK\n"); + exit(-1); + } + } +} + +static DWORD ExpectedAddr; +static BYTE QueuedToSend[256]; +static BOOL AllWritten; + +static void FlushPrevious(void) +{ + UsbCommand c; + memset(&c, 0, sizeof(c)); + + printf("expected = %08x flush, ", ExpectedAddr); + + int i; + for(i = 0; i < 240; i += 48) { + c.cmd = CMD_SETUP_WRITE; + memcpy(c.d.asBytes, QueuedToSend+i, 48); + c.ext1 = (i/4); + SendCommand(&c, TRUE); + } + + c.cmd = CMD_FINISH_WRITE; + c.ext1 = (ExpectedAddr-1) & (~255); + printf("c.ext1 = %08x\r", c.ext1); + memcpy(c.d.asBytes, QueuedToSend+240, 16); + SendCommand(&c, TRUE); + + AllWritten = TRUE; +} + +static void GotByte(DWORD where, BYTE which) +{ + AllWritten = FALSE; + + if(where != ExpectedAddr) { + printf("bad: got at %08x, expected at %08x\n", where, ExpectedAddr); + exit(-1); + } + QueuedToSend[where & 255] = which; + ExpectedAddr++; + + if((where & 255) == 255) { + // we have completed a full page + FlushPrevious(); + } +} + +static int HexVal(int c) +{ + c = tolower(c); + if(c >= '0' && c <= '9') { + return c - '0'; + } else if(c >= 'a' && c <= 'f') { + return (c - 'a') + 10; + } else { + printf("bad hex digit '%c'\n", c); + exit(-1); + } +} + +static BYTE HexByte(char *s) +{ + return (HexVal(s[0]) << 4) | HexVal(s[1]); +} + +static void LoadFlashFromSRecords(char *file, int addr) +{ + ExpectedAddr = addr; + + FILE *f = fopen(file, "r"); + if(!f) { + printf("couldn't open file\n"); + exit(-1); + } + + char line[512]; + while(fgets(line, sizeof(line), f)) { + if(memcmp(line, "S3", 2)==0) { + char *s = line + 2; + int len = HexByte(s) - 5; + s += 2; + + char addrStr[9]; + memcpy(addrStr, s, 8); + addrStr[8] = '\0'; + DWORD addr; + sscanf(addrStr, "%x", &addr); + s += 8; + + int i; + for(i = 0; i < len; i++) { + while((addr+i) > ExpectedAddr) { + GotByte(ExpectedAddr, 0xff); + } + GotByte(addr+i, HexByte(s)); + s += 2; + } + } + } + + if(!AllWritten) FlushPrevious(); + + fclose(f); + printf("\ndone.\n"); +} + +int main(int argc, char **argv) +{ + int i = 0; + + if(argc < 2) { + printf("Usage: %s bootrom file.s19\n", argv[0]); + printf(" %s load osimage.s19\n", argv[0]); + printf(" %s fpga fpgaimg.s19\n", argv[0]); + printf(" %s gui\n", argv[0]); + return -1; + } + + for(;;) { + if(UsbConnect()) { + break; + } + if(i == 0) { + printf("...no device connected, polling for it now\n"); + } + if(i > 50000) { + printf("Could not connect to USB device; exiting.\n"); + return -1; + } + i++; + Sleep(5); + } + + if(strcmp(argv[1], "bootrom")==0 || strcmp(argv[1], "load")==0 || strcmp(argv[1], "fpga")==0) { + if(argc != 3) { + printf("Need filename.\n"); + return -1; + } + if(strcmp(argv[1], "bootrom")==0) { + LoadFlashFromSRecords(argv[2], 0); + } else if(strcmp(argv[1], "fpga")==0) { + LoadFlashFromSRecords(argv[2], 0x2000); + } else { + LoadFlashFromSRecords(argv[2], 0x10000); + } + } else if(strcmp(argv[1], "gui")==0) { + ShowGui(); + } else if(strcmp(argv[1], "cmd")==0) { + if(argc != 3) { + printf("Need command.\n"); + return -1; + } + ExecCmd(argv[2]); + } else { + printf("Command '%s' not recognized.\n", argv[1]); + return -1; + } + + return 0; +} diff --git a/winsrc/prox.h b/winsrc/prox.h new file mode 100644 index 000000000..f3be604cb --- /dev/null +++ b/winsrc/prox.h @@ -0,0 +1,32 @@ +#ifndef __PROX_H +#define __PROX_H + +#include "../include/usb_cmd.h" + +// prox.cpp +void ReceiveCommand(UsbCommand *c); +BOOL ReceiveCommandPoll(UsbCommand *c); +void SendCommand(UsbCommand *c, BOOL wantAck); + +// gui.cpp +void ShowGui(void); +void HideGraphWindow(void); +void ShowGraphWindow(void); +void RepaintGraphWindow(void); +void PrintToScrollback(char *fmt, ...); +#define MAX_GRAPH_TRACE_LEN (1024*128) +extern int GraphBuffer[MAX_GRAPH_TRACE_LEN]; +extern int GraphTraceLen; +extern double CursorScaleFactor; +extern int CommandFinished; + +// command.cpp +void CommandReceived(char *cmd); +void UsbCommandReceived(UsbCommand *c); + +// cmdline.cpp +void ShowCommandline(void); +void ExecCmd(char *cmd); +//void PrintToScrollback(char *fmt, ...); + +#endif diff --git a/winsrc/vc90.pdb b/winsrc/vc90.pdb new file mode 100644 index 0000000000000000000000000000000000000000..2451797cc6f2a47ac0ebdc29a84701675df54179 GIT binary patch literal 94208 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 literal 0 HcmV?d00001

9dc|HIAm+t}@S`RkzG^ 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�(M!a&_mAx+5>(uZ(mjP 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�+J>dI$hr> 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