Complete mbed library/workspace for HelloWorld_NFC02A1

Dependencies:   NDefLib X_NUCLEO_NFC02A1 mbed

Fork of HelloWorld_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.

Example Application

This is just a simple "hello world" style program for the X-NUCLEO-NFC02A1 Dynamic NFC Tag Expansion Board. The program writes a URI link to the M24LR dynamic tag using the synchronous programming model. It then reads back the URI from the tag to display it on terminal. The URI can also be retrieved from an NFC enabled smartphone/tablet.

Committer:
rosarium
Date:
Tue Aug 30 09:18:50 2016 +0000
Revision:
1:11ae12d41082
Parent:
0:892175366555
NDefLib middle-ware library ported on HelloWorld_NFC02A1. Now NFC02A1 using the same middle-ware library as NFC01A1.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rosarium 0:892175366555 1 /**
rosarium 0:892175366555 2 ******************************************************************************
rosarium 0:892175366555 3 * @file DevI2C.h
rosarium 0:892175366555 4 * @author AST / EST / AMG-CL
rosarium 0:892175366555 5 * @version V0.0.2
rosarium 0:892175366555 6 * @date 25-July-2016
rosarium 0:892175366555 7 * @brief Header file for a special I2C class DevI2C which provides some
rosarium 0:892175366555 8 * helper function for on-board communication
rosarium 0:892175366555 9 ******************************************************************************
rosarium 0:892175366555 10 * @attention
rosarium 0:892175366555 11 *
rosarium 0:892175366555 12 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
rosarium 0:892175366555 13 *
rosarium 0:892175366555 14 * Redistribution and use in source and binary forms, with or without modification,
rosarium 0:892175366555 15 * are permitted provided that the following conditions are met:
rosarium 0:892175366555 16 * 1. Redistributions of source code must retain the above copyright notice,
rosarium 0:892175366555 17 * this list of conditions and the following disclaimer.
rosarium 0:892175366555 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
rosarium 0:892175366555 19 * this list of conditions and the following disclaimer in the documentation
rosarium 0:892175366555 20 * and/or other materials provided with the distribution.
rosarium 0:892175366555 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
rosarium 0:892175366555 22 * may be used to endorse or promote products derived from this software
rosarium 0:892175366555 23 * without specific prior written permission.
rosarium 0:892175366555 24 *
rosarium 0:892175366555 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
rosarium 0:892175366555 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
rosarium 0:892175366555 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
rosarium 0:892175366555 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
rosarium 0:892175366555 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
rosarium 0:892175366555 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
rosarium 0:892175366555 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
rosarium 0:892175366555 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
rosarium 0:892175366555 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
rosarium 0:892175366555 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
rosarium 0:892175366555 35 *
rosarium 0:892175366555 36 ******************************************************************************
rosarium 0:892175366555 37 */
rosarium 0:892175366555 38
rosarium 0:892175366555 39 /* Define to prevent from recursive inclusion --------------------------------*/
rosarium 0:892175366555 40 #ifndef __DEV_I2C_H
rosarium 0:892175366555 41 #define __DEV_I2C_H
rosarium 0:892175366555 42
rosarium 0:892175366555 43 /* Includes ------------------------------------------------------------------*/
rosarium 0:892175366555 44 #include "mbed.h"
rosarium 0:892175366555 45
rosarium 0:892175366555 46 /* Classes -------------------------------------------------------------------*/
rosarium 0:892175366555 47 /** Helper class DevI2C providing functions for multi-register I2C communication
rosarium 0:892175366555 48 * common for a series of I2C devices
rosarium 0:892175366555 49 */
rosarium 0:892175366555 50 class DevI2C : public I2C
rosarium 0:892175366555 51 {
rosarium 0:892175366555 52 public:
rosarium 0:892175366555 53
rosarium 0:892175366555 54 /** Create a DevI2C Master interface, connected to the specified pins
rosarium 0:892175366555 55 *
rosarium 0:892175366555 56 * @param sda I2C data line pin
rosarium 0:892175366555 57 * @param scl I2C clock line pin
rosarium 0:892175366555 58 */
rosarium 0:892175366555 59 DevI2C(PinName sda, PinName scl) : I2C(sda, scl) {}
rosarium 0:892175366555 60
rosarium 0:892175366555 61 /**
rosarium 0:892175366555 62 * @brief Writes a buffer towards the I2C peripheral device.
rosarium 0:892175366555 63 * @param pBuffer pointer to the byte-array data to send
rosarium 0:892175366555 64 * @param DeviceAddr specifies the peripheral device slave address.
rosarium 0:892175366555 65 * @param RegisterAddr specifies the internal address register
rosarium 0:892175366555 66 * where to start writing to (must be correctly masked).
rosarium 0:892175366555 67 * @param NumByteToWrite number of bytes to be written.
rosarium 0:892175366555 68 * @retval 0 if ok,
rosarium 0:892175366555 69 * @retval -1 if an I2C error has occured, or
rosarium 0:892175366555 70 * @retval -2 on temporary buffer overflow (i.e. NumByteToWrite was too high)
rosarium 0:892175366555 71 * @note On some devices if NumByteToWrite is greater
rosarium 0:892175366555 72 * than one, the RegisterAddr must be masked correctly!
rosarium 0:892175366555 73 */
rosarium 0:892175366555 74 int i2c_write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
rosarium 0:892175366555 75 uint16_t NumByteToWrite)
rosarium 0:892175366555 76 {
rosarium 0:892175366555 77 int ret;
rosarium 0:892175366555 78 uint8_t tmp[TEMP_BUF_SIZE];
rosarium 0:892175366555 79
rosarium 0:892175366555 80 if(NumByteToWrite >= TEMP_BUF_SIZE) return -2;
rosarium 0:892175366555 81
rosarium 0:892175366555 82 /* First, send device address. Then, send data and STOP condition */
rosarium 0:892175366555 83 tmp[0] = RegisterAddr;
rosarium 0:892175366555 84 memcpy(tmp+1, pBuffer, NumByteToWrite);
rosarium 0:892175366555 85
rosarium 0:892175366555 86 ret = write(DeviceAddr, (const char*)tmp, NumByteToWrite+1, false);
rosarium 0:892175366555 87
rosarium 0:892175366555 88 if(ret) return -1;
rosarium 0:892175366555 89 return 0;
rosarium 0:892175366555 90 }
rosarium 0:892175366555 91
rosarium 0:892175366555 92 /**
rosarium 0:892175366555 93 * @brief Writes a buffer towards the I2C peripheral device.
rosarium 0:892175366555 94 * @param pBuffer pointer to the byte-array data to send
rosarium 0:892175366555 95 * @param DeviceAddr specifies the peripheral device slave address.
rosarium 0:892175366555 96 * @param RegisterAddr specifies the internal address register
rosarium 0:892175366555 97 * where to start writing to (must be correctly masked).
rosarium 0:892175366555 98 * @param NumByteToWrite number of bytes to be written.
rosarium 0:892175366555 99 * @retval 0 if ok,
rosarium 0:892175366555 100 * @retval -1 if an I2C error has occured, or
rosarium 0:892175366555 101 * @retval -2 on temporary buffer overflow (i.e. NumByteToWrite was too high)
rosarium 0:892175366555 102 * @note On some devices if NumByteToWrite is greater
rosarium 0:892175366555 103 * than one, the RegisterAddr must be masked correctly!
rosarium 0:892175366555 104 */
rosarium 0:892175366555 105 int i2c_write(uint8_t* pBuffer, uint8_t DeviceAddr, uint16_t RegisterAddr,
rosarium 0:892175366555 106 uint16_t NumByteToWrite)
rosarium 0:892175366555 107 {
rosarium 0:892175366555 108 int ret;
rosarium 0:892175366555 109 uint8_t tmp[TEMP_BUF_SIZE];
rosarium 0:892175366555 110
rosarium 0:892175366555 111 if(NumByteToWrite >= TEMP_BUF_SIZE) return -2;
rosarium 0:892175366555 112
rosarium 0:892175366555 113 /* First, send device address. Then, send data and STOP condition */
rosarium 0:892175366555 114 tmp[0] = (RegisterAddr >> 8) & 0xFF;
rosarium 0:892175366555 115 tmp[1] = (RegisterAddr) & 0xFF;
rosarium 0:892175366555 116 memcpy(tmp+2, pBuffer, NumByteToWrite);
rosarium 0:892175366555 117
rosarium 0:892175366555 118 ret = write(DeviceAddr, (const char*)tmp, NumByteToWrite+2, false);
rosarium 0:892175366555 119
rosarium 0:892175366555 120 if(ret) return -1;
rosarium 0:892175366555 121 return 0;
rosarium 0:892175366555 122 }
rosarium 0:892175366555 123 /**
rosarium 0:892175366555 124 * @brief Reads a buffer from the I2C peripheral device.
rosarium 0:892175366555 125 * @param pBuffer pointer to the byte-array to read data in to
rosarium 0:892175366555 126 * @param DaviceAddr specifies the peripheral device slave address.
rosarium 0:892175366555 127 * @param RegisterAddr specifies the internal address register
rosarium 0:892175366555 128 * where to start reading from (must be correctly masked).
rosarium 0:892175366555 129 * @param NumByteToRead number of bytes to be read.
rosarium 0:892175366555 130 * @retval 0 if ok,
rosarium 0:892175366555 131 * @retval -1 if an I2C error has occured
rosarium 0:892175366555 132 * @note On some devices if NumByteToWrite is greater
rosarium 0:892175366555 133 * than one, the RegisterAddr must be masked correctly!
rosarium 0:892175366555 134 */
rosarium 0:892175366555 135 int i2c_read(uint8_t* pBuffer, uint8_t DeviceAddr, uint16_t RegisterAddr,
rosarium 0:892175366555 136 uint16_t NumByteToRead)
rosarium 0:892175366555 137 {
rosarium 0:892175366555 138 int ret;
rosarium 0:892175366555 139 uint8_t reg_addr[2];
rosarium 0:892175366555 140 reg_addr[0] = (RegisterAddr >> 8) & 0xFF;
rosarium 0:892175366555 141 reg_addr[1] = (RegisterAddr) & 0xFF;
rosarium 0:892175366555 142 /* Send device address, with no STOP condition */
rosarium 0:892175366555 143 ret = write(DeviceAddr, (const char*)reg_addr, 2, true);
rosarium 0:892175366555 144 if(!ret) {
rosarium 0:892175366555 145 /* Read data, with STOP condition */
rosarium 0:892175366555 146 ret = read(DeviceAddr, (char*)pBuffer, NumByteToRead, false);
rosarium 0:892175366555 147 }
rosarium 0:892175366555 148
rosarium 0:892175366555 149 if(ret)
rosarium 0:892175366555 150 return -1;
rosarium 0:892175366555 151 else
rosarium 0:892175366555 152 return 0;
rosarium 0:892175366555 153 }
rosarium 0:892175366555 154
rosarium 0:892175366555 155 /**
rosarium 0:892175366555 156 * @brief Reads a buffer from the I2C peripheral device.
rosarium 0:892175366555 157 * @param pBuffer pointer to the byte-array to read data in to
rosarium 0:892175366555 158 * @param DaviceAddr specifies the peripheral device slave address.
rosarium 0:892175366555 159 * @param RegisterAddr specifies the internal address register
rosarium 0:892175366555 160 * where to start reading from (must be correctly masked).
rosarium 0:892175366555 161 * @param NumByteToRead number of bytes to be read.
rosarium 0:892175366555 162 * @retval 0 if ok,
rosarium 0:892175366555 163 * @retval -1 if an I2C error has occured
rosarium 0:892175366555 164 * @note On some devices if NumByteToWrite is greater
rosarium 0:892175366555 165 * than one, the RegisterAddr must be masked correctly!
rosarium 0:892175366555 166 */
rosarium 0:892175366555 167 int i2c_read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
rosarium 0:892175366555 168 uint16_t NumByteToRead)
rosarium 0:892175366555 169 {
rosarium 0:892175366555 170 int ret;
rosarium 0:892175366555 171
rosarium 0:892175366555 172 /* Send device address, with no STOP condition */
rosarium 0:892175366555 173 ret = write(DeviceAddr, (const char*)&RegisterAddr, 1, true);
rosarium 0:892175366555 174 if(!ret) {
rosarium 0:892175366555 175 /* Read data, with STOP condition */
rosarium 0:892175366555 176 ret = read(DeviceAddr, (char*)pBuffer, NumByteToRead, false);
rosarium 0:892175366555 177 }
rosarium 0:892175366555 178
rosarium 0:892175366555 179 if(ret) return -1;
rosarium 0:892175366555 180 return 0;
rosarium 0:892175366555 181 }
rosarium 0:892175366555 182
rosarium 0:892175366555 183 private:
rosarium 0:892175366555 184 static const unsigned int TEMP_BUF_SIZE = 32;
rosarium 0:892175366555 185 };
rosarium 0:892175366555 186
rosarium 0:892175366555 187 #endif /* __DEV_I2C_H */