NFC NDEF library

Dependents:   Nucleo_NFC_Example I2C_NFC_Master Print_Entire_Nucleo_NFC01A1_Memory

Fork of lib_NDEF by Enrico Gregoratto

Committer:
EnricoG
Date:
Mon Dec 15 19:41:36 2014 +0000
Revision:
0:3b093bd0819e
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EnricoG 0:3b093bd0819e 1 /**
EnricoG 0:3b093bd0819e 2 ******************************************************************************
EnricoG 0:3b093bd0819e 3 * @file lib_NDEF.h
EnricoG 0:3b093bd0819e 4 * @author MMY Application Team
EnricoG 0:3b093bd0819e 5 * @version V1.0.0
EnricoG 0:3b093bd0819e 6 * @date 20-November-2013
EnricoG 0:3b093bd0819e 7 * @brief This file help to manage NDEF file.
EnricoG 0:3b093bd0819e 8 ******************************************************************************
EnricoG 0:3b093bd0819e 9 * @attention
EnricoG 0:3b093bd0819e 10 *
EnricoG 0:3b093bd0819e 11 * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
EnricoG 0:3b093bd0819e 12 *
EnricoG 0:3b093bd0819e 13 * Licensed under MMY-ST Liberty SW License Agreement V2, (the "License");
EnricoG 0:3b093bd0819e 14 * You may not use this file except in compliance with the License.
EnricoG 0:3b093bd0819e 15 * You may obtain a copy of the License at:
EnricoG 0:3b093bd0819e 16 *
EnricoG 0:3b093bd0819e 17 * http://www.st.com/software_license_agreement_liberty_v2
EnricoG 0:3b093bd0819e 18 *
EnricoG 0:3b093bd0819e 19 * Unless required by applicable law or agreed to in writing, software
EnricoG 0:3b093bd0819e 20 * distributed under the License is distributed on an "AS IS" BASIS,
EnricoG 0:3b093bd0819e 21 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
EnricoG 0:3b093bd0819e 22 * See the License for the specific language governing permissions and
EnricoG 0:3b093bd0819e 23 * limitations under the License.
EnricoG 0:3b093bd0819e 24 *
EnricoG 0:3b093bd0819e 25 ******************************************************************************
EnricoG 0:3b093bd0819e 26 */
EnricoG 0:3b093bd0819e 27
EnricoG 0:3b093bd0819e 28 /* Define to prevent recursive inclusion -------------------------------------*/
EnricoG 0:3b093bd0819e 29 #ifndef __LIB_NDEF_H
EnricoG 0:3b093bd0819e 30 #define __LIB_NDEF_H
EnricoG 0:3b093bd0819e 31
EnricoG 0:3b093bd0819e 32 #ifdef __cplusplus
EnricoG 0:3b093bd0819e 33 extern "C" {
EnricoG 0:3b093bd0819e 34 #endif
EnricoG 0:3b093bd0819e 35
EnricoG 0:3b093bd0819e 36 /* Includes ------------------------------------------------------------------*/
EnricoG 0:3b093bd0819e 37 /* include file which match the HW configuration */
EnricoG 0:3b093bd0819e 38 #include "lib_wrapper.h"
EnricoG 0:3b093bd0819e 39
EnricoG 0:3b093bd0819e 40 #ifndef errorchk
EnricoG 0:3b093bd0819e 41 #define errorchk(fCall) if (status = (fCall), status != M24SR_ACTION_COMPLETED) \
EnricoG 0:3b093bd0819e 42 {goto Error;} else
EnricoG 0:3b093bd0819e 43 #endif
EnricoG 0:3b093bd0819e 44
EnricoG 0:3b093bd0819e 45
EnricoG 0:3b093bd0819e 46 #define NDEF_SIZE_OFFSET 0
EnricoG 0:3b093bd0819e 47 #define FIRST_RECORD_OFFSET 2
EnricoG 0:3b093bd0819e 48
EnricoG 0:3b093bd0819e 49 #define RECORD_FLAG_FIELD 1
EnricoG 0:3b093bd0819e 50 #define TYPE_LENGTH_FIELD 1
EnricoG 0:3b093bd0819e 51 #define ID_LENGTH_FIELD 1
EnricoG 0:3b093bd0819e 52
EnricoG 0:3b093bd0819e 53
EnricoG 0:3b093bd0819e 54 #define MB_Mask ((uint8_t)(0x80))
EnricoG 0:3b093bd0819e 55 #define ME_Mask ((uint8_t)(0x40))
EnricoG 0:3b093bd0819e 56 #define CF_Mask ((uint8_t)(0x20))
EnricoG 0:3b093bd0819e 57 #define SR_Mask ((uint8_t)(0x10))
EnricoG 0:3b093bd0819e 58 #define IL_Mask ((uint8_t)(0x08))
EnricoG 0:3b093bd0819e 59 #define TNF_Mask ((uint8_t)(0x07))
EnricoG 0:3b093bd0819e 60
EnricoG 0:3b093bd0819e 61 #define TNF_Empty 0x00
EnricoG 0:3b093bd0819e 62 #define TNF_WellKnown 0x01
EnricoG 0:3b093bd0819e 63 #define TNF_MediaType 0x02
EnricoG 0:3b093bd0819e 64 #define TNF_AbsoluteURI 0x03
EnricoG 0:3b093bd0819e 65 #define TNF_NFCForumExternal 0x04
EnricoG 0:3b093bd0819e 66 #define TNF_Unknown 0x05
EnricoG 0:3b093bd0819e 67 #define TNF_Unchanged 0x06
EnricoG 0:3b093bd0819e 68 #define TNF_Reserved 0x07
EnricoG 0:3b093bd0819e 69
EnricoG 0:3b093bd0819e 70 #define SP_MAX_RECORD 3
EnricoG 0:3b093bd0819e 71
EnricoG 0:3b093bd0819e 72 #define AAR_TYPE_STRING "android.com:pkg"
EnricoG 0:3b093bd0819e 73 #define AAR_TYPE_STRING_LENGTH 15
EnricoG 0:3b093bd0819e 74
EnricoG 0:3b093bd0819e 75 #define M24SR_DISCOVERY_APP_STRING "st.com:m24sr_discovery_democtrl"
EnricoG 0:3b093bd0819e 76 #define M24SR_DISCOVERY_APP_STRING_LENGTH 31
EnricoG 0:3b093bd0819e 77
EnricoG 0:3b093bd0819e 78 #define VCARD_TYPE_STRING "text/vcard"
EnricoG 0:3b093bd0819e 79 #define VCARD_TYPE_STRING_LENGTH 10
EnricoG 0:3b093bd0819e 80
EnricoG 0:3b093bd0819e 81 #define XVCARD_TYPE_STRING "text/x-vCard"
EnricoG 0:3b093bd0819e 82 #define XVCARD_TYPE_STRING_LENGTH 12
EnricoG 0:3b093bd0819e 83
EnricoG 0:3b093bd0819e 84 #define SMART_POSTER_TYPE_STRING "Sp"
EnricoG 0:3b093bd0819e 85 #define SMART_POSTER_TYPE_STRING_LENGTH 2
EnricoG 0:3b093bd0819e 86
EnricoG 0:3b093bd0819e 87 #define URI_TYPE_STRING "U"
EnricoG 0:3b093bd0819e 88 #define URI_TYPE_STRING_LENGTH 1
EnricoG 0:3b093bd0819e 89
EnricoG 0:3b093bd0819e 90 #define SMS_TYPE_STRING "sms:"
EnricoG 0:3b093bd0819e 91 #define SMS_TYPE_STRING_LENGTH 4
EnricoG 0:3b093bd0819e 92
EnricoG 0:3b093bd0819e 93 #define GEO_TYPE_STRING "geo:"
EnricoG 0:3b093bd0819e 94 #define GEO_TYPE_STRING_LENGTH 4
EnricoG 0:3b093bd0819e 95
EnricoG 0:3b093bd0819e 96 #define URI_LATITUDE_END ","
EnricoG 0:3b093bd0819e 97 #define URI_LATITUDE_END_LENGTH 1
EnricoG 0:3b093bd0819e 98
EnricoG 0:3b093bd0819e 99 #define EMAIL_TYPE_STRING "mailto:"
EnricoG 0:3b093bd0819e 100 #define EMAIL_TYPE_STRING_LENGTH 7
EnricoG 0:3b093bd0819e 101
EnricoG 0:3b093bd0819e 102 #define URI_FIRST_DATA_END "?"
EnricoG 0:3b093bd0819e 103 #define URI_FIRST_DATA_END_LENGTH 1
EnricoG 0:3b093bd0819e 104
EnricoG 0:3b093bd0819e 105 #define SUBJECT_BEGIN_STRING "subject="
EnricoG 0:3b093bd0819e 106 #define SUBJECT_BEGIN_STRING_LENGTH 8
EnricoG 0:3b093bd0819e 107
EnricoG 0:3b093bd0819e 108 #define MESSAGE_BEGIN_STRING "body="
EnricoG 0:3b093bd0819e 109 #define MESSAGE_BEGIN_STRING_LENGTH 5
EnricoG 0:3b093bd0819e 110
EnricoG 0:3b093bd0819e 111 #define URI_SECOND_DATA_END "&"
EnricoG 0:3b093bd0819e 112 #define URI_SECOND_DATA_END_LENGTH 1
EnricoG 0:3b093bd0819e 113
EnricoG 0:3b093bd0819e 114 #define TEXT_TYPE_STRING "T"
EnricoG 0:3b093bd0819e 115 #define TEXT_TYPE_STRING_LENGTH 1
EnricoG 0:3b093bd0819e 116
EnricoG 0:3b093bd0819e 117 #define ISO_ENGLISH_CODE_STRING "en"
EnricoG 0:3b093bd0819e 118 #define ISO_ENGLISH_CODE_STRING_LENGTH 2
EnricoG 0:3b093bd0819e 119
EnricoG 0:3b093bd0819e 120
EnricoG 0:3b093bd0819e 121 #define URI_ID_0x00 0x00
EnricoG 0:3b093bd0819e 122 #define URI_ID_0x01 0x01
EnricoG 0:3b093bd0819e 123 #define URI_ID_0x02 0x02
EnricoG 0:3b093bd0819e 124 #define URI_ID_0x03 0x03
EnricoG 0:3b093bd0819e 125 #define URI_ID_0x04 0x04
EnricoG 0:3b093bd0819e 126 #define URI_ID_0x05 0x05
EnricoG 0:3b093bd0819e 127 #define URI_ID_0x06 0x06
EnricoG 0:3b093bd0819e 128 #define URI_ID_0x07 0x07
EnricoG 0:3b093bd0819e 129 #define URI_ID_0x08 0x08
EnricoG 0:3b093bd0819e 130 #define URI_ID_0x09 0x09
EnricoG 0:3b093bd0819e 131 #define URI_ID_0x0A 0x0A
EnricoG 0:3b093bd0819e 132 #define URI_ID_0x0B 0x0B
EnricoG 0:3b093bd0819e 133 #define URI_ID_0x0C 0x0C
EnricoG 0:3b093bd0819e 134 #define URI_ID_0x0D 0x0D
EnricoG 0:3b093bd0819e 135 #define URI_ID_0x0E 0x0E
EnricoG 0:3b093bd0819e 136 #define URI_ID_0x0F 0x0F
EnricoG 0:3b093bd0819e 137 #define URI_ID_0x10 0x10
EnricoG 0:3b093bd0819e 138 #define URI_ID_0x11 0x11
EnricoG 0:3b093bd0819e 139 #define URI_ID_0x12 0x12
EnricoG 0:3b093bd0819e 140 #define URI_ID_0x13 0x13
EnricoG 0:3b093bd0819e 141 #define URI_ID_0x14 0x14
EnricoG 0:3b093bd0819e 142 #define URI_ID_0x15 0x15
EnricoG 0:3b093bd0819e 143 #define URI_ID_0x16 0x16
EnricoG 0:3b093bd0819e 144 #define URI_ID_0x17 0x17
EnricoG 0:3b093bd0819e 145 #define URI_ID_0x18 0x18
EnricoG 0:3b093bd0819e 146 #define URI_ID_0x19 0x19
EnricoG 0:3b093bd0819e 147 #define URI_ID_0x1A 0x1A
EnricoG 0:3b093bd0819e 148 #define URI_ID_0x1B 0x1B
EnricoG 0:3b093bd0819e 149 #define URI_ID_0x1C 0x1C
EnricoG 0:3b093bd0819e 150 #define URI_ID_0x1D 0x1D
EnricoG 0:3b093bd0819e 151 #define URI_ID_0x1E 0x1E
EnricoG 0:3b093bd0819e 152 #define URI_ID_0x1F 0x1F
EnricoG 0:3b093bd0819e 153 #define URI_ID_0x20 0x20
EnricoG 0:3b093bd0819e 154 #define URI_ID_0x21 0x21
EnricoG 0:3b093bd0819e 155 #define URI_ID_0x22 0x22
EnricoG 0:3b093bd0819e 156 #define URI_ID_0x23 0x23
EnricoG 0:3b093bd0819e 157 #define URI_RFU 0x24
EnricoG 0:3b093bd0819e 158
EnricoG 0:3b093bd0819e 159 #define URI_ID_0x01_STRING "http://www.\0"
EnricoG 0:3b093bd0819e 160 #define URI_ID_0x02_STRING "https://www.\0"
EnricoG 0:3b093bd0819e 161 #define URI_ID_0x03_STRING "http://\0"
EnricoG 0:3b093bd0819e 162 #define URI_ID_0x04_STRING "https://\0"
EnricoG 0:3b093bd0819e 163 #define URI_ID_0x05_STRING "tel:\0"
EnricoG 0:3b093bd0819e 164 #define URI_ID_0x06_STRING "mailto:\0"
EnricoG 0:3b093bd0819e 165 #define URI_ID_0x07_STRING "ftp://anonymous:anonymous@\0"
EnricoG 0:3b093bd0819e 166 #define URI_ID_0x08_STRING "ftp://ftp.\0"
EnricoG 0:3b093bd0819e 167 #define URI_ID_0x09_STRING "ftps://\0"
EnricoG 0:3b093bd0819e 168 #define URI_ID_0x0A_STRING "sftp://\0"
EnricoG 0:3b093bd0819e 169 #define URI_ID_0x0B_STRING "smb://\0"
EnricoG 0:3b093bd0819e 170 #define URI_ID_0x0C_STRING "nfs://\0"
EnricoG 0:3b093bd0819e 171 #define URI_ID_0x0D_STRING "ftp://\0"
EnricoG 0:3b093bd0819e 172 #define URI_ID_0x0E_STRING "dav://\0"
EnricoG 0:3b093bd0819e 173 #define URI_ID_0x0F_STRING "news:\0"
EnricoG 0:3b093bd0819e 174 #define URI_ID_0x10_STRING "telnet://\0"
EnricoG 0:3b093bd0819e 175 #define URI_ID_0x11_STRING "imap:\0"
EnricoG 0:3b093bd0819e 176 #define URI_ID_0x12_STRING "rtsp://\0"
EnricoG 0:3b093bd0819e 177 #define URI_ID_0x13_STRING "urn:\0"
EnricoG 0:3b093bd0819e 178 #define URI_ID_0x14_STRING "pop:\0"
EnricoG 0:3b093bd0819e 179 #define URI_ID_0x15_STRING "sip:\0"
EnricoG 0:3b093bd0819e 180 #define URI_ID_0x16_STRING "sips:\0"
EnricoG 0:3b093bd0819e 181 #define URI_ID_0x17_STRING "tftp:\0"
EnricoG 0:3b093bd0819e 182 #define URI_ID_0x18_STRING "btspp://\0"
EnricoG 0:3b093bd0819e 183 #define URI_ID_0x19_STRING "btl2cap://\0"
EnricoG 0:3b093bd0819e 184 #define URI_ID_0x1A_STRING "btgoep://\0"
EnricoG 0:3b093bd0819e 185 #define URI_ID_0x1B_STRING "tcpobex://\0"
EnricoG 0:3b093bd0819e 186 #define URI_ID_0x1C_STRING "irdaobex://\0"
EnricoG 0:3b093bd0819e 187 #define URI_ID_0x1D_STRING "file://\0"
EnricoG 0:3b093bd0819e 188 #define URI_ID_0x1E_STRING "urn:epc:id:\0"
EnricoG 0:3b093bd0819e 189 #define URI_ID_0x1F_STRING "urn:epc:tag\0"
EnricoG 0:3b093bd0819e 190 #define URI_ID_0x20_STRING "urn:epc:pat:\0"
EnricoG 0:3b093bd0819e 191 #define URI_ID_0x21_STRING "urn:epc:raw:\0"
EnricoG 0:3b093bd0819e 192 #define URI_ID_0x22_STRING "urn:epc:\0"
EnricoG 0:3b093bd0819e 193 #define URI_ID_0x23_STRING "urn:nfc:\0"
EnricoG 0:3b093bd0819e 194
EnricoG 0:3b093bd0819e 195 typedef enum
EnricoG 0:3b093bd0819e 196 {
EnricoG 0:3b093bd0819e 197 UNKNOWN_TYPE = 0,
EnricoG 0:3b093bd0819e 198 VCARD_TYPE,
EnricoG 0:3b093bd0819e 199 WELL_KNOWN_ABRIDGED_URI_TYPE,
EnricoG 0:3b093bd0819e 200 URI_SMS_TYPE,
EnricoG 0:3b093bd0819e 201 URI_GEO_TYPE,
EnricoG 0:3b093bd0819e 202 URI_EMAIL_TYPE,
EnricoG 0:3b093bd0819e 203 SMARTPOSTER_TYPE,
EnricoG 0:3b093bd0819e 204 URL_TYPE,
EnricoG 0:3b093bd0819e 205 TEXT_TYPE,
EnricoG 0:3b093bd0819e 206 BT_TYPE,
EnricoG 0:3b093bd0819e 207 /* list of "external type" known by this demo, other external type will be addressed as UNKNWON_TYPE */
EnricoG 0:3b093bd0819e 208 M24SR_DISCOVERY_APP_TYPE
EnricoG 0:3b093bd0819e 209 } NDEF_TypeDef;
EnricoG 0:3b093bd0819e 210
EnricoG 0:3b093bd0819e 211 typedef struct
EnricoG 0:3b093bd0819e 212 {
EnricoG 0:3b093bd0819e 213 uint8_t RecordFlags;
EnricoG 0:3b093bd0819e 214 uint8_t TypeLength;
EnricoG 0:3b093bd0819e 215 uint8_t PayloadLength3;
EnricoG 0:3b093bd0819e 216 uint8_t PayloadLength2;
EnricoG 0:3b093bd0819e 217 uint8_t PayloadLength1;
EnricoG 0:3b093bd0819e 218 uint8_t PayloadLength0;
EnricoG 0:3b093bd0819e 219 uint8_t IDLength;
EnricoG 0:3b093bd0819e 220 uint8_t Type[0xFF];
EnricoG 0:3b093bd0819e 221 uint8_t ID[0xFF];
EnricoG 0:3b093bd0819e 222 uint16_t PayloadOffset;
EnricoG 0:3b093bd0819e 223 uint32_t PayloadBufferAdd; /* add where payload content has been stored */
EnricoG 0:3b093bd0819e 224 NDEF_TypeDef NDEF_Type; /* to store identification ID for application */
EnricoG 0:3b093bd0819e 225 uint32_t SPRecordStructAdd[SP_MAX_RECORD]; /*in case of smart poster array to store add of other sRecordInfo struct */
EnricoG 0:3b093bd0819e 226 uint8_t NbOfRecordInSPPayload;
EnricoG 0:3b093bd0819e 227 }sRecordInfo;
EnricoG 0:3b093bd0819e 228
EnricoG 0:3b093bd0819e 229
EnricoG 0:3b093bd0819e 230 uint16_t NDEF_IdentifyNDEF ( sRecordInfo *pRecordStruct, uint8_t* pNDEF );
EnricoG 0:3b093bd0819e 231 uint16_t NDEF_ReadNDEF( uint8_t *pNDEF);
EnricoG 0:3b093bd0819e 232 uint16_t NDEF_WriteNDEF( uint8_t *pNDEF);
EnricoG 0:3b093bd0819e 233
EnricoG 0:3b093bd0819e 234 #ifdef __cplusplus
EnricoG 0:3b093bd0819e 235 }
EnricoG 0:3b093bd0819e 236 #endif
EnricoG 0:3b093bd0819e 237 #endif /* __LIB_NDEF_H */
EnricoG 0:3b093bd0819e 238
EnricoG 0:3b093bd0819e 239
EnricoG 0:3b093bd0819e 240 /******************* (C) COPYRIGHT 2013 STMicroelectronics *****END OF FILE****/