mbed OS 5 example application using X-NUCLEO-NFC02A1

Dependencies:   NDefLib X_NUCLEO_NFC02A1

Fork of HelloWorld_NFC02A1 by ST

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****/