![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
grove nfc_tag sample program
Dependencies: mbed
nfc_tag.h
- Committer:
- superphil06
- Date:
- 2017-03-28
- Revision:
- 0:b939441bcdc7
File content as of revision 0:b939441bcdc7:
/* * NfcTag.h * a library to use NFC Tag * * Copyright (c) 2014 seeed technology inc. * Website : www.seeed.cc * Author : lawliet zou * Create Time: March 2014 * Change Log : * * The MIT License (MIT) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ //#include "arduino.h" //#include <Wire.h> #include <mbed.h> #ifndef __NFC_TAG_H__ #define __NFC_TAG_H__ #define EEPROM_ADDR_E2_DISABLE 0x53 //disable E2 #define EEPROM_ADDR_E2_ENABLE (0x53|0x04) //enable E2 #define EEPROM_I2C_LENGTH 8192 #define PASSWORD_LENGTH 4 #define SECTOR_SECURITY_STATUS_BASE_ADDR 0x800 //2048 #define LOCK_PROTECT_BIT BIT0 #define WRITE_READ_PROTECT_BIT BIT1 #define PASSWORD_CTRL_BIT BIT3 #define I2C_PASSWORD_ADDR 2304 #define RF_PASSWORD_1_ADDR 2308 #define RF_PASSWORD_2_ADDR 2312 #define RF_PASSWORD_3_ADDR 2316 #define DSFID_ADDR 2320 //1 uint8_t #define AFI_ADDR 2321 //1 uint8_t #define RFU_ADDR 2322 //2 uint8_ts #define UID_ADDR 2324 //8 uint8_ts #define UID_LENGTH 8 #define MEMORY_VOLUME_ADDR 2332 //3 uint8_ts #define IC_NUMBER_ADDR 2335 //1 uint8_t enum AccessMode{ USER_MODE = 0x0, // offer simple read/write access right ROOT_MODE = 0x1, // offer password change access right }; enum SectorAccessRight{ // ********************************** // * submit passWd * no submit * //b2,b1 * Read * Write * Read * Write * // 00 * 1 1 1 0 * // 01 * 1 1 1 1 * // 10 * 1 1 0 0 * // 11 * 0 1 0 0 * // ********************************** Access_1110 = 0, Access_1111 = 1, Access_1100 = 2, Access_0111 = 3, }; enum SectorSelectPassWd{ //00 => no passWd protect //01 => passWd 1 //10 => passWd 2 //11 => passwd 3 noPassWd = 0, passWd_1 = 1, passWd_2 = 2, passWd_3 = 3, }; class NfcTag { public: /* NfcTag(AccessMode mode = USER_MODE){ if(mode == USER_MODE){ eeAddr = EEPROM_ADDR_E2_DISABLE; }else{ eeAddr = EEPROM_ADDR_E2_ENABLE; } };*/ // constructor NfcTag(PinName sda,PinName scl,uint8_t address,AccessMode mode); ~NfcTag(); // void init(); void submitPassWd(uint8_t* passWd); void writePassWd(uint8_t* passWd); void sectorProtectConfig(unsigned int sectorNumber, bool protectEnable, SectorAccessRight accessRight = Access_1110, SectorSelectPassWd passWd = noPassWd); void clearSectorProtect(void); void sectorWriteSockConfig(unsigned int sectorNumber, bool sockEnable); uint8_t getDSFID(); uint8_t getAFI(); uint16_t getRFU(); uint8_t getUID(uint8_t* buf); uint32_t getMemoryVolume(); uint8_t getICNumber(); void clearMemory(); void writeuint8_t(unsigned int address, uint8_t data); void writeuint8_ts(unsigned int address, uint8_t* buf, unsigned int len); uint8_t readuint8_t(unsigned int address); void readuint8_ts(unsigned int address, uint8_t* buf, unsigned int len); private: I2C m_I2C; int eeAddr; void _EEPROM_Write_uint8_t(unsigned int address, uint8_t data); void _EEPROM_Write_uint8_ts(unsigned int address, uint8_t* buf, unsigned int len); uint8_t _EEPROM_Read_uint8_t(unsigned int address); unsigned int _EEPROM_Read_uint8_ts(unsigned int address, uint8_t* buf, unsigned int len); uint8_t _address; // I2C Module Address }; #endif