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:
Mon Dec 21 13:00:48 2015 +0000
Revision:
3:fa914de381ae
Parent:
1:15d4a123ef6b
Child:
6:96389fb79676
add default pin to the nucleo_nfc01a1 class

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