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:
Wed Jul 27 09:25:33 2016 +0000
Revision:
0:892175366555
first release of the complete mbed library for HelloWorld_NFC02A1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rosarium 0:892175366555 1 /**
rosarium 0:892175366555 2 ******************************************************************************
rosarium 0:892175366555 3 * @file lib_NDEF.h
rosarium 0:892175366555 4 * @author MMY Application Team
rosarium 0:892175366555 5 * @version $Revision: 1329 $
rosarium 0:892175366555 6 * @date $Date: 2015-11-05 10:34:25 +0100 (Thu, 05 Nov 2015) $
rosarium 0:892175366555 7 * @brief This file help to manage NDEF file.
rosarium 0:892175366555 8 ******************************************************************************
rosarium 0:892175366555 9 * @attention
rosarium 0:892175366555 10 *
rosarium 0:892175366555 11 * <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2>
rosarium 0:892175366555 12 *
rosarium 0:892175366555 13 * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License");
rosarium 0:892175366555 14 * You may not use this file except in compliance with the License.
rosarium 0:892175366555 15 * You may obtain a copy of the License at:
rosarium 0:892175366555 16 *
rosarium 0:892175366555 17 * http://www.st.com/myliberty
rosarium 0:892175366555 18 *
rosarium 0:892175366555 19 * Unless required by applicable law or agreed to in writing, software
rosarium 0:892175366555 20 * distributed under the License is distributed on an "AS IS" BASIS,
rosarium 0:892175366555 21 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
rosarium 0:892175366555 22 * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY,
rosarium 0:892175366555 23 * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
rosarium 0:892175366555 24 * See the License for the specific language governing permissions and
rosarium 0:892175366555 25 * limitations under the License.
rosarium 0:892175366555 26 *
rosarium 0:892175366555 27 ******************************************************************************
rosarium 0:892175366555 28 */
rosarium 0:892175366555 29
rosarium 0:892175366555 30 /* Define to prevent recursive inclusion -------------------------------------*/
rosarium 0:892175366555 31 #ifndef __LIB_NDEF_H
rosarium 0:892175366555 32 #define __LIB_NDEF_H
rosarium 0:892175366555 33
rosarium 0:892175366555 34
rosarium 0:892175366555 35 /* Includes ------------------------------------------------------------------*/
rosarium 0:892175366555 36 /* include file which match the HW configuration */
rosarium 0:892175366555 37 //#include "common.h"
rosarium 0:892175366555 38 //#include "lib_wrapper.h"
rosarium 0:892175366555 39 #include <stdint.h>
rosarium 0:892175366555 40 #include "tagtype5_wrapper.h"
rosarium 0:892175366555 41
rosarium 0:892175366555 42 #define NDEF_ACTION_COMPLETED 0x9000
rosarium 0:892175366555 43
rosarium 0:892175366555 44 #ifndef errorchk
rosarium 0:892175366555 45 #define errorchk(fCall) if (status = (fCall), status != NDEF_ACTION_COMPLETED) \
rosarium 0:892175366555 46 {goto Error;} else
rosarium 0:892175366555 47 #endif
rosarium 0:892175366555 48
rosarium 0:892175366555 49 /* Error codes for Higher level */
rosarium 0:892175366555 50
rosarium 0:892175366555 51
rosarium 0:892175366555 52 #define NFCTAG_4M_SIZE 0x200
rosarium 0:892175366555 53 #define NFCTAG_16M_SIZE 0x800
rosarium 0:892175366555 54 #define NFCTAG_64M_SIZE 0x2000
rosarium 0:892175366555 55 #ifndef MIN
rosarium 0:892175366555 56 #define MIN(x, y) (((x) < (y)) ? (x) : (y))
rosarium 0:892175366555 57 #endif
rosarium 0:892175366555 58
rosarium 0:892175366555 59 /* Exported constants --------------------------------------------------------*/
rosarium 0:892175366555 60 #define MAX_NDEF_MEM 0x200
rosarium 0:892175366555 61 #define M24LR_MAX_SIZE NFCTAG_4M_SIZE
rosarium 0:892175366555 62 #define M24LR_NDEF_MAX_SIZE MIN(M24LR_MAX_SIZE,MAX_NDEF_MEM)
rosarium 0:892175366555 63 #define NFC_DEVICE_MAX_NDEFMEMORY M24LR_NDEF_MAX_SIZE
rosarium 0:892175366555 64
rosarium 0:892175366555 65 #define NDEF_OK 0x00
rosarium 0:892175366555 66 #define NDEF_ERROR 1
rosarium 0:892175366555 67 #define NDEF_ERROR_MEMORY_TAG 2
rosarium 0:892175366555 68 #define NDEF_ERROR_MEMORY_INTERNAL 3
rosarium 0:892175366555 69 #define NDEF_ERROR_LOCKED 4
rosarium 0:892175366555 70 #define NDEF_ERROR_NOT_FORMATED 5
rosarium 0:892175366555 71
rosarium 0:892175366555 72 #define NDEF_MAX_SIZE NFC_DEVICE_MAX_NDEFMEMORY
rosarium 0:892175366555 73
rosarium 0:892175366555 74 #define NDEF_SIZE_OFFSET 0
rosarium 0:892175366555 75 #define FIRST_RECORD_OFFSET 2
rosarium 0:892175366555 76
rosarium 0:892175366555 77 #define RECORD_FLAG_FIELD 1
rosarium 0:892175366555 78 #define TYPE_LENGTH_FIELD 1
rosarium 0:892175366555 79 #define ID_LENGTH_FIELD 1
rosarium 0:892175366555 80
rosarium 0:892175366555 81
rosarium 0:892175366555 82 #define MB_Mask ((uint8_t)(0x80))
rosarium 0:892175366555 83 #define ME_Mask ((uint8_t)(0x40))
rosarium 0:892175366555 84 #define CF_Mask ((uint8_t)(0x20))
rosarium 0:892175366555 85 #define SR_Mask ((uint8_t)(0x10))
rosarium 0:892175366555 86 #define IL_Mask ((uint8_t)(0x08))
rosarium 0:892175366555 87 #define TNF_Mask ((uint8_t)(0x07))
rosarium 0:892175366555 88
rosarium 0:892175366555 89 #define TNF_Empty 0x00
rosarium 0:892175366555 90 #define TNF_WellKnown 0x01
rosarium 0:892175366555 91 #define TNF_MediaType 0x02
rosarium 0:892175366555 92 #define TNF_AbsoluteURI 0x03
rosarium 0:892175366555 93 #define TNF_NFCForumExternal 0x04
rosarium 0:892175366555 94 #define TNF_Unknown 0x05
rosarium 0:892175366555 95 #define TNF_Unchanged 0x06
rosarium 0:892175366555 96 #define TNF_Reserved 0x07
rosarium 0:892175366555 97
rosarium 0:892175366555 98 #define SP_MAX_RECORD 4
rosarium 0:892175366555 99
rosarium 0:892175366555 100 #define AAR_TYPE_STRING "android.com:pkg"
rosarium 0:892175366555 101 #define AAR_TYPE_STRING_LENGTH 15
rosarium 0:892175366555 102
rosarium 0:892175366555 103 #define M24SR_DISCOVERY_APP_STRING "st.com:m24sr_discovery_democtrl"
rosarium 0:892175366555 104 #define M24SR_DISCOVERY_APP_STRING_LENGTH 31
rosarium 0:892175366555 105
rosarium 0:892175366555 106 #define VCARD_TYPE_STRING "text/vcard"
rosarium 0:892175366555 107 #define VCARD_TYPE_STRING_LENGTH 10
rosarium 0:892175366555 108
rosarium 0:892175366555 109 #define XVCARD_TYPE_STRING "text/x-vCard"
rosarium 0:892175366555 110 #define XVCARD_TYPE_STRING_LENGTH 12
rosarium 0:892175366555 111
rosarium 0:892175366555 112 #define XVCARD2_TYPE_STRING "text/x-vcard"
rosarium 0:892175366555 113 #define XVCARD2_TYPE_STRING_LENGTH 12
rosarium 0:892175366555 114
rosarium 0:892175366555 115 #define SMART_POSTER_TYPE_STRING "Sp"
rosarium 0:892175366555 116 #define SMART_POSTER_TYPE_STRING_LENGTH 2
rosarium 0:892175366555 117
rosarium 0:892175366555 118 #define URI_TYPE_STRING "U"
rosarium 0:892175366555 119 #define URI_TYPE_STRING_LENGTH 1
rosarium 0:892175366555 120
rosarium 0:892175366555 121 #define SMS_TYPE_STRING "sms:"
rosarium 0:892175366555 122 #define SMS_TYPE_STRING_LENGTH 4
rosarium 0:892175366555 123
rosarium 0:892175366555 124 #define GEO_TYPE_STRING "geo:"
rosarium 0:892175366555 125 #define GEO_TYPE_STRING_LENGTH 4
rosarium 0:892175366555 126
rosarium 0:892175366555 127 #define URI_LATITUDE_END ","
rosarium 0:892175366555 128 #define URI_LATITUDE_END_LENGTH 1
rosarium 0:892175366555 129
rosarium 0:892175366555 130 #define EMAIL_TYPE_STRING "mailto:"
rosarium 0:892175366555 131 #define EMAIL_TYPE_STRING_LENGTH 7
rosarium 0:892175366555 132
rosarium 0:892175366555 133 #define URI_FIRST_DATA_END "?"
rosarium 0:892175366555 134 #define URI_FIRST_DATA_END_LENGTH 1
rosarium 0:892175366555 135
rosarium 0:892175366555 136 #define SUBJECT_BEGIN_STRING "subject="
rosarium 0:892175366555 137 #define SUBJECT_BEGIN_STRING_LENGTH 8
rosarium 0:892175366555 138
rosarium 0:892175366555 139 #define MESSAGE_BEGIN_STRING "body="
rosarium 0:892175366555 140 #define MESSAGE_BEGIN_STRING_LENGTH 5
rosarium 0:892175366555 141
rosarium 0:892175366555 142 #define URI_SECOND_DATA_END "&"
rosarium 0:892175366555 143 #define URI_SECOND_DATA_END_LENGTH 1
rosarium 0:892175366555 144
rosarium 0:892175366555 145 #define TEXT_TYPE_STRING "T"
rosarium 0:892175366555 146 #define TEXT_TYPE_STRING_LENGTH 1
rosarium 0:892175366555 147
rosarium 0:892175366555 148 #define ISO_ENGLISH_CODE_STRING "en"
rosarium 0:892175366555 149 #define ISO_ENGLISH_CODE_STRING_LENGTH 2
rosarium 0:892175366555 150
rosarium 0:892175366555 151
rosarium 0:892175366555 152 #define URI_ID_0x00 0x00
rosarium 0:892175366555 153 #define URI_ID_0x01 0x01
rosarium 0:892175366555 154 #define URI_ID_0x02 0x02
rosarium 0:892175366555 155 #define URI_ID_0x03 0x03
rosarium 0:892175366555 156 #define URI_ID_0x04 0x04
rosarium 0:892175366555 157 #define URI_ID_0x05 0x05
rosarium 0:892175366555 158 #define URI_ID_0x06 0x06
rosarium 0:892175366555 159 #define URI_ID_0x07 0x07
rosarium 0:892175366555 160 #define URI_ID_0x08 0x08
rosarium 0:892175366555 161 #define URI_ID_0x09 0x09
rosarium 0:892175366555 162 #define URI_ID_0x0A 0x0A
rosarium 0:892175366555 163 #define URI_ID_0x0B 0x0B
rosarium 0:892175366555 164 #define URI_ID_0x0C 0x0C
rosarium 0:892175366555 165 #define URI_ID_0x0D 0x0D
rosarium 0:892175366555 166 #define URI_ID_0x0E 0x0E
rosarium 0:892175366555 167 #define URI_ID_0x0F 0x0F
rosarium 0:892175366555 168 #define URI_ID_0x10 0x10
rosarium 0:892175366555 169 #define URI_ID_0x11 0x11
rosarium 0:892175366555 170 #define URI_ID_0x12 0x12
rosarium 0:892175366555 171 #define URI_ID_0x13 0x13
rosarium 0:892175366555 172 #define URI_ID_0x14 0x14
rosarium 0:892175366555 173 #define URI_ID_0x15 0x15
rosarium 0:892175366555 174 #define URI_ID_0x16 0x16
rosarium 0:892175366555 175 #define URI_ID_0x17 0x17
rosarium 0:892175366555 176 #define URI_ID_0x18 0x18
rosarium 0:892175366555 177 #define URI_ID_0x19 0x19
rosarium 0:892175366555 178 #define URI_ID_0x1A 0x1A
rosarium 0:892175366555 179 #define URI_ID_0x1B 0x1B
rosarium 0:892175366555 180 #define URI_ID_0x1C 0x1C
rosarium 0:892175366555 181 #define URI_ID_0x1D 0x1D
rosarium 0:892175366555 182 #define URI_ID_0x1E 0x1E
rosarium 0:892175366555 183 #define URI_ID_0x1F 0x1F
rosarium 0:892175366555 184 #define URI_ID_0x20 0x20
rosarium 0:892175366555 185 #define URI_ID_0x21 0x21
rosarium 0:892175366555 186 #define URI_ID_0x22 0x22
rosarium 0:892175366555 187 #define URI_ID_0x23 0x23
rosarium 0:892175366555 188 #define URI_RFU 0x24
rosarium 0:892175366555 189
rosarium 0:892175366555 190 #define URI_ID_0x01_STRING "http://www.\0"
rosarium 0:892175366555 191 #define URI_ID_0x02_STRING "https://www.\0"
rosarium 0:892175366555 192 #define URI_ID_0x03_STRING "http://\0"
rosarium 0:892175366555 193 #define URI_ID_0x04_STRING "https://\0"
rosarium 0:892175366555 194 #define URI_ID_0x05_STRING "tel:\0"
rosarium 0:892175366555 195 #define URI_ID_0x06_STRING "mailto:\0"
rosarium 0:892175366555 196 #define URI_ID_0x07_STRING "ftp://anonymous:anonymous@\0"
rosarium 0:892175366555 197 #define URI_ID_0x08_STRING "ftp://ftp.\0"
rosarium 0:892175366555 198 #define URI_ID_0x09_STRING "ftps://\0"
rosarium 0:892175366555 199 #define URI_ID_0x0A_STRING "sftp://\0"
rosarium 0:892175366555 200 #define URI_ID_0x0B_STRING "smb://\0"
rosarium 0:892175366555 201 #define URI_ID_0x0C_STRING "nfs://\0"
rosarium 0:892175366555 202 #define URI_ID_0x0D_STRING "ftp://\0"
rosarium 0:892175366555 203 #define URI_ID_0x0E_STRING "dav://\0"
rosarium 0:892175366555 204 #define URI_ID_0x0F_STRING "news:\0"
rosarium 0:892175366555 205 #define URI_ID_0x10_STRING "telnet://\0"
rosarium 0:892175366555 206 #define URI_ID_0x11_STRING "imap:\0"
rosarium 0:892175366555 207 #define URI_ID_0x12_STRING "rtsp://\0"
rosarium 0:892175366555 208 #define URI_ID_0x13_STRING "urn:\0"
rosarium 0:892175366555 209 #define URI_ID_0x14_STRING "pop:\0"
rosarium 0:892175366555 210 #define URI_ID_0x15_STRING "sip:\0"
rosarium 0:892175366555 211 #define URI_ID_0x16_STRING "sips:\0"
rosarium 0:892175366555 212 #define URI_ID_0x17_STRING "tftp:\0"
rosarium 0:892175366555 213 #define URI_ID_0x18_STRING "btspp://\0"
rosarium 0:892175366555 214 #define URI_ID_0x19_STRING "btl2cap://\0"
rosarium 0:892175366555 215 #define URI_ID_0x1A_STRING "btgoep://\0"
rosarium 0:892175366555 216 #define URI_ID_0x1B_STRING "tcpobex://\0"
rosarium 0:892175366555 217 #define URI_ID_0x1C_STRING "irdaobex://\0"
rosarium 0:892175366555 218 #define URI_ID_0x1D_STRING "file://\0"
rosarium 0:892175366555 219 #define URI_ID_0x1E_STRING "urn:epc:id:\0"
rosarium 0:892175366555 220 #define URI_ID_0x1F_STRING "urn:epc:tag\0"
rosarium 0:892175366555 221 #define URI_ID_0x20_STRING "urn:epc:pat:\0"
rosarium 0:892175366555 222 #define URI_ID_0x21_STRING "urn:epc:raw:\0"
rosarium 0:892175366555 223 #define URI_ID_0x22_STRING "urn:epc:\0"
rosarium 0:892175366555 224 #define URI_ID_0x23_STRING "urn:nfc:\0"
rosarium 0:892175366555 225
rosarium 0:892175366555 226 typedef enum
rosarium 0:892175366555 227 {
rosarium 0:892175366555 228 UNKNOWN_TYPE = 0,
rosarium 0:892175366555 229 VCARD_TYPE,
rosarium 0:892175366555 230 WELL_KNOWN_ABRIDGED_URI_TYPE,
rosarium 0:892175366555 231 URI_SMS_TYPE,
rosarium 0:892175366555 232 URI_GEO_TYPE,
rosarium 0:892175366555 233 URI_EMAIL_TYPE,
rosarium 0:892175366555 234 SMARTPOSTER_TYPE,
rosarium 0:892175366555 235 URL_TYPE,
rosarium 0:892175366555 236 TEXT_TYPE,
rosarium 0:892175366555 237 BT_TYPE,
rosarium 0:892175366555 238 /* list of "external type" known by this demo, other external type will be addressed as UNKNWON_TYPE */
rosarium 0:892175366555 239 M24SR_DISCOVERY_APP_TYPE
rosarium 0:892175366555 240 } NDEF_TypeDef;
rosarium 0:892175366555 241
rosarium 0:892175366555 242 //typedef struct sRecordInfo sRecordInfo;
rosarium 0:892175366555 243 typedef struct sRecordInfo
rosarium 0:892175366555 244 {
rosarium 0:892175366555 245 uint8_t RecordFlags;
rosarium 0:892175366555 246 uint8_t TypeLength;
rosarium 0:892175366555 247 uint8_t PayloadLength3;
rosarium 0:892175366555 248 uint8_t PayloadLength2;
rosarium 0:892175366555 249 uint8_t PayloadLength1;
rosarium 0:892175366555 250 uint8_t PayloadLength0;
rosarium 0:892175366555 251 uint8_t IDLength;
rosarium 0:892175366555 252 uint8_t Type[0xFF];
rosarium 0:892175366555 253 uint8_t ID[0xFF];
rosarium 0:892175366555 254 uint16_t PayloadOffset;
rosarium 0:892175366555 255 uint32_t PayloadBufferAdd; /* add where payload content has been stored */
rosarium 0:892175366555 256 NDEF_TypeDef NDEF_Type; /* to store identification ID for application */
rosarium 0:892175366555 257 sRecordInfo *SPRecordStructAdd[SP_MAX_RECORD]; /*in case of smart poster array to store add of other sRecordInfo struct */
rosarium 0:892175366555 258 uint8_t NbOfRecordInSPPayload;
rosarium 0:892175366555 259 }sRecordInfo;
rosarium 0:892175366555 260
rosarium 0:892175366555 261 class NDEF : public NFCType5 {
rosarium 0:892175366555 262 public:
rosarium 0:892175366555 263
rosarium 0:892175366555 264 uint16_t NDEF_IsNDEFPresent( void );
rosarium 0:892175366555 265 uint16_t NDEF_ParseRecordHeader( sRecordInfo *pRecordStruct );
rosarium 0:892175366555 266 void NDEF_ParseWellKnownType( sRecordInfo *pRecordStruct );
rosarium 0:892175366555 267 void NDEF_ParseMediaType( sRecordInfo *pRecordStruct );
rosarium 0:892175366555 268 void NDEF_ParseForumExternalType( sRecordInfo *pRecordStruct );
rosarium 0:892175366555 269 void NDEF_ParseURI( sRecordInfo *pRecordStruct );
rosarium 0:892175366555 270 void NDEF_ParseSP( sRecordInfo *pRecordStruct );
rosarium 0:892175366555 271 uint16_t NDEF_IdentifySPRecord( sRecordInfo *pRecordStruct, uint8_t* pPayload );
rosarium 0:892175366555 272 uint16_t NDEF_IdentifyNDEF( sRecordInfo *pRecordStruct, uint8_t* pNDEF );
rosarium 0:892175366555 273 uint16_t NDEF_ReadNDEF( uint8_t* pNDEF );
rosarium 0:892175366555 274 uint16_t NDEF_WriteNDEF( uint8_t *pNDEF );
rosarium 0:892175366555 275 uint16_t NDEF_IdentifyBuffer( sRecordInfo *pRecordStruct, uint8_t* pNDEF );
rosarium 0:892175366555 276
rosarium 0:892175366555 277 void NDEF_initialize(void);
rosarium 0:892175366555 278 uint8_t NDEF_Buffer [NDEF_MAX_SIZE];
rosarium 0:892175366555 279
rosarium 0:892175366555 280 NDEF()
rosarium 0:892175366555 281 {
rosarium 0:892175366555 282 SPRecordStructAdd[0] = &SPRecordStruct1;
rosarium 0:892175366555 283 SPRecordStructAdd[1] = &SPRecordStruct2;
rosarium 0:892175366555 284 SPRecordStructAdd[2] = &SPRecordStruct3;
rosarium 0:892175366555 285 SPRecordStructAdd[3] = &SPRecordStruct4;
rosarium 0:892175366555 286
rosarium 0:892175366555 287 }
rosarium 0:892175366555 288
rosarium 0:892175366555 289 /* In case of smart Poster composed with different record, 3 records supported so far */
rosarium 0:892175366555 290 sRecordInfo SPRecordStruct1, SPRecordStruct2, SPRecordStruct3, SPRecordStruct4;
rosarium 0:892175366555 291 sRecordInfo *SPRecordStructAdd[SP_MAX_RECORD];
rosarium 0:892175366555 292 };
rosarium 0:892175366555 293
rosarium 0:892175366555 294 #endif /* __LIB_NDEF_H */
rosarium 0:892175366555 295
rosarium 0:892175366555 296
rosarium 0:892175366555 297 /******************* (C) COPYRIGHT 2016 STMicroelectronics *****END OF FILE****/