1 /**************************************************************************/
4 @author K. Townsend (microBuilder.eu)
8 Software License Agreement (BSD License)
10 Copyright (c) 2010, microBuilder SARL
13 Redistribution and use in source and binary forms, with or without
14 modification, are permitted provided that the following conditions are met:
15 1. Redistributions of source code must retain the above copyright
16 notice, this list of conditions and the following disclaimer.
17 2. Redistributions in binary form must reproduce the above copyright
18 notice, this list of conditions and the following disclaimer in the
19 documentation and/or other materials provided with the distribution.
20 3. Neither the name of the copyright holders nor the
21 names of its contributors may be used to endorse or promote products
22 derived from this software without specific prior written permission.
24 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
25 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
28 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
31 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 /**************************************************************************/
38 #include "projectconfig.h"
41 #include "drivers/sensors/pn532/pn532.h"
42 #include "drivers/sensors/pn532/pn532_drvr.h"
44 /**************************************************************************/
46 Main program entry point. After reset, normal code execution will
49 Note: CFG_INTERFACE is normally enabled by default. If you wish to
50 enable the blinking LED code in main, you will need to open
51 projectconfig.h, comment out "#define CFG_INTERFACE" and
54 /**************************************************************************/
58 #error "CFG_INTERFACE must be disabled in projectconfig.h for this demo"
60 #if !defined CFG_PRINTF_USBCDC
61 #error "CFG_PRINTF_USBCDC must be enabled in projectconfig.h for this demo"
64 // Configure cpu and mandatory peripherals
67 // Wait 5 second for someone to open the USB connection for printf
70 // Initialise the PN532
77 // Setup command to initialise a single ISO14443A target at 106kbps
78 byte_t abtCommand
[] = { PN532_COMMAND_INLISTPASSIVETARGET
, 0x01, PN532_MODULATION_ISO14443A_106KBPS
};
82 printf("%s", CFG_PRINTF_NEWLINE
);
83 printf("Waiting for an ISO14443A card (Mifare Classic, etc.)%s", CFG_PRINTF_NEWLINE
);
85 // Send the command (and handle the most common errors)
86 error
= pn532Write(abtCommand
, sizeof(abtCommand
));
89 // Something went wrong sending the command (probably the bus selection or wiring)
92 case (PN532_ERROR_NOACK
):
93 // No ACK frame received in UART mode (bus pins not set correctly?)
94 printf("Ooops ... No ACK frame was received! Are the bus pins sets to UART?%s", CFG_PRINTF_NEWLINE
);
96 case (PN532_ERROR_I2C_NACK
):
97 // No ACK bit received to I2C start (bus pins not set correctly?)
98 printf("Ooops ... No ACK bit received for I2C start! Are the bus pins sets to I2C?%s", CFG_PRINTF_NEWLINE
);
101 printf("Ooops ... something went wrong! [PN532 Error Code: 0x%02X]%s", error
, CFG_PRINTF_NEWLINE
);
107 // Commmand seems to have gone through ...
110 // Keep reading until we get a response or an unexpected error condition
111 error
= pn532Read(response
, &responseLen
);
114 while (error
== PN532_ERROR_RESPONSEBUFFEREMPTY
);
116 // Print the card details if possible
119 /* Response for ISO14443A 106KBPS (Mifare Classic, etc.)
120 See UM0701-02 section 7.3.5 for more information
123 ------------- ------------------------------------------
125 b8 Tag Number (only one used in this example)
131 SENS_RES SEL_RES Manufacturer/Card Type NFCID Len
132 -------- ------- ----------------------- ---------
133 00 04 08 NXP Mifare Classic 1K 4 bytes */
135 printf("%s", CFG_PRINTF_NEWLINE
);
136 printf("%-12s: %d %s", "Tags Found", response
[7], CFG_PRINTF_NEWLINE
);
137 printf("%-12s: %02X %02X %s", "SENS_RES", response
[9], response
[10], CFG_PRINTF_NEWLINE
);
138 printf("%-12s: %02X %s", "SEL_RES", response
[11], CFG_PRINTF_NEWLINE
);
139 printf("%-12s: ", "NFCID");
141 for (pos
=0; pos
< response
[12]; pos
++)
143 printf("%02x ", response
[13 + pos
]);
145 printf(CFG_PRINTF_NEWLINE
);
146 if ((response
[9] == 0x00) && (response
[10] == 0x04) && (response
[11] == 0x08))
148 printf("Seems to be a Mifare Classic 1K Card%s", CFG_PRINTF_NEWLINE
);
153 // Oops .... something bad happened. Check 'error'
154 printf("Ooops! Error %02X %s", error
, CFG_PRINTF_NEWLINE
);
158 // Wait at least one second before trying again