X_NUCLEO_NFC02A1 library for M24LR

Dependencies:   ST_INTERFACES

Dependents:   HelloWorld_NFC02A1_mbedOS HelloWorld_NFC02A1laatste HelloWorld_NFC02A1

Fork of X_NUCLEO_NFC02A1 by ST Expansion SW Team

X-NUCLEO-NFC02A1 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-NFC02A1 Dynamic NFC Tag Expansion Board based on M24LR.

Firmware Library

Class X_NUCLEO_NFC02A1 is intended to represent the Dynamic NFC Tag Expansion Board with the same name.
It provides an API to access to the M24LR component and to the three onboard LEDs.
It is intentionally implemented as a singleton because only one X_NUCLEO_NFC02A1 at a time might be deployed in a HW component stack.
The library also provides an implementation of the NDEF library API for M24LR, providing an simple way to read/write NDEF formatted messages from/to the M24LR dynamic NFC tag.

Example application

Hello World is a simple application to program and read an URI from the NFC tag.

Committer:
Davidroid
Date:
Tue Jul 11 15:23:56 2017 +0000
Revision:
7:b876cdcf095a
Parent:
6:8c1eca41b3a9
Child:
8:7c4cf671960b
Updating with the new mbed library.

Who changed what in which revision?

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