NFC NDEF library
Dependents: Nucleo_NFC_Example I2C_NFC_Master Print_Entire_Nucleo_NFC01A1_Memory
Fork of lib_NDEF by
lib_NDEF.h@0:3b093bd0819e, 2014-12-15 (annotated)
- Committer:
- EnricoG
- Date:
- Mon Dec 15 19:41:36 2014 +0000
- Revision:
- 0:3b093bd0819e
Initial commit
Who changed what in which revision?
User | Revision | Line number | New 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>© 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****/ |