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:
Mon Aug 07 13:28:51 2017 +0000
Revision:
36:38cca9c4c3d8
Parent:
29:7a2dfd06cb29
Update mbed lib.

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 * @version V1.1.0
giovannivisentini 29:7a2dfd06cb29 6 * @date 30 Set 2016
giovannivisentini 29:7a2dfd06cb29 7 * @brief Singleton class that controls all the electronics inside the
giovannivisentini 29:7a2dfd06cb29 8 * XNucleoNFC01A1 expansion board.
giovannivisentini 29:7a2dfd06cb29 9 ******************************************************************************
giovannivisentini 29:7a2dfd06cb29 10 * @attention
giovannivisentini 29:7a2dfd06cb29 11 *
giovannivisentini 29:7a2dfd06cb29 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
giovannivisentini 29:7a2dfd06cb29 13 *
giovannivisentini 29:7a2dfd06cb29 14 * Redistribution and use in source and binary forms, with or without modification,
giovannivisentini 29:7a2dfd06cb29 15 * are permitted provided that the following conditions are met:
giovannivisentini 29:7a2dfd06cb29 16 * 1. Redistributions of source code must retain the above copyright notice,
giovannivisentini 29:7a2dfd06cb29 17 * this list of conditions and the following disclaimer.
giovannivisentini 29:7a2dfd06cb29 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
giovannivisentini 29:7a2dfd06cb29 19 * this list of conditions and the following disclaimer in the documentation
giovannivisentini 29:7a2dfd06cb29 20 * and/or other materials provided with the distribution.
giovannivisentini 29:7a2dfd06cb29 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
giovannivisentini 29:7a2dfd06cb29 22 * may be used to endorse or promote products derived from this software
giovannivisentini 29:7a2dfd06cb29 23 * without specific prior written permission.
giovannivisentini 29:7a2dfd06cb29 24 *
giovannivisentini 29:7a2dfd06cb29 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
giovannivisentini 29:7a2dfd06cb29 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
giovannivisentini 29:7a2dfd06cb29 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
giovannivisentini 29:7a2dfd06cb29 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
giovannivisentini 29:7a2dfd06cb29 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
giovannivisentini 29:7a2dfd06cb29 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
giovannivisentini 29:7a2dfd06cb29 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
giovannivisentini 29:7a2dfd06cb29 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
giovannivisentini 29:7a2dfd06cb29 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
giovannivisentini 29:7a2dfd06cb29 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
giovannivisentini 29:7a2dfd06cb29 35 *
giovannivisentini 29:7a2dfd06cb29 36 ******************************************************************************
giovannivisentini 29:7a2dfd06cb29 37 */
giovannivisentini 29:7a2dfd06cb29 38
giovannivisentini 29:7a2dfd06cb29 39 #ifndef XNucleoNFC01A1_H_
giovannivisentini 29:7a2dfd06cb29 40 #define XNucleoNFC01A1_H_
giovannivisentini 29:7a2dfd06cb29 41 #include <stdint.h>
giovannivisentini 29:7a2dfd06cb29 42
giovannivisentini 29:7a2dfd06cb29 43 #include "mbed.h"
giovannivisentini 29:7a2dfd06cb29 44
nikapov 36:38cca9c4c3d8 45 #include "M24SR.h"
giovannivisentini 29:7a2dfd06cb29 46
giovannivisentini 29:7a2dfd06cb29 47 /**
giovannivisentini 29:7a2dfd06cb29 48 * Singleton class that controls all the electronics inside the XNucleoNFC01A1 expansion board.
giovannivisentini 29:7a2dfd06cb29 49 */
giovannivisentini 29:7a2dfd06cb29 50 class XNucleoNFC01A1 {
giovannivisentini 29:7a2dfd06cb29 51
giovannivisentini 29:7a2dfd06cb29 52 public:
giovannivisentini 29:7a2dfd06cb29 53
giovannivisentini 29:7a2dfd06cb29 54 private:
giovannivisentini 29:7a2dfd06cb29 55 /**
giovannivisentini 29:7a2dfd06cb29 56 * Pointer to the singleton instance, NULL if not allocated.
giovannivisentini 29:7a2dfd06cb29 57 */
giovannivisentini 29:7a2dfd06cb29 58 static XNucleoNFC01A1 *mInstance;
giovannivisentini 29:7a2dfd06cb29 59 /**
giovannivisentini 29:7a2dfd06cb29 60 * I2C address of the M24SR chip.
giovannivisentini 29:7a2dfd06cb29 61 */
giovannivisentini 29:7a2dfd06cb29 62 static const uint8_t M24SR_ADDR;
giovannivisentini 29:7a2dfd06cb29 63
giovannivisentini 29:7a2dfd06cb29 64 /**
giovannivisentini 29:7a2dfd06cb29 65 * Constructor
giovannivisentini 29:7a2dfd06cb29 66 * @param devI2C I2C channel used to communicate with the board.
giovannivisentini 29:7a2dfd06cb29 67 * @param eventCallback Function that will be called when the gpo pin status change.
giovannivisentini 29:7a2dfd06cb29 68 * @param gpoName Name of the gpio pin of the M24SR chip.
giovannivisentini 29:7a2dfd06cb29 69 * @param RFDisableName Pin that controls the rf antenna status.
giovannivisentini 29:7a2dfd06cb29 70 * @param led1Name Pin to control the led1 status.
giovannivisentini 29:7a2dfd06cb29 71 * @param led2Name Pin to control the led1 status.
giovannivisentini 29:7a2dfd06cb29 72 * @param led3Name Pin to control the led1 status.
giovannivisentini 29:7a2dfd06cb29 73 */
giovannivisentini 29:7a2dfd06cb29 74 XNucleoNFC01A1(I2C &devI2C,M24SR::gpoEventCallback eventCallback,
giovannivisentini 29:7a2dfd06cb29 75 const PinName &gpoName, const PinName &RFDisableName,
giovannivisentini 29:7a2dfd06cb29 76 const PinName &led1Name, const PinName &led2Name,
giovannivisentini 29:7a2dfd06cb29 77 const PinName &led3Name):
giovannivisentini 29:7a2dfd06cb29 78 mM24SR(M24SR_ADDR,devI2C,eventCallback,gpoName,RFDisableName),
giovannivisentini 29:7a2dfd06cb29 79 mNfcLed1(led1Name),mNfcLed2(led2Name),mNfcLed3(led3Name){}
giovannivisentini 29:7a2dfd06cb29 80
giovannivisentini 29:7a2dfd06cb29 81 public:
giovannivisentini 29:7a2dfd06cb29 82 static const PinName DEFAULT_SDA_PIN; //!< Default pin used for the M24SR SDA signal.
giovannivisentini 29:7a2dfd06cb29 83 static const PinName DEFAULT_SDL_PIN; //!< Default pin used for the M24SR SDL signal.
giovannivisentini 29:7a2dfd06cb29 84 static const PinName DEFAULT_GPO_PIN; //!< Default pin used for the M24SR GPO signal.
giovannivisentini 29:7a2dfd06cb29 85 static const PinName DEFAULT_RF_DISABLE_PIN; //!< Default pin used for M24SR RF_DISABLE signal.
giovannivisentini 29:7a2dfd06cb29 86 static const PinName DEFAULT_LED1_PIN; //!< Default pin to control the led 1.
giovannivisentini 29:7a2dfd06cb29 87 static const PinName DEFAULT_LED2_PIN; //!< Default pin to control the led 2.
giovannivisentini 29:7a2dfd06cb29 88 static const PinName DEFAULT_LED3_PIN; //!< Default pin to control the led 3.
giovannivisentini 29:7a2dfd06cb29 89
giovannivisentini 29:7a2dfd06cb29 90 /**
giovannivisentini 29:7a2dfd06cb29 91 * Create or return an instance of XNucleoNFC01A1.
giovannivisentini 29:7a2dfd06cb29 92 * @param devI2C I2C channel used to communicate with the board.
giovannivisentini 29:7a2dfd06cb29 93 * @param eventCallback Function that will be called when the gpo pin status change.
giovannivisentini 29:7a2dfd06cb29 94 * @param gpoName Name of the gpio pin of the M24SR chip.
giovannivisentini 29:7a2dfd06cb29 95 * @param RFDisableName Pin that controls the rf antenna status.
giovannivisentini 29:7a2dfd06cb29 96 * @param led1Name Pin to control the led1 status.
giovannivisentini 29:7a2dfd06cb29 97 * @param led2Name Pin to control the led1 status.
giovannivisentini 29:7a2dfd06cb29 98 * @param led3Name Pin to control the led1 status.
giovannivisentini 29:7a2dfd06cb29 99 */
giovannivisentini 29:7a2dfd06cb29 100 static XNucleoNFC01A1* instance(I2C &devI2C,
giovannivisentini 29:7a2dfd06cb29 101 M24SR::gpoEventCallback eventCallback=NULL,
giovannivisentini 29:7a2dfd06cb29 102 const PinName &gpoName = DEFAULT_GPO_PIN,
giovannivisentini 29:7a2dfd06cb29 103 const PinName &RFDisableName = DEFAULT_RF_DISABLE_PIN,
giovannivisentini 29:7a2dfd06cb29 104 const PinName &led1Name = DEFAULT_LED1_PIN,
giovannivisentini 29:7a2dfd06cb29 105 const PinName &led2Name = DEFAULT_LED2_PIN,
giovannivisentini 29:7a2dfd06cb29 106 const PinName &led3Name = DEFAULT_LED3_PIN);
giovannivisentini 29:7a2dfd06cb29 107
giovannivisentini 29:7a2dfd06cb29 108 /**
giovannivisentini 29:7a2dfd06cb29 109 * @return board led1.
giovannivisentini 29:7a2dfd06cb29 110 */
giovannivisentini 29:7a2dfd06cb29 111 DigitalOut& get_led1() {
giovannivisentini 29:7a2dfd06cb29 112 return mNfcLed1;
giovannivisentini 29:7a2dfd06cb29 113 }
giovannivisentini 29:7a2dfd06cb29 114
giovannivisentini 29:7a2dfd06cb29 115 /**
giovannivisentini 29:7a2dfd06cb29 116 * @return board led2.
giovannivisentini 29:7a2dfd06cb29 117 */
giovannivisentini 29:7a2dfd06cb29 118 DigitalOut& get_led2() {
giovannivisentini 29:7a2dfd06cb29 119 return mNfcLed2;
giovannivisentini 29:7a2dfd06cb29 120 }
giovannivisentini 29:7a2dfd06cb29 121
giovannivisentini 29:7a2dfd06cb29 122 /**
giovannivisentini 29:7a2dfd06cb29 123 * @return board led3.
giovannivisentini 29:7a2dfd06cb29 124 */
giovannivisentini 29:7a2dfd06cb29 125 DigitalOut& get_led3() {
giovannivisentini 29:7a2dfd06cb29 126 return mNfcLed3;
giovannivisentini 29:7a2dfd06cb29 127 }
giovannivisentini 29:7a2dfd06cb29 128
giovannivisentini 29:7a2dfd06cb29 129 /**
giovannivisentini 29:7a2dfd06cb29 130 * @return NFC Chip.
giovannivisentini 29:7a2dfd06cb29 131 */
giovannivisentini 29:7a2dfd06cb29 132 M24SR& get_M24SR() {
giovannivisentini 29:7a2dfd06cb29 133 return mM24SR;
giovannivisentini 29:7a2dfd06cb29 134 }
giovannivisentini 29:7a2dfd06cb29 135
giovannivisentini 29:7a2dfd06cb29 136 virtual ~XNucleoNFC01A1() {
giovannivisentini 29:7a2dfd06cb29 137 }
giovannivisentini 29:7a2dfd06cb29 138
giovannivisentini 29:7a2dfd06cb29 139 private:
giovannivisentini 29:7a2dfd06cb29 140
giovannivisentini 29:7a2dfd06cb29 141 M24SR mM24SR;
giovannivisentini 29:7a2dfd06cb29 142 DigitalOut mNfcLed1;
giovannivisentini 29:7a2dfd06cb29 143 DigitalOut mNfcLed2;
giovannivisentini 29:7a2dfd06cb29 144 DigitalOut mNfcLed3;
giovannivisentini 29:7a2dfd06cb29 145
giovannivisentini 29:7a2dfd06cb29 146 };
giovannivisentini 29:7a2dfd06cb29 147
giovannivisentini 29:7a2dfd06cb29 148 #endif /* XNucleoNFC01A1_H_ */