Firmware library for the X-NUCLEO-NFC01A1 Dynamic NFC Tag board.

Dependencies:   M24SR

Dependents:   NFC M2M_2016_STM32 MyongjiElec_capstone1 IDW01M1_Cloud_IBM ... more

Fork of X_NUCLEO_NFC01A1 by ST Expansion SW Team

X-NUCLEO-NFC01A1 Dynamic NFC Tag Expansion Board Firmware Package

Introduction

This firmware package includes Components Device Drivers, Board Support Package and example applications for STMicroelectronics X-NUCLEO-NFC01A1 Dynamic NFC Tag Expansion Board based on M24SR.

Firmware Library

Class X_NUCLEO_NFC01A1 is intended to represent the Dynamic NFC Tag Expansion Board with the same name.
It provides an API to access to the M24SR component and to the three onboard LEDs.
It is intentionally implemented as a singleton because only one X_NUCLEO_NFC01A1 at a time might be deployed in a HW component stack.
The library also provides an implementation of the NDEF library API for M24SR, providing an simple way to read/write NDEF formatted messages from/to the M24SR dynamic NFC tag.

Example applications

1. Hello World
2. Asynchronous Hello World

Committer:
giovannivisentini
Date:
Tue Jan 12 14:24:42 2016 +0000
Revision:
11:a798ebea69fa
Parent:
8:5e637c71cbb3
Nfc_class doesn't depent by m24sr.h;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giovannivisentini 6:96389fb79676 1 /**
giovannivisentini 6:96389fb79676 2 ******************************************************************************
giovannivisentini 6:96389fb79676 3 * @file Type4NfcTagM24SR.h
giovannivisentini 6:96389fb79676 4 * @author ST Central Labs
giovannivisentini 6:96389fb79676 5 * @date 05 Nov 2015
giovannivisentini 6:96389fb79676 6 * @brief wrapper class for use the NDefLib library for write/read ndef message
giovannivisentini 6:96389fb79676 7 ******************************************************************************
giovannivisentini 6:96389fb79676 8 *
giovannivisentini 6:96389fb79676 9 * COPYRIGHT(c) 2015 STMicroelectronics
giovannivisentini 6:96389fb79676 10 *
giovannivisentini 6:96389fb79676 11 * Redistribution and use in source and binary forms, with or without modification,
giovannivisentini 6:96389fb79676 12 * are permitted provided that the following conditions are met:
giovannivisentini 6:96389fb79676 13 * 1. Redistributions of source code must retain the above copyright notice,
giovannivisentini 6:96389fb79676 14 * this list of conditions and the following disclaimer.
giovannivisentini 6:96389fb79676 15 * 2. Redistributions in binary form must reproduce the above copyright notice,
giovannivisentini 6:96389fb79676 16 * this list of conditions and the following disclaimer in the documentation
giovannivisentini 6:96389fb79676 17 * and/or other materials provided with the distribution.
giovannivisentini 6:96389fb79676 18 * 3. Neither the name of STMicroelectronics nor the names of its contributors
giovannivisentini 6:96389fb79676 19 * may be used to endorse or promote products derived from this software
giovannivisentini 6:96389fb79676 20 * without specific prior written permission.
giovannivisentini 6:96389fb79676 21 *
giovannivisentini 6:96389fb79676 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
giovannivisentini 6:96389fb79676 23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
giovannivisentini 6:96389fb79676 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
giovannivisentini 6:96389fb79676 25 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
giovannivisentini 6:96389fb79676 26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
giovannivisentini 6:96389fb79676 27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
giovannivisentini 6:96389fb79676 28 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
giovannivisentini 6:96389fb79676 29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
giovannivisentini 6:96389fb79676 30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
giovannivisentini 6:96389fb79676 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
giovannivisentini 6:96389fb79676 32 *
giovannivisentini 6:96389fb79676 33 ******************************************************************************
giovannivisentini 6:96389fb79676 34 */
giovannivisentini 6:96389fb79676 35
giovannivisentini 6:96389fb79676 36 #ifndef NDEFNFCTAGSTM24_H_
giovannivisentini 6:96389fb79676 37 #define NDEFNFCTAGSTM24_H_
giovannivisentini 6:96389fb79676 38 #include <stdint.h>
giovannivisentini 6:96389fb79676 39
giovannivisentini 11:a798ebea69fa 40 #include "Nfc_class.h"
giovannivisentini 6:96389fb79676 41 #include "NDefLib/NDefNfcTag.h"
giovannivisentini 6:96389fb79676 42
giovannivisentini 11:a798ebea69fa 43
giovannivisentini 6:96389fb79676 44
giovannivisentini 6:96389fb79676 45 /**
giovannivisentini 8:5e637c71cbb3 46 * implement the abstract method for use the NDefLib */
giovannivisentini 6:96389fb79676 47 class NDefNfcTagM24SR: public NDefLib::NDefNfcTag {
giovannivisentini 6:96389fb79676 48
giovannivisentini 6:96389fb79676 49 public:
giovannivisentini 6:96389fb79676 50 /**
giovannivisentini 8:5e637c71cbb3 51 * create the object
giovannivisentini 6:96389fb79676 52 * @param device device where write the Ndef tags
giovannivisentini 6:96389fb79676 53 */
giovannivisentini 11:a798ebea69fa 54 NDefNfcTagM24SR(Nfc &device) :
giovannivisentini 11:a798ebea69fa 55 mDevice(device), mMaxReadBytes(0xFF),
giovannivisentini 11:a798ebea69fa 56 mMaxWriteBytes(0xFF) {
giovannivisentini 6:96389fb79676 57 }
giovannivisentini 6:96389fb79676 58
giovannivisentini 8:5e637c71cbb3 59 /**
giovannivisentini 8:5e637c71cbb3 60 * open the communication with the nfc tag
giovannivisentini 8:5e637c71cbb3 61 * \par when override this method call this implementation as last action for set the session opened
giovannivisentini 8:5e637c71cbb3 62 * @param force force to open a communication
giovannivisentini 8:5e637c71cbb3 63 * @return true if success
giovannivisentini 8:5e637c71cbb3 64 */
giovannivisentini 6:96389fb79676 65 virtual bool openSession(bool force = false);
giovannivisentini 8:5e637c71cbb3 66
giovannivisentini 8:5e637c71cbb3 67 /**
giovannivisentini 8:5e637c71cbb3 68 * close the communication with the nfc tag
giovannivisentini 8:5e637c71cbb3 69 * \par when override this method call this implementation as last action for set the session closed
giovannivisentini 8:5e637c71cbb3 70 * @return true if success
giovannivisentini 8:5e637c71cbb3 71 */
giovannivisentini 6:96389fb79676 72 virtual bool closeSession();
giovannivisentini 6:96389fb79676 73
giovannivisentini 6:96389fb79676 74 /**
giovannivisentini 6:96389fb79676 75 * close the open session
giovannivisentini 6:96389fb79676 76 */
giovannivisentini 6:96389fb79676 77 virtual ~NDefNfcTagM24SR() {
giovannivisentini 6:96389fb79676 78 if(isSessionOpen())
giovannivisentini 6:96389fb79676 79 closeSession();
giovannivisentini 6:96389fb79676 80 }//~Type4NfcTagM24SR
giovannivisentini 6:96389fb79676 81
giovannivisentini 6:96389fb79676 82
giovannivisentini 6:96389fb79676 83
giovannivisentini 6:96389fb79676 84 protected:
giovannivisentini 8:5e637c71cbb3 85
giovannivisentini 8:5e637c71cbb3 86 /**
giovannivisentini 8:5e637c71cbb3 87 * write a sequence of byte in the NDEF file
giovannivisentini 8:5e637c71cbb3 88 * @param buffer buffer to write
giovannivisentini 8:5e637c71cbb3 89 * @param length number of byte to write
giovannivisentini 8:5e637c71cbb3 90 * @param offset offset where start to write
giovannivisentini 8:5e637c71cbb3 91 * @return true if success
giovannivisentini 8:5e637c71cbb3 92 */
giovannivisentini 6:96389fb79676 93 virtual bool writeByte(const uint8_t *buffer, const uint16_t length, uint16_t offset);
giovannivisentini 8:5e637c71cbb3 94
giovannivisentini 8:5e637c71cbb3 95 /**
giovannivisentini 8:5e637c71cbb3 96 * read a sequence of byte from the NDEF file
giovannivisentini 8:5e637c71cbb3 97 * @param byteOffset offset were start read
giovannivisentini 8:5e637c71cbb3 98 * @param byteLength number of byte to read
giovannivisentini 8:5e637c71cbb3 99 * @param[out] buffer buffer where store the data read
giovannivisentini 8:5e637c71cbb3 100 * @return true if success
giovannivisentini 8:5e637c71cbb3 101 */
giovannivisentini 6:96389fb79676 102 virtual bool readByte(const uint16_t byteOffset, const uint16_t byteLength,
giovannivisentini 6:96389fb79676 103 uint8_t *buffer);
giovannivisentini 6:96389fb79676 104
giovannivisentini 6:96389fb79676 105 private:
giovannivisentini 6:96389fb79676 106
giovannivisentini 11:a798ebea69fa 107 Nfc &mDevice;
giovannivisentini 6:96389fb79676 108
giovannivisentini 6:96389fb79676 109 /**
giovannivisentini 6:96389fb79676 110 * max length for a read operation
giovannivisentini 6:96389fb79676 111 */
giovannivisentini 6:96389fb79676 112 uint16_t mMaxReadBytes;
giovannivisentini 6:96389fb79676 113
giovannivisentini 6:96389fb79676 114 /**
giovannivisentini 6:96389fb79676 115 * max length for a write operation
giovannivisentini 6:96389fb79676 116 */
giovannivisentini 6:96389fb79676 117 uint16_t mMaxWriteBytes;
giovannivisentini 6:96389fb79676 118 };
giovannivisentini 6:96389fb79676 119
giovannivisentini 6:96389fb79676 120 #endif /* NDEFNFCTAGSTM24_H_ */