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 00000000..8094a4ac --- /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 00000000..43d215c1 --- /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 00000000..9ce27983 --- /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 00000000..541365c2 --- /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 00000000..02c2f696 --- /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 00000000..27971eba --- /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 00000000..e09c8357 --- /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 00000000..a2267ba9 --- /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 00000000..81e99ce5 --- /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 00000000..621a7f56 --- /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 00000000..2bcade28 --- /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 00000000..a687d877 --- /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 00000000..2592cbfe --- /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 00000000..ac0fe2bd --- /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 00000000..da8b1a21 --- /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 00000000..52296fc2 --- /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 00000000..b3f0e76e --- /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 00000000..e18737c3 --- /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 00000000..c654db29 --- /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 00000000..afb658a4 --- /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 00000000..e6868092 --- /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 00000000..0d5d7325 --- /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 00000000..5dd57061 --- /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 00000000..56bf36e3 --- /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 00000000..5010957b --- /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 00000000..a8ecb6e4 --- /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 00000000..a56fcfe0 --- /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 00000000..82228e32 --- /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 00000000..6f226184 --- /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 00000000..072393d9 --- /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 00000000..06b24edc --- /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 00000000..cf29d0e0 --- /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 00000000..f0b95291 --- /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 00000000..b209cc03 --- /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 00000000..f3b49c77 --- /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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�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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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 literal 0 HcmV?d00001 diff --git a/doc/schematics.pdf b/doc/schematics.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8ed8470b6c81955604b0854158a752168c4bb9d5 GIT binary patch literal 834286 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%0DSYD?SY!@b6AN5+u(08t)v6+K`fUPllDyFll@&V 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 ca" 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 00000000..cbebc395 --- /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 00000000..8600d3cd --- /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 00000000..eb03fa23 --- /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 00000000..253f5080 --- /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 00000000..c2cec3ab --- /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 00000000..d0a71176 --- /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 00000000..9c3edb22 --- /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 00000000..7eb910ba --- /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 00000000..477acd1d --- /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 00000000..3ef2766a --- /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 00000000..0d600a1f --- /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 00000000..6dc30f0b --- /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 00000000..11908d77 --- /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 00000000..d30f822d --- /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 00000000..c500edb4 --- /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 00000000..365db39a --- /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 00000000..1a5fe1c4 --- /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 00000000..1a189a9e --- /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 00000000..a94435e8 --- /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 00000000..902045c6 --- /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 00000000..05f31249 --- /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 00000000..6d442f0e --- /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 00000000..39bcc756 --- /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 00000000..7e87b582 --- /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 00000000..c1e9198f --- /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 00000000..773d74b8 --- /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 00000000..58ff8326 --- /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 00000000..5a3d6f2d --- /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 00000000..63fa406f --- /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 00000000..145268a0 --- /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 00000000..986c0015 --- /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 00000000..8145b64a --- /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 00000000..e69de29b diff --git a/winsrc/Makefile b/winsrc/Makefile new file mode 100644 index 00000000..b398c2c1 --- /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 00000000..1da1e1c2 --- /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 00000000..e4e530b3 --- /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 00000000..e9816cf4 --- /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 00000000..d0db806b --- /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 00000000..4ea9dd12 --- /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 00000000..e95a4aff --- /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 00000000..f3be604c --- /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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 X(LkbsL<5Ni5)C98NHp-@Tm%0POxOT? literal 0 HcmV?d00001 -- 2.39.5

    +vVQ9vIP+6%*ac|=J|6yL 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 $(^aIP@9sbc;0@Z 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