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 28 14:01:18 2016 +0000
Revision:
19:0b65a5813059
Parent:
9:9f2e2e68d695
Child:
20:aad5727cb8c6
add async api

Who changed what in which revision?

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