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:
Thu Jan 14 07:54:59 2016 +0000
Revision:
9:9f2e2e68d695
Parent:
8:5e637c71cbb3
Child:
12:d1f5eaa85deb
update documentation 3

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