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:
15:67e136b6921d
add async api

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giovannivisentini 0:969a2be49f41 1 /**
giovannivisentini 0:969a2be49f41 2 ******************************************************************************
giovannivisentini 0:969a2be49f41 3 * @file nfc.h
giovannivisentini 0:969a2be49f41 4 * @author ST Central Labs
giovannivisentini 0:969a2be49f41 5 * @version V1.0.0
giovannivisentini 0:969a2be49f41 6 * @date 14-October-2015
giovannivisentini 0:969a2be49f41 7 * @brief This header file contains the functions prototypes for the
giovannivisentini 0:969a2be49f41 8 * NFC device driver.
giovannivisentini 0:969a2be49f41 9 ******************************************************************************
giovannivisentini 0:969a2be49f41 10 * @attention
giovannivisentini 0:969a2be49f41 11 *
giovannivisentini 0:969a2be49f41 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
giovannivisentini 0:969a2be49f41 13 *
giovannivisentini 0:969a2be49f41 14 * Redistribution and use in source and binary forms, with or without modification,
giovannivisentini 0:969a2be49f41 15 * are permitted provided that the following conditions are met:
giovannivisentini 0:969a2be49f41 16 * 1. Redistributions of source code must retain the above copyright notice,
giovannivisentini 0:969a2be49f41 17 * this list of conditions and the following disclaimer.
giovannivisentini 0:969a2be49f41 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
giovannivisentini 0:969a2be49f41 19 * this list of conditions and the following disclaimer in the documentation
giovannivisentini 0:969a2be49f41 20 * and/or other materials provided with the distribution.
giovannivisentini 0:969a2be49f41 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
giovannivisentini 0:969a2be49f41 22 * may be used to endorse or promote products derived from this software
giovannivisentini 0:969a2be49f41 23 * without specific prior written permission.
giovannivisentini 0:969a2be49f41 24 *
giovannivisentini 0:969a2be49f41 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
giovannivisentini 0:969a2be49f41 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
giovannivisentini 0:969a2be49f41 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
giovannivisentini 0:969a2be49f41 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
giovannivisentini 0:969a2be49f41 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
giovannivisentini 0:969a2be49f41 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
giovannivisentini 0:969a2be49f41 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
giovannivisentini 0:969a2be49f41 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
giovannivisentini 0:969a2be49f41 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
giovannivisentini 0:969a2be49f41 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
giovannivisentini 0:969a2be49f41 35 *
giovannivisentini 0:969a2be49f41 36 ******************************************************************************
giovannivisentini 0:969a2be49f41 37 */
giovannivisentini 0:969a2be49f41 38 #ifndef __NFC_H_
giovannivisentini 0:969a2be49f41 39 #define __NFC_H_
giovannivisentini 0:969a2be49f41 40
giovannivisentini 0:969a2be49f41 41 #ifdef __cplusplus
giovannivisentini 0:969a2be49f41 42 extern "C" {
giovannivisentini 0:969a2be49f41 43 #endif
giovannivisentini 0:969a2be49f41 44
giovannivisentini 0:969a2be49f41 45 /* Includes ------------------------------------------------------------------*/
giovannivisentini 0:969a2be49f41 46 #include <stdint.h>
giovannivisentini 0:969a2be49f41 47 #include "component.h"
giovannivisentini 0:969a2be49f41 48 /** @addtogroup BSP
giovannivisentini 0:969a2be49f41 49 * @{
giovannivisentini 0:969a2be49f41 50 */
giovannivisentini 0:969a2be49f41 51
giovannivisentini 0:969a2be49f41 52 /** @addtogroup Components
giovannivisentini 0:969a2be49f41 53 * @{
giovannivisentini 0:969a2be49f41 54 */
giovannivisentini 0:969a2be49f41 55
giovannivisentini 0:969a2be49f41 56 /** @addtogroup NFC
giovannivisentini 0:969a2be49f41 57 * @{
giovannivisentini 0:969a2be49f41 58 */
giovannivisentini 0:969a2be49f41 59
giovannivisentini 0:969a2be49f41 60 /** @defgroup NFC_Exported_Types
giovannivisentini 0:969a2be49f41 61 * @{
giovannivisentini 0:969a2be49f41 62 */
giovannivisentini 0:969a2be49f41 63
giovannivisentini 0:969a2be49f41 64 /**
giovannivisentini 0:969a2be49f41 65 * @brief NFC status enumerator definition
giovannivisentini 0:969a2be49f41 66 */
giovannivisentini 0:969a2be49f41 67 typedef enum {
giovannivisentini 19:0b65a5813059 68 NFC_SUCCESS=0x9000,
giovannivisentini 0:969a2be49f41 69 NFC_ERROR=0x6F00,
giovannivisentini 0:969a2be49f41 70 NFC_FILE_OVERFLOW_LE = 0x6280,
giovannivisentini 0:969a2be49f41 71 NFC_EOF = 0x6282,
giovannivisentini 0:969a2be49f41 72 NFC_PASSWORD_REQUIRED = 0x6300,
giovannivisentini 0:969a2be49f41 73 NFC_PASSWORD_INCORRECT = 0x63C0,
giovannivisentini 0:969a2be49f41 74 NFC_PASSWORD_INCORRECT1RETRY = 0x63C1,
giovannivisentini 0:969a2be49f41 75 NFC_PASSWORD_INCORRECT2RETRY = 0x63C2,
giovannivisentini 0:969a2be49f41 76 NFC_WRONG_LENGHT = 0x6700,
giovannivisentini 0:969a2be49f41 77 NFC_UNSUCESSFUL_UPDATING = 0x6581,
giovannivisentini 0:969a2be49f41 78 NFC_INCOPATIBLE_COMMAND= 0x6981,
giovannivisentini 0:969a2be49f41 79 NFC_SECURITY_UNSATISFIED = 0x6982,
giovannivisentini 0:969a2be49f41 80 NFC_REFERENCE_DATA_NOT_USABLE = 0x6984,
giovannivisentini 0:969a2be49f41 81
giovannivisentini 0:969a2be49f41 82 NFC_INCORRECT_PARAMETER = 0x6a80,
giovannivisentini 0:969a2be49f41 83 NFC_FILE_NOT_FOUND=0x6a82,
giovannivisentini 0:969a2be49f41 84 NFC_FILE_OVERFLOW_LC = 0x6A84, //TODO difference with Le??
giovannivisentini 0:969a2be49f41 85
giovannivisentini 0:969a2be49f41 86 NFC_INCORRECT_P1_OR_P2 = 0x6A86, //TODO better name?
giovannivisentini 0:969a2be49f41 87 NFC_RF_SESSION_KILLED=0x6500,
giovannivisentini 0:969a2be49f41 88 NFC_INS_NOT_SUPPORTED=0x6D00,
giovannivisentini 0:969a2be49f41 89 NFC_CLASS_NOT_SUPPORTED=0x6E00,
giovannivisentini 0:969a2be49f41 90
giovannivisentini 0:969a2be49f41 91 //IOError
giovannivisentini 0:969a2be49f41 92 NFC_IO_ERROR_I2CTIMEOUT=0x0011,
giovannivisentini 0:969a2be49f41 93 NFC_IO_ERROR_CRC=0x0012,
giovannivisentini 0:969a2be49f41 94 NFC_IO_ERROR_NACK=0x0013,
giovannivisentini 0:969a2be49f41 95 NFC_IO_ERROR_PARAMETER=0x0014,
giovannivisentini 0:969a2be49f41 96 NFC_IO_ERROR_NBATEMPT=0x0015,
giovannivisentini 0:969a2be49f41 97 NFC_IO_NOACKNOWLEDGE=0x0016
giovannivisentini 0:969a2be49f41 98 } NFC_StatusTypeDef;
giovannivisentini 0:969a2be49f41 99
giovannivisentini 0:969a2be49f41 100 /**
giovannivisentini 0:969a2be49f41 101 * @brief NFC component identifier enumerator definition.
giovannivisentini 0:969a2be49f41 102 */
giovannivisentini 0:969a2be49f41 103 typedef enum
giovannivisentini 0:969a2be49f41 104 {
giovannivisentini 0:969a2be49f41 105 NFC_NONE_COMPONENT = 0,
giovannivisentini 0:969a2be49f41 106 NFC_M24SR_COMPONENT = 1
giovannivisentini 0:969a2be49f41 107 } NFC_ComponentTypeDef;
giovannivisentini 0:969a2be49f41 108
giovannivisentini 19:0b65a5813059 109 /**
giovannivisentini 19:0b65a5813059 110 * @brief GPO state structure
giovannivisentini 19:0b65a5813059 111 */
giovannivisentini 19:0b65a5813059 112 typedef enum {
giovannivisentini 19:0b65a5813059 113 HIGH_IMPEDANCE = 0,
giovannivisentini 19:0b65a5813059 114 SESSION_OPENED =1,
giovannivisentini 19:0b65a5813059 115 WIP=2,
giovannivisentini 19:0b65a5813059 116 I2C_ANSWER_READY=3,
giovannivisentini 19:0b65a5813059 117 INTERRUPT=4,
giovannivisentini 19:0b65a5813059 118 STATE_CONTROL=5
giovannivisentini 19:0b65a5813059 119 } NFC_GPO_MGMT;
giovannivisentini 19:0b65a5813059 120
giovannivisentini 0:969a2be49f41 121
giovannivisentini 0:969a2be49f41 122 /**
giovannivisentini 0:969a2be49f41 123 * @brief NFC driver structure definition
giovannivisentini 0:969a2be49f41 124 */
giovannivisentini 0:969a2be49f41 125 typedef struct {
giovannivisentini 0:969a2be49f41 126 /* Generic */
giovannivisentini 15:67e136b6921d 127 NFC_StatusTypeDef (*Init) (void *handle, void *init);
giovannivisentini 0:969a2be49f41 128 NFC_StatusTypeDef (*ReadID) (void *handle, uint8_t *id);
giovannivisentini 0:969a2be49f41 129
giovannivisentini 0:969a2be49f41 130 /* Interrupts */
giovannivisentini 0:969a2be49f41 131 NFC_StatusTypeDef (*SendInterrupt)(void *handle);
giovannivisentini 0:969a2be49f41 132
giovannivisentini 0:969a2be49f41 133 /* Specific */
giovannivisentini 0:969a2be49f41 134 //I2C session Commands:
giovannivisentini 0:969a2be49f41 135 NFC_StatusTypeDef (*GetSession)(void *handle);
giovannivisentini 0:969a2be49f41 136 NFC_StatusTypeDef (*KillSession)(void *handle);
giovannivisentini 0:969a2be49f41 137 NFC_StatusTypeDef (*Deselect)(void *handle);
giovannivisentini 0:969a2be49f41 138
giovannivisentini 0:969a2be49f41 139 //NFC forum type 4 commands:
giovannivisentini 0:969a2be49f41 140 NFC_StatusTypeDef (*SelectApplication)(void *handle);
giovannivisentini 0:969a2be49f41 141 NFC_StatusTypeDef (*SelectCCfile)(void *handle);
giovannivisentini 0:969a2be49f41 142 NFC_StatusTypeDef (*SelectNDEFfile)(void *handle, uint16_t NDEFfileId);
giovannivisentini 0:969a2be49f41 143 NFC_StatusTypeDef (*SelectSystemfile)(void *handle);
giovannivisentini 0:969a2be49f41 144 NFC_StatusTypeDef (*ReadBinary)(void *handle, uint16_t Offset, uint8_t NbByteToRead, uint8_t *pBufferRead);
giovannivisentini 0:969a2be49f41 145 NFC_StatusTypeDef (*UpdateBinary)(void *handle, uint16_t Offset, uint8_t NbByteToWrite, uint8_t *pDataToWrite);
giovannivisentini 0:969a2be49f41 146
giovannivisentini 0:969a2be49f41 147 //ISO/IEC 7816-4 commands:
giovannivisentini 0:969a2be49f41 148 NFC_StatusTypeDef (*Verify)(void *handle, uint16_t uPwdId, uint8_t NbPwdByte, uint8_t *pPwd);
giovannivisentini 0:969a2be49f41 149 NFC_StatusTypeDef (*ChangeReferenceData)(void *handle, uint16_t uPwdId, uint8_t *pPwd);
giovannivisentini 0:969a2be49f41 150 NFC_StatusTypeDef (*EnableVerificationRequirement)(void *handle, uint16_t uReadOrWrite);
giovannivisentini 0:969a2be49f41 151 NFC_StatusTypeDef (*DisableVerificationRequirement)(void *handle, uint16_t uReadOrWrite);
giovannivisentini 0:969a2be49f41 152
giovannivisentini 0:969a2be49f41 153 //ST Specific
giovannivisentini 0:969a2be49f41 154 NFC_StatusTypeDef (*STReadBinary)(void *handle, uint16_t Offset, uint8_t NbByteToRead, uint8_t *pBufferRead);
giovannivisentini 0:969a2be49f41 155 NFC_StatusTypeDef (*EnablePermanentState)(void *handle, uint16_t uReadOrWrite);
giovannivisentini 0:969a2be49f41 156 NFC_StatusTypeDef (*DisablePermanentState)(void *handle, uint16_t uReadOrWrite);
giovannivisentini 0:969a2be49f41 157
giovannivisentini 0:969a2be49f41 158 //??
giovannivisentini 0:969a2be49f41 159
giovannivisentini 0:969a2be49f41 160 NFC_StatusTypeDef (*StateControl)(void *handle, uint8_t uSetOrReset);
giovannivisentini 0:969a2be49f41 161 NFC_StatusTypeDef (*ManageI2CGPO)(void *handle, uint8_t GPO_I2Cconfig);
giovannivisentini 0:969a2be49f41 162 NFC_StatusTypeDef (*ManageRFGPO)(void *handle, uint8_t GPO_RFconfig);
giovannivisentini 0:969a2be49f41 163 NFC_StatusTypeDef (*RFConfig)(void *handle, uint8_t OnOffChoice);
giovannivisentini 0:969a2be49f41 164
giovannivisentini 0:969a2be49f41 165 } NFC_DrvVTableTypeDef;
giovannivisentini 0:969a2be49f41 166
giovannivisentini 0:969a2be49f41 167 /**
giovannivisentini 0:969a2be49f41 168 * @}
giovannivisentini 0:969a2be49f41 169 */
giovannivisentini 0:969a2be49f41 170
giovannivisentini 0:969a2be49f41 171 /**
giovannivisentini 0:969a2be49f41 172 * @}
giovannivisentini 0:969a2be49f41 173 */
giovannivisentini 0:969a2be49f41 174
giovannivisentini 0:969a2be49f41 175 /**
giovannivisentini 0:969a2be49f41 176 * @}
giovannivisentini 0:969a2be49f41 177 */
giovannivisentini 0:969a2be49f41 178
giovannivisentini 0:969a2be49f41 179 /**
giovannivisentini 0:969a2be49f41 180 * @}
giovannivisentini 0:969a2be49f41 181 */
giovannivisentini 0:969a2be49f41 182
giovannivisentini 0:969a2be49f41 183 #ifdef __cplusplus
giovannivisentini 0:969a2be49f41 184 }
giovannivisentini 0:969a2be49f41 185 #endif
giovannivisentini 0:969a2be49f41 186
giovannivisentini 0:969a2be49f41 187 #endif /* __NFC_H_ */
giovannivisentini 0:969a2be49f41 188
giovannivisentini 0:969a2be49f41 189 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/