RFID tracking with mbed & RS-EDP reference design

Dependencies:   RWDModule mbed SDCard

Committer:
donatien
Date:
Wed Jul 28 11:02:36 2010 +0000
Revision:
0:fd63457452f4

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:fd63457452f4 1 /*
donatien 0:fd63457452f4 2 Copyright (c) 2010 ARM Limited
donatien 0:fd63457452f4 3
donatien 0:fd63457452f4 4 Permission is hereby granted, free of charge, to any person obtaining a copy
donatien 0:fd63457452f4 5 of this software and associated documentation files (the "Software"), to deal
donatien 0:fd63457452f4 6 in the Software without restriction, including without limitation the rights
donatien 0:fd63457452f4 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
donatien 0:fd63457452f4 8 copies of the Software, and to permit persons to whom the Software is
donatien 0:fd63457452f4 9 furnished to do so, subject to the following conditions:
donatien 0:fd63457452f4 10
donatien 0:fd63457452f4 11 The above copyright notice and this permission notice shall be included in
donatien 0:fd63457452f4 12 all copies or substantial portions of the Software.
donatien 0:fd63457452f4 13
donatien 0:fd63457452f4 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
donatien 0:fd63457452f4 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
donatien 0:fd63457452f4 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
donatien 0:fd63457452f4 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
donatien 0:fd63457452f4 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
donatien 0:fd63457452f4 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
donatien 0:fd63457452f4 20 THE SOFTWARE.
donatien 0:fd63457452f4 21 */
donatien 0:fd63457452f4 22
donatien 0:fd63457452f4 23 #include "RWDMifare.h"
donatien 0:fd63457452f4 24
donatien 0:fd63457452f4 25 RWDMifare::RWDMifare(PinName tx, PinName rx, PinName cts) : RWDModule(tx, rx, cts)
donatien 0:fd63457452f4 26 {
donatien 0:fd63457452f4 27
donatien 0:fd63457452f4 28 }
donatien 0:fd63457452f4 29
donatien 0:fd63457452f4 30 RWDMifare::~RWDMifare()
donatien 0:fd63457452f4 31 {
donatien 0:fd63457452f4 32
donatien 0:fd63457452f4 33 }
donatien 0:fd63457452f4 34
donatien 0:fd63457452f4 35 RWDMifare::RWDMifareErr RWDMifare::init()
donatien 0:fd63457452f4 36 {
donatien 0:fd63457452f4 37 const uint8_t config[] = {0x03, 0x00}; //Configure ready for Mifare Op (0x00 to addr 0x03 in EEPROM)
donatien 0:fd63457452f4 38 uint8_t resp[64] = {0};
donatien 0:fd63457452f4 39 //Cf http://www.ibtechnology.co.uk/pdf/MF_ICprot.pdf
donatien 0:fd63457452f4 40 //Command 'P': cf p11
donatien 0:fd63457452f4 41 //EEPROM parameters: cf p12
donatien 0:fd63457452f4 42 //Ack check: cf p13
donatien 0:fd63457452f4 43 command(0x50, config, 2, resp, 0, 0x80, 0x89); //Program EEPROM command is 0x50 ('P')
donatien 0:fd63457452f4 44 while(!ready()) //Wait for a response
donatien 0:fd63457452f4 45 {
donatien 0:fd63457452f4 46
donatien 0:fd63457452f4 47 }
donatien 0:fd63457452f4 48
donatien 0:fd63457452f4 49 if(!result()) //If this fails, there is something wrong with the hardware
donatien 0:fd63457452f4 50 {
donatien 0:fd63457452f4 51 return MIFARE_HW;
donatien 0:fd63457452f4 52 }
donatien 0:fd63457452f4 53
donatien 0:fd63457452f4 54 return MIFARE_OK;
donatien 0:fd63457452f4 55 }
donatien 0:fd63457452f4 56
donatien 0:fd63457452f4 57 RWDMifare::RWDMifareErr RWDMifare::getUID(uint8_t* pUID, size_t* pLen) //pUID must be at least 10-bytes long
donatien 0:fd63457452f4 58 //(A Mifare UID can either be 4, 7, or 10 bytes long)
donatien 0:fd63457452f4 59 //This reader does not support 10 bytes uids
donatien 0:fd63457452f4 60 {
donatien 0:fd63457452f4 61 //Cf http://www.ibtechnology.co.uk/pdf/MF_ICprot.pdf
donatien 0:fd63457452f4 62 //Command 'U': cf p19
donatien 0:fd63457452f4 63 //Ack check: cf p13
donatien 0:fd63457452f4 64 command(0x55, NULL, 0, pUID, 7, 0x86, 0x86); //UID command is 0x55 ('U')
donatien 0:fd63457452f4 65 while(!ready()) //Wait for a response
donatien 0:fd63457452f4 66 {
donatien 0:fd63457452f4 67
donatien 0:fd63457452f4 68 }
donatien 0:fd63457452f4 69
donatien 0:fd63457452f4 70 if(!result()) //Error detected, there is no card in field
donatien 0:fd63457452f4 71 {
donatien 0:fd63457452f4 72 return MIFARE_NOCARD;
donatien 0:fd63457452f4 73 }
donatien 0:fd63457452f4 74
donatien 0:fd63457452f4 75 printf("Got card.\n");
donatien 0:fd63457452f4 76
donatien 0:fd63457452f4 77 //Checks UID length returned by reader
donatien 0:fd63457452f4 78 int i;
donatien 0:fd63457452f4 79 for(i = 0; i < 7; i++)
donatien 0:fd63457452f4 80 {
donatien 0:fd63457452f4 81 if(pUID[i] == 0) //End of UID, cf http://www.ibtechnology.co.uk/pdf/MF_ICprot.pdf p19
donatien 0:fd63457452f4 82 break;
donatien 0:fd63457452f4 83 }
donatien 0:fd63457452f4 84 *pLen = i;
donatien 0:fd63457452f4 85
donatien 0:fd63457452f4 86 return MIFARE_OK;
donatien 0:fd63457452f4 87 }