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:
nikapov
Date:
Tue Aug 08 12:11:02 2017 +0000
Revision:
37:059115ea6ece
Parent:
29:7a2dfd06cb29
Link to M24SR library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giovannivisentini 29:7a2dfd06cb29 1 /**
giovannivisentini 29:7a2dfd06cb29 2 ******************************************************************************
giovannivisentini 29:7a2dfd06cb29 3 * @file XNucleoNFC01A1.h
giovannivisentini 29:7a2dfd06cb29 4 * @author ST Central Labs
giovannivisentini 29:7a2dfd06cb29 5 * @date 30 Set 2016
giovannivisentini 29:7a2dfd06cb29 6 * @brief Singleton class that controls all the electronics inside the
giovannivisentini 29:7a2dfd06cb29 7 * XNucleoNFC01A1 expansion board
giovannivisentini 29:7a2dfd06cb29 8 ******************************************************************************
giovannivisentini 29:7a2dfd06cb29 9 *
giovannivisentini 29:7a2dfd06cb29 10 * COPYRIGHT(c) 2015 STMicroelectronics
giovannivisentini 29:7a2dfd06cb29 11 *
giovannivisentini 29:7a2dfd06cb29 12 * Redistribution and use in source and binary forms, with or without modification,
giovannivisentini 29:7a2dfd06cb29 13 * are permitted provided that the following conditions are met:
giovannivisentini 29:7a2dfd06cb29 14 * 1. Redistributions of source code must retain the above copyright notice,
giovannivisentini 29:7a2dfd06cb29 15 * this list of conditions and the following disclaimer.
giovannivisentini 29:7a2dfd06cb29 16 * 2. Redistributions in binary form must reproduce the above copyright notice,
giovannivisentini 29:7a2dfd06cb29 17 * this list of conditions and the following disclaimer in the documentation
giovannivisentini 29:7a2dfd06cb29 18 * and/or other materials provided with the distribution.
giovannivisentini 29:7a2dfd06cb29 19 * 3. Neither the name of STMicroelectronics nor the names of its contributors
giovannivisentini 29:7a2dfd06cb29 20 * may be used to endorse or promote products derived from this software
giovannivisentini 29:7a2dfd06cb29 21 * without specific prior written permission.
giovannivisentini 29:7a2dfd06cb29 22 *
giovannivisentini 29:7a2dfd06cb29 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
giovannivisentini 29:7a2dfd06cb29 24 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
giovannivisentini 29:7a2dfd06cb29 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
giovannivisentini 29:7a2dfd06cb29 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
giovannivisentini 29:7a2dfd06cb29 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
giovannivisentini 29:7a2dfd06cb29 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
giovannivisentini 29:7a2dfd06cb29 29 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
giovannivisentini 29:7a2dfd06cb29 30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
giovannivisentini 29:7a2dfd06cb29 31 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
giovannivisentini 29:7a2dfd06cb29 32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
giovannivisentini 29:7a2dfd06cb29 33 *
giovannivisentini 29:7a2dfd06cb29 34 ******************************************************************************
giovannivisentini 29:7a2dfd06cb29 35 */
giovannivisentini 29:7a2dfd06cb29 36
giovannivisentini 29:7a2dfd06cb29 37 #include <XNucleoNFC01A1.h>
giovannivisentini 29:7a2dfd06cb29 38
giovannivisentini 29:7a2dfd06cb29 39 const uint8_t XNucleoNFC01A1::M24SR_ADDR=0xAC;
giovannivisentini 29:7a2dfd06cb29 40 const PinName XNucleoNFC01A1::DEFAULT_SDA_PIN=D14;
giovannivisentini 29:7a2dfd06cb29 41 const PinName XNucleoNFC01A1::DEFAULT_SDL_PIN=D15;
giovannivisentini 29:7a2dfd06cb29 42
giovannivisentini 29:7a2dfd06cb29 43
giovannivisentini 29:7a2dfd06cb29 44 const PinName XNucleoNFC01A1::DEFAULT_GPO_PIN=D12;
giovannivisentini 29:7a2dfd06cb29 45 const PinName XNucleoNFC01A1::DEFAULT_RF_DISABLE_PIN=D11;
giovannivisentini 29:7a2dfd06cb29 46 const PinName XNucleoNFC01A1::DEFAULT_LED1_PIN=D5;
giovannivisentini 29:7a2dfd06cb29 47 const PinName XNucleoNFC01A1::DEFAULT_LED2_PIN=D4;
giovannivisentini 29:7a2dfd06cb29 48 const PinName XNucleoNFC01A1::DEFAULT_LED3_PIN=D2;
giovannivisentini 29:7a2dfd06cb29 49
giovannivisentini 29:7a2dfd06cb29 50 XNucleoNFC01A1* XNucleoNFC01A1::mInstance;
giovannivisentini 29:7a2dfd06cb29 51
giovannivisentini 29:7a2dfd06cb29 52 XNucleoNFC01A1* XNucleoNFC01A1::instance(I2C &devI2C,
giovannivisentini 29:7a2dfd06cb29 53 M24SR::gpoEventCallback gpoEventCallback,
giovannivisentini 29:7a2dfd06cb29 54 const PinName &gpoName,
giovannivisentini 29:7a2dfd06cb29 55 const PinName &RFDisableName, const PinName &led1Name,
giovannivisentini 29:7a2dfd06cb29 56 const PinName &led2Name, const PinName &led3Name) {
giovannivisentini 29:7a2dfd06cb29 57 if (mInstance == NULL) { // the first time
giovannivisentini 29:7a2dfd06cb29 58 mInstance = new XNucleoNFC01A1(devI2C,gpoEventCallback,gpoName,
giovannivisentini 29:7a2dfd06cb29 59 RFDisableName,led1Name,led2Name,led3Name);
giovannivisentini 29:7a2dfd06cb29 60 if (mInstance != NULL) { //allocation ok
giovannivisentini 29:7a2dfd06cb29 61 const int status = mInstance->mM24SR.init(NULL);
giovannivisentini 29:7a2dfd06cb29 62 if (status != NFC_SUCCESS) { //initialization failed
giovannivisentini 29:7a2dfd06cb29 63 delete mInstance;
giovannivisentini 29:7a2dfd06cb29 64 error(
giovannivisentini 29:7a2dfd06cb29 65 "Failed to init XNucleoNFC01A1 expansion board!\r\nError:0x%X\r\n",
giovannivisentini 29:7a2dfd06cb29 66 status);
giovannivisentini 29:7a2dfd06cb29 67 } //if init
giovannivisentini 29:7a2dfd06cb29 68 } //if instance !=NULL
giovannivisentini 29:7a2dfd06cb29 69 } //if instance
giovannivisentini 29:7a2dfd06cb29 70 return mInstance;
giovannivisentini 29:7a2dfd06cb29 71 }