This application provides a set of demos with X-NUCLEO-NFC01A1 expansion board.

Dependencies:   NDefLib X_NUCLEO_NFC01A1 mbed

Fork of X-MBED-NFC1 by Giovanni Visentini

This application provides a set of demos with X-NUCLEO-NFC01A1 expansion board.

The available demos are:

  • SAMPLE_WRITE_URL: write a tag with the ST home page URL
  • SAMPLE_COUNT_CLICK: create a custom tag to count and report the user button clicks.
  • SAMPLE_WRITE_AND_CHANGE_ALL: write a tag with all the supported records and update the tag contents when the user button is pressed.
  • SAMPLE_LOCK_TAG_CONTENT: use the M24SR component API to set the NFC tag as read-only.

To enable the different demos comment/uncomment the SAMPLE_* macros provided in main.cpp .

Committer:
giovannivisentini
Date:
Thu Nov 19 08:50:18 2015 +0000
Revision:
0:674813bd5ec9
first commit,

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giovannivisentini 0:674813bd5ec9 1 /**
giovannivisentini 0:674813bd5ec9 2 ******************************************************************************
giovannivisentini 0:674813bd5ec9 3 * @file lib_M24SR.c
giovannivisentini 0:674813bd5ec9 4 * @author MMY Application Team
giovannivisentini 0:674813bd5ec9 5 * @version V1.1.0
giovannivisentini 0:674813bd5ec9 6 * @date 20-October-2014
giovannivisentini 0:674813bd5ec9 7 * @brief This file help to manage M24SR in a NFC forum context.
giovannivisentini 0:674813bd5ec9 8 ******************************************************************************
giovannivisentini 0:674813bd5ec9 9 * @attention
giovannivisentini 0:674813bd5ec9 10 *
giovannivisentini 0:674813bd5ec9 11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
giovannivisentini 0:674813bd5ec9 12 *
giovannivisentini 0:674813bd5ec9 13 * Redistribution and use in source and binary forms, with or without modification,
giovannivisentini 0:674813bd5ec9 14 * are permitted provided that the following conditions are met:
giovannivisentini 0:674813bd5ec9 15 * 1. Redistributions of source code must retain the above copyright notice,
giovannivisentini 0:674813bd5ec9 16 * this list of conditions and the following disclaimer.
giovannivisentini 0:674813bd5ec9 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
giovannivisentini 0:674813bd5ec9 18 * this list of conditions and the following disclaimer in the documentation
giovannivisentini 0:674813bd5ec9 19 * and/or other materials provided with the distribution.
giovannivisentini 0:674813bd5ec9 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
giovannivisentini 0:674813bd5ec9 21 * may be used to endorse or promote products derived from this software
giovannivisentini 0:674813bd5ec9 22 * without specific prior written permission.
giovannivisentini 0:674813bd5ec9 23 *
giovannivisentini 0:674813bd5ec9 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
giovannivisentini 0:674813bd5ec9 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
giovannivisentini 0:674813bd5ec9 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
giovannivisentini 0:674813bd5ec9 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
giovannivisentini 0:674813bd5ec9 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
giovannivisentini 0:674813bd5ec9 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
giovannivisentini 0:674813bd5ec9 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
giovannivisentini 0:674813bd5ec9 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
giovannivisentini 0:674813bd5ec9 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
giovannivisentini 0:674813bd5ec9 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
giovannivisentini 0:674813bd5ec9 34 *
giovannivisentini 0:674813bd5ec9 35 ******************************************************************************
giovannivisentini 0:674813bd5ec9 36 */
giovannivisentini 0:674813bd5ec9 37
giovannivisentini 0:674813bd5ec9 38
giovannivisentini 0:674813bd5ec9 39 /* Includes ------------------------------------------------------------------*/
giovannivisentini 0:674813bd5ec9 40 #include "m24sr_class.h"
giovannivisentini 0:674813bd5ec9 41 #include "lib_M24SR.h"
giovannivisentini 0:674813bd5ec9 42
giovannivisentini 0:674813bd5ec9 43 /** @addtogroup M24SR_Driver
giovannivisentini 0:674813bd5ec9 44 * @{
giovannivisentini 0:674813bd5ec9 45 */
giovannivisentini 0:674813bd5ec9 46
giovannivisentini 0:674813bd5ec9 47 /** @defgroup lib_M24SR
giovannivisentini 0:674813bd5ec9 48 * @{
giovannivisentini 0:674813bd5ec9 49 * @brief This is the library to interface with the M24SR dynamic tag.
giovannivisentini 0:674813bd5ec9 50 * This layer simplify the use of the M24SR driver by sequencing
giovannivisentini 0:674813bd5ec9 51 * some commands.
giovannivisentini 0:674813bd5ec9 52 */
giovannivisentini 0:674813bd5ec9 53
giovannivisentini 0:674813bd5ec9 54 uint8_t I2CPassword[16]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
giovannivisentini 0:674813bd5ec9 55 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
giovannivisentini 0:674813bd5ec9 56
giovannivisentini 0:674813bd5ec9 57 static uint32_t NDEFSessionOpenID=NDEF_SESSION_CLOSED;
giovannivisentini 0:674813bd5ec9 58
giovannivisentini 0:674813bd5ec9 59 /* Init NDEF_FileID with bad value in case Init failed */
giovannivisentini 0:674813bd5ec9 60 static uint16_t NDEF_FileID = 0xDEAD;
giovannivisentini 0:674813bd5ec9 61
giovannivisentini 0:674813bd5ec9 62
giovannivisentini 0:674813bd5ec9 63 extern M24SR *m24srDrv;
giovannivisentini 0:674813bd5ec9 64
giovannivisentini 0:674813bd5ec9 65 /** @defgroup libM24SR_Private_Functions
giovannivisentini 0:674813bd5ec9 66 * @{
giovannivisentini 0:674813bd5ec9 67 */
giovannivisentini 0:674813bd5ec9 68
giovannivisentini 0:674813bd5ec9 69 /**
giovannivisentini 0:674813bd5ec9 70 * @}
giovannivisentini 0:674813bd5ec9 71 */
giovannivisentini 0:674813bd5ec9 72
giovannivisentini 0:674813bd5ec9 73
giovannivisentini 0:674813bd5ec9 74 /** @defgroup libM24SR_Public_Functions
giovannivisentini 0:674813bd5ec9 75 * @{
giovannivisentini 0:674813bd5ec9 76 */
giovannivisentini 0:674813bd5ec9 77
giovannivisentini 0:674813bd5ec9 78
giovannivisentini 0:674813bd5ec9 79
giovannivisentini 0:674813bd5ec9 80
giovannivisentini 0:674813bd5ec9 81 /**
giovannivisentini 0:674813bd5ec9 82 * @brief This fonction initialize the M24SR
giovannivisentini 0:674813bd5ec9 83 * @param CCBuffer : pointer on the buffer to store CC file
giovannivisentini 0:674813bd5ec9 84 * @param size : number of byte of data to read
giovannivisentini 0:674813bd5ec9 85 * @retval NFC_OK : Initalization done
giovannivisentini 0:674813bd5ec9 86 * @retval NFC_ERROR : Not able to Initialize.
giovannivisentini 0:674813bd5ec9 87 */
giovannivisentini 0:674813bd5ec9 88 uint16_t M24SR_Initialization ( uint8_t* CCBuffer, uint8_t size )
giovannivisentini 0:674813bd5ec9 89 {
giovannivisentini 0:674813bd5ec9 90 uint16_t status = NFC_ERROR;
giovannivisentini 0:674813bd5ec9 91 uint16_t trials = 5; /* wait 1sec, driver is configured to let 200ms for command to complete */
giovannivisentini 0:674813bd5ec9 92 /* which is enough for all commands except GetSession if RF session is already opened */
giovannivisentini 0:674813bd5ec9 93 /* Smartphone generaly release the session within the second, but customer can modify this value */
giovannivisentini 0:674813bd5ec9 94
giovannivisentini 0:674813bd5ec9 95
giovannivisentini 0:674813bd5ec9 96 /* Perform HW initialization */
giovannivisentini 0:674813bd5ec9 97 (*m24srDrv).Init(NULL);
giovannivisentini 0:674813bd5ec9 98 /* Read CC file */
giovannivisentini 0:674813bd5ec9 99 while( status != NFC_OK && trials)
giovannivisentini 0:674813bd5ec9 100 {
giovannivisentini 0:674813bd5ec9 101 status = (*m24srDrv).GetSession();
giovannivisentini 0:674813bd5ec9 102 trials--;
giovannivisentini 0:674813bd5ec9 103 }
giovannivisentini 0:674813bd5ec9 104 if (status != NFC_OK)
giovannivisentini 0:674813bd5ec9 105 return NFC_ERROR;
giovannivisentini 0:674813bd5ec9 106 /*===================================*/
giovannivisentini 0:674813bd5ec9 107 /* Select the NFC type 4 application */
giovannivisentini 0:674813bd5ec9 108 /*===================================*/
giovannivisentini 0:674813bd5ec9 109 errorchk( (*m24srDrv).SelectApplication() );
giovannivisentini 0:674813bd5ec9 110
giovannivisentini 0:674813bd5ec9 111 /*==================*/
giovannivisentini 0:674813bd5ec9 112 /* select a CC file */
giovannivisentini 0:674813bd5ec9 113 /*==================*/
giovannivisentini 0:674813bd5ec9 114 errorchk ((*m24srDrv).SelectCCfile( ) );
giovannivisentini 0:674813bd5ec9 115
giovannivisentini 0:674813bd5ec9 116 /* read the first 15 bytes of the CC file */
giovannivisentini 0:674813bd5ec9 117 if( M24SR_ReadData ( 0x0000 , 0x0F , CCBuffer )== NFC_OK)
giovannivisentini 0:674813bd5ec9 118 {
giovannivisentini 0:674813bd5ec9 119 NDEF_FileID = (uint16_t) ((CCBuffer[0x09]<<8) | CCBuffer[0x0A]);
giovannivisentini 0:674813bd5ec9 120 errorchk( (*m24srDrv).Deselect ( ) );
giovannivisentini 0:674813bd5ec9 121 return NFC_OK;
giovannivisentini 0:674813bd5ec9 122 }
giovannivisentini 0:674813bd5ec9 123 else
giovannivisentini 0:674813bd5ec9 124 errorchk( (*m24srDrv).Deselect ( ) );
giovannivisentini 0:674813bd5ec9 125
giovannivisentini 0:674813bd5ec9 126 Error:
giovannivisentini 0:674813bd5ec9 127 return NFC_ERROR;
giovannivisentini 0:674813bd5ec9 128
giovannivisentini 0:674813bd5ec9 129 }
giovannivisentini 0:674813bd5ec9 130
giovannivisentini 0:674813bd5ec9 131 /**
giovannivisentini 0:674813bd5ec9 132 * @brief This fonction retrieve the NDEF file ID of NDEF file present in M24SR
giovannivisentini 0:674813bd5ec9 133 * @param NDEF_fileID : To store NDEF ID
giovannivisentini 0:674813bd5ec9 134 * @retval NFC_OK : File ID read
giovannivisentini 0:674813bd5ec9 135 * @retval NFC_ERROR : Not able to read file ID.
giovannivisentini 0:674813bd5ec9 136 */
giovannivisentini 0:674813bd5ec9 137 uint16_t M24SR_GetNDEFFileId ( uint16_t *NDEF_fileID )
giovannivisentini 0:674813bd5ec9 138 {
giovannivisentini 0:674813bd5ec9 139 if( NDEF_FileID != 0xDEAD)
giovannivisentini 0:674813bd5ec9 140 {
giovannivisentini 0:674813bd5ec9 141 *NDEF_fileID = NDEF_FileID;
giovannivisentini 0:674813bd5ec9 142 return NFC_OK;
giovannivisentini 0:674813bd5ec9 143 }
giovannivisentini 0:674813bd5ec9 144 else
giovannivisentini 0:674813bd5ec9 145 {
giovannivisentini 0:674813bd5ec9 146 return NFC_ERROR;
giovannivisentini 0:674813bd5ec9 147 }
giovannivisentini 0:674813bd5ec9 148 }
giovannivisentini 0:674813bd5ec9 149
giovannivisentini 0:674813bd5ec9 150
giovannivisentini 0:674813bd5ec9 151 /**
giovannivisentini 0:674813bd5ec9 152 * @brief This fonction configure the M24SR to access NDEF message by I2C
giovannivisentini 0:674813bd5ec9 153 * @param NDEF_fileID : NDEF identification to select NDEF in M24SR
giovannivisentini 0:674813bd5ec9 154 * @param Priority: 2 options: check if M24SR available to open session (no RF session on going)
giovannivisentini 0:674813bd5ec9 155 * Kill RF session and open I2C sesssion.
giovannivisentini 0:674813bd5ec9 156 * @retval NFC_OK : Session is opened
giovannivisentini 0:674813bd5ec9 157 * @retval NFC_ERROR : Not able to open session.
giovannivisentini 0:674813bd5ec9 158 */
giovannivisentini 0:674813bd5ec9 159 uint16_t M24SR_OpenNDEFSession ( uint16_t NDEF_fileID, uint16_t Priority )
giovannivisentini 0:674813bd5ec9 160 {
giovannivisentini 0:674813bd5ec9 161 uint16_t status = NFC_ERROR;
giovannivisentini 0:674813bd5ec9 162 uint16_t trials = 5; /* wait 1sec, driver is configured to let 200ms for command to complete */
giovannivisentini 0:674813bd5ec9 163 /* which is enough for all commands except GetSession if RF session is already opened */
giovannivisentini 0:674813bd5ec9 164 /* Smartphone generaly release the session within the second, but customer can modify this value */
giovannivisentini 0:674813bd5ec9 165
giovannivisentini 0:674813bd5ec9 166 if(NDEFSessionOpenID == NDEF_SESSION_CLOSED)
giovannivisentini 0:674813bd5ec9 167 {
giovannivisentini 0:674813bd5ec9 168 if( Priority == TAKE_SESSION)
giovannivisentini 0:674813bd5ec9 169 {
giovannivisentini 0:674813bd5ec9 170 status = (*m24srDrv).KillSession( );
giovannivisentini 0:674813bd5ec9 171 }
giovannivisentini 0:674813bd5ec9 172 else
giovannivisentini 0:674813bd5ec9 173 {
giovannivisentini 0:674813bd5ec9 174 while( status != NFC_OK && trials)
giovannivisentini 0:674813bd5ec9 175 {
giovannivisentini 0:674813bd5ec9 176 status = (*m24srDrv).GetSession( );
giovannivisentini 0:674813bd5ec9 177 trials--;
giovannivisentini 0:674813bd5ec9 178 }
giovannivisentini 0:674813bd5ec9 179 }
giovannivisentini 0:674813bd5ec9 180 if (status != NFC_OK)
giovannivisentini 0:674813bd5ec9 181 {
giovannivisentini 0:674813bd5ec9 182 /* seems session already open on RF side */
giovannivisentini 0:674813bd5ec9 183 /* But in case of I2C issue try to init again */
giovannivisentini 0:674813bd5ec9 184 (*m24srDrv).Init( NULL);
giovannivisentini 0:674813bd5ec9 185 return NFC_ERROR;
giovannivisentini 0:674813bd5ec9 186 }
giovannivisentini 0:674813bd5ec9 187
giovannivisentini 0:674813bd5ec9 188 /*===================================*/
giovannivisentini 0:674813bd5ec9 189 /* Select the NFC type 4 application */
giovannivisentini 0:674813bd5ec9 190 /*===================================*/
giovannivisentini 0:674813bd5ec9 191 errorchk( (*m24srDrv).SelectApplication( ) );
giovannivisentini 0:674813bd5ec9 192
giovannivisentini 0:674813bd5ec9 193 /*====================*/
giovannivisentini 0:674813bd5ec9 194 /* select NDEF file */
giovannivisentini 0:674813bd5ec9 195 /*====================*/
giovannivisentini 0:674813bd5ec9 196 errorchk( (*m24srDrv).SelectNDEFfile( NDEF_fileID) );
giovannivisentini 0:674813bd5ec9 197
giovannivisentini 0:674813bd5ec9 198 NDEFSessionOpenID = (uint32_t)(NDEF_fileID);
giovannivisentini 0:674813bd5ec9 199
giovannivisentini 0:674813bd5ec9 200 return NFC_OK;
giovannivisentini 0:674813bd5ec9 201 }
giovannivisentini 0:674813bd5ec9 202 else if(NDEFSessionOpenID == NDEF_fileID)
giovannivisentini 0:674813bd5ec9 203 {
giovannivisentini 0:674813bd5ec9 204 /* Session already Open not an issue caller can perform access in NDEF file */
giovannivisentini 0:674813bd5ec9 205 return NFC_OK;
giovannivisentini 0:674813bd5ec9 206 }
giovannivisentini 0:674813bd5ec9 207
giovannivisentini 0:674813bd5ec9 208 Error:
giovannivisentini 0:674813bd5ec9 209 return NFC_ERROR;
giovannivisentini 0:674813bd5ec9 210 }
giovannivisentini 0:674813bd5ec9 211
giovannivisentini 0:674813bd5ec9 212 /**
giovannivisentini 0:674813bd5ec9 213 * @brief This fonction close the NDEF Session.
giovannivisentini 0:674813bd5ec9 214 * @param NDEF_fileID : NDEF identification to select NDEF in M24SR
giovannivisentini 0:674813bd5ec9 215 * @retval NFC_OK : Session is closed
giovannivisentini 0:674813bd5ec9 216 * @retval NFC_ERROR : Not able to close session.
giovannivisentini 0:674813bd5ec9 217 */
giovannivisentini 0:674813bd5ec9 218 uint16_t M24SR_CloseNDEFSession ( uint16_t NDEF_fileID )
giovannivisentini 0:674813bd5ec9 219 {
giovannivisentini 0:674813bd5ec9 220 uint16_t status = NFC_ERROR;
giovannivisentini 0:674813bd5ec9 221
giovannivisentini 0:674813bd5ec9 222 if(NDEFSessionOpenID == (uint32_t)(NDEF_fileID))
giovannivisentini 0:674813bd5ec9 223 {
giovannivisentini 0:674813bd5ec9 224 errorchk( (*m24srDrv).Deselect ( ) );
giovannivisentini 0:674813bd5ec9 225 NDEFSessionOpenID = NDEF_SESSION_CLOSED;
giovannivisentini 0:674813bd5ec9 226
giovannivisentini 0:674813bd5ec9 227 return NFC_OK;
giovannivisentini 0:674813bd5ec9 228 }
giovannivisentini 0:674813bd5ec9 229 else if(NDEFSessionOpenID == NDEF_SESSION_CLOSED)
giovannivisentini 0:674813bd5ec9 230 {
giovannivisentini 0:674813bd5ec9 231 /* Not an NFC_ERROR as session is already closed */
giovannivisentini 0:674813bd5ec9 232 return NFC_OK;
giovannivisentini 0:674813bd5ec9 233 }
giovannivisentini 0:674813bd5ec9 234
giovannivisentini 0:674813bd5ec9 235 Error:
giovannivisentini 0:674813bd5ec9 236 return NFC_ERROR;
giovannivisentini 0:674813bd5ec9 237 }
giovannivisentini 0:674813bd5ec9 238
giovannivisentini 0:674813bd5ec9 239 /**
giovannivisentini 0:674813bd5ec9 240 * @brief This fonction read the data stored in M24SR at defined offset
giovannivisentini 0:674813bd5ec9 241 * @param Offset : Offset in the NDEF file in M24SR
giovannivisentini 0:674813bd5ec9 242 * @param DataSize : Number of byte to read
giovannivisentini 0:674813bd5ec9 243 * @param pData : pointer on buffer to store read data
giovannivisentini 0:674813bd5ec9 244 * @retval Status (SW1&SW2) : Status of the operation.
giovannivisentini 0:674813bd5ec9 245 */
giovannivisentini 0:674813bd5ec9 246 uint16_t M24SR_ReadData ( uint16_t Offset , uint16_t DataSize , uint8_t* pData)
giovannivisentini 0:674813bd5ec9 247 {
giovannivisentini 0:674813bd5ec9 248 uint16_t status;
giovannivisentini 0:674813bd5ec9 249
giovannivisentini 0:674813bd5ec9 250 if( DataSize > M24SR_READ_MAX_NBBYTE)
giovannivisentini 0:674813bd5ec9 251 {
giovannivisentini 0:674813bd5ec9 252 do
giovannivisentini 0:674813bd5ec9 253 {
giovannivisentini 0:674813bd5ec9 254 status = (*m24srDrv).ReadBinary ( Offset, M24SR_READ_MAX_NBBYTE , pData);
giovannivisentini 0:674813bd5ec9 255 Offset += M24SR_READ_MAX_NBBYTE;
giovannivisentini 0:674813bd5ec9 256 pData += M24SR_READ_MAX_NBBYTE;
giovannivisentini 0:674813bd5ec9 257 DataSize -= M24SR_READ_MAX_NBBYTE;
giovannivisentini 0:674813bd5ec9 258 }while( DataSize > M24SR_READ_MAX_NBBYTE && status == NFC_OK);
giovannivisentini 0:674813bd5ec9 259 if( status == NFC_OK && DataSize)
giovannivisentini 0:674813bd5ec9 260 status = (*m24srDrv).ReadBinary ( Offset, (uint8_t)(DataSize) , pData);
giovannivisentini 0:674813bd5ec9 261 }
giovannivisentini 0:674813bd5ec9 262 else
giovannivisentini 0:674813bd5ec9 263 status = (*m24srDrv).ReadBinary ( Offset, (uint8_t)(DataSize) , pData);
giovannivisentini 0:674813bd5ec9 264
giovannivisentini 0:674813bd5ec9 265 return status;
giovannivisentini 0:674813bd5ec9 266 }
giovannivisentini 0:674813bd5ec9 267
giovannivisentini 0:674813bd5ec9 268 /**
giovannivisentini 0:674813bd5ec9 269 * @brief This fonction read the data stored in M24SR at defined offset without NDEF concideration
giovannivisentini 0:674813bd5ec9 270 * @param Offset : Offset in the NDEF file in M24SR
giovannivisentini 0:674813bd5ec9 271 * @param DataSize : Number of byte to read
giovannivisentini 0:674813bd5ec9 272 * @param pData : pointer on buffer to store read data
giovannivisentini 0:674813bd5ec9 273 * @retval Status (SW1&SW2) : Status of the operation.
giovannivisentini 0:674813bd5ec9 274 */
giovannivisentini 0:674813bd5ec9 275 uint16_t M24SR_ForceReadData ( uint16_t Offset , uint16_t DataSize , uint8_t* pData)
giovannivisentini 0:674813bd5ec9 276 {
giovannivisentini 0:674813bd5ec9 277 uint16_t status;
giovannivisentini 0:674813bd5ec9 278
giovannivisentini 0:674813bd5ec9 279 if( DataSize > M24SR_READ_MAX_NBBYTE)
giovannivisentini 0:674813bd5ec9 280 {
giovannivisentini 0:674813bd5ec9 281 do
giovannivisentini 0:674813bd5ec9 282 {
giovannivisentini 0:674813bd5ec9 283 status = (*m24srDrv).STReadBinary ( Offset, M24SR_READ_MAX_NBBYTE , pData);
giovannivisentini 0:674813bd5ec9 284 Offset += M24SR_READ_MAX_NBBYTE;
giovannivisentini 0:674813bd5ec9 285 pData += M24SR_READ_MAX_NBBYTE;
giovannivisentini 0:674813bd5ec9 286 DataSize -= M24SR_READ_MAX_NBBYTE;
giovannivisentini 0:674813bd5ec9 287 }while( DataSize > M24SR_READ_MAX_NBBYTE && status == NFC_OK);
giovannivisentini 0:674813bd5ec9 288 if( status == NFC_OK && DataSize)
giovannivisentini 0:674813bd5ec9 289 status = (*m24srDrv).STReadBinary ( Offset, (uint8_t)(DataSize) , pData);
giovannivisentini 0:674813bd5ec9 290 }
giovannivisentini 0:674813bd5ec9 291 else
giovannivisentini 0:674813bd5ec9 292 status = (*m24srDrv).STReadBinary ( Offset, (uint8_t)(DataSize) , pData);
giovannivisentini 0:674813bd5ec9 293
giovannivisentini 0:674813bd5ec9 294 return status;
giovannivisentini 0:674813bd5ec9 295 }
giovannivisentini 0:674813bd5ec9 296
giovannivisentini 0:674813bd5ec9 297 /**
giovannivisentini 0:674813bd5ec9 298 * @brief This fonction write data in M24SR at defined offset
giovannivisentini 0:674813bd5ec9 299 * @param Offset : Offset in the NDEF file in M24SR
giovannivisentini 0:674813bd5ec9 300 * @param DataSize : Number of byte to read
giovannivisentini 0:674813bd5ec9 301 * @param pData : pointer on buffer to copy in M24SR
giovannivisentini 0:674813bd5ec9 302 * @retval Status (SW1&SW2) : Status of the operation.
giovannivisentini 0:674813bd5ec9 303 */
giovannivisentini 0:674813bd5ec9 304 uint16_t M24SR_WriteData ( uint16_t Offset , uint16_t DataSize , uint8_t* pData)
giovannivisentini 0:674813bd5ec9 305 {
giovannivisentini 0:674813bd5ec9 306 uint16_t status;
giovannivisentini 0:674813bd5ec9 307
giovannivisentini 0:674813bd5ec9 308 if( DataSize > M24SR_WRITE_MAX_NBBYTE)
giovannivisentini 0:674813bd5ec9 309 {
giovannivisentini 0:674813bd5ec9 310 do
giovannivisentini 0:674813bd5ec9 311 {
giovannivisentini 0:674813bd5ec9 312 status = (*m24srDrv).UpdateBinary ( Offset, M24SR_WRITE_MAX_NBBYTE , pData);
giovannivisentini 0:674813bd5ec9 313 Offset += M24SR_WRITE_MAX_NBBYTE;
giovannivisentini 0:674813bd5ec9 314 pData += M24SR_WRITE_MAX_NBBYTE;
giovannivisentini 0:674813bd5ec9 315 DataSize -= M24SR_WRITE_MAX_NBBYTE;
giovannivisentini 0:674813bd5ec9 316 }while( DataSize > M24SR_WRITE_MAX_NBBYTE && status == NFC_OK);
giovannivisentini 0:674813bd5ec9 317 if( status == NFC_OK && DataSize)
giovannivisentini 0:674813bd5ec9 318 status = (*m24srDrv).UpdateBinary ( Offset, (uint8_t)(DataSize) , pData);
giovannivisentini 0:674813bd5ec9 319 }
giovannivisentini 0:674813bd5ec9 320 else
giovannivisentini 0:674813bd5ec9 321 status = (*m24srDrv).UpdateBinary ( Offset, (uint8_t)(DataSize) , pData);
giovannivisentini 0:674813bd5ec9 322
giovannivisentini 0:674813bd5ec9 323 return status;
giovannivisentini 0:674813bd5ec9 324 }
giovannivisentini 0:674813bd5ec9 325
giovannivisentini 0:674813bd5ec9 326 /**
giovannivisentini 0:674813bd5ec9 327 * @brief This fonction activate the need of a password for next read access
giovannivisentini 0:674813bd5ec9 328 * @param pCurrentWritePassword : Write password is needed to have the right to enable Read Password
giovannivisentini 0:674813bd5ec9 329 * @param pNewPassword : The password that will be requiered for next read access
giovannivisentini 0:674813bd5ec9 330 * @retval NFC_OK : Read password is activated
giovannivisentini 0:674813bd5ec9 331 * @retval NFC_ERROR : operation does not complete
giovannivisentini 0:674813bd5ec9 332 */
giovannivisentini 0:674813bd5ec9 333 uint16_t M24SR_EnableReadPassword( uint8_t* pCurrentWritePassword, uint8_t* pNewPassword)
giovannivisentini 0:674813bd5ec9 334 {
giovannivisentini 0:674813bd5ec9 335 uint16_t status = NFC_OK;
giovannivisentini 0:674813bd5ec9 336
giovannivisentini 0:674813bd5ec9 337 if((*m24srDrv).Verify( WRITE_PWD ,0x10 ,pCurrentWritePassword ) == NFC_OK)
giovannivisentini 0:674813bd5ec9 338 {
giovannivisentini 0:674813bd5ec9 339 /* Set new password */
giovannivisentini 0:674813bd5ec9 340 (*m24srDrv).ChangeReferenceData ( READ_PWD, pNewPassword );
giovannivisentini 0:674813bd5ec9 341 (*m24srDrv).EnableVerificationRequirement( READ_PWD );
giovannivisentini 0:674813bd5ec9 342 status = NFC_OK;
giovannivisentini 0:674813bd5ec9 343 }
giovannivisentini 0:674813bd5ec9 344 else
giovannivisentini 0:674813bd5ec9 345 {
giovannivisentini 0:674813bd5ec9 346 /* M24SR already lock but password not known */
giovannivisentini 0:674813bd5ec9 347 status = NFC_ERROR;
giovannivisentini 0:674813bd5ec9 348 }
giovannivisentini 0:674813bd5ec9 349
giovannivisentini 0:674813bd5ec9 350 return status;
giovannivisentini 0:674813bd5ec9 351 }
giovannivisentini 0:674813bd5ec9 352
giovannivisentini 0:674813bd5ec9 353 /**
giovannivisentini 0:674813bd5ec9 354 * @brief This fonction desactivate the need of a password for next read access
giovannivisentini 0:674813bd5ec9 355 * @param pCurrentWritePassword : Write password is needed to have the right to disable Read Password
giovannivisentini 0:674813bd5ec9 356 * @retval NFC_OK : Read password is desactivated
giovannivisentini 0:674813bd5ec9 357 * @retval NFC_ERROR : operation does not complete
giovannivisentini 0:674813bd5ec9 358 */
giovannivisentini 0:674813bd5ec9 359 uint16_t M24SR_DisableReadPassword( uint8_t* pCurrentWritePassword)
giovannivisentini 0:674813bd5ec9 360 {
giovannivisentini 0:674813bd5ec9 361 uint16_t status = NFC_OK;
giovannivisentini 0:674813bd5ec9 362
giovannivisentini 0:674813bd5ec9 363 if((*m24srDrv).Verify( WRITE_PWD ,0x10 ,pCurrentWritePassword ) == NFC_OK)
giovannivisentini 0:674813bd5ec9 364 {
giovannivisentini 0:674813bd5ec9 365 /* Set new password */
giovannivisentini 0:674813bd5ec9 366 (*m24srDrv).DisableVerificationRequirement( READ_PWD );
giovannivisentini 0:674813bd5ec9 367 status = NFC_OK;
giovannivisentini 0:674813bd5ec9 368 }
giovannivisentini 0:674813bd5ec9 369 else
giovannivisentini 0:674813bd5ec9 370 {
giovannivisentini 0:674813bd5ec9 371 /* M24SR already lock but password not known */
giovannivisentini 0:674813bd5ec9 372 status = NFC_ERROR;
giovannivisentini 0:674813bd5ec9 373 }
giovannivisentini 0:674813bd5ec9 374
giovannivisentini 0:674813bd5ec9 375 return status;
giovannivisentini 0:674813bd5ec9 376 }
giovannivisentini 0:674813bd5ec9 377
giovannivisentini 0:674813bd5ec9 378 /**
giovannivisentini 0:674813bd5ec9 379 * @brief This fonction activate the need of a password for next write access
giovannivisentini 0:674813bd5ec9 380 * @param pCurrentWritePassword : Write password must be prensented to have the right to modify write Password
giovannivisentini 0:674813bd5ec9 381 * @param pNewPassword : The password that will be requiered for next write access
giovannivisentini 0:674813bd5ec9 382 * @retval NFC_OK : Write password is activated
giovannivisentini 0:674813bd5ec9 383 * @retval NFC_ERROR : operation does not complete
giovannivisentini 0:674813bd5ec9 384 */
giovannivisentini 0:674813bd5ec9 385 uint16_t M24SR_EnableWritePassword( uint8_t* pCurrentWritePassword, uint8_t* pNewPassword)
giovannivisentini 0:674813bd5ec9 386 {
giovannivisentini 0:674813bd5ec9 387 uint16_t status;
giovannivisentini 0:674813bd5ec9 388
giovannivisentini 0:674813bd5ec9 389 /* check we have the good password */
giovannivisentini 0:674813bd5ec9 390 if ((*m24srDrv).Verify( WRITE_PWD ,0x10 ,pCurrentWritePassword )== NFC_OK)
giovannivisentini 0:674813bd5ec9 391 {
giovannivisentini 0:674813bd5ec9 392 /* Set new password */
giovannivisentini 0:674813bd5ec9 393 (*m24srDrv).ChangeReferenceData ( WRITE_PWD, pNewPassword );
giovannivisentini 0:674813bd5ec9 394 (*m24srDrv).EnableVerificationRequirement( WRITE_PWD );
giovannivisentini 0:674813bd5ec9 395 status = NFC_OK;
giovannivisentini 0:674813bd5ec9 396 }
giovannivisentini 0:674813bd5ec9 397 else /* we don't have the good password */
giovannivisentini 0:674813bd5ec9 398 {
giovannivisentini 0:674813bd5ec9 399 status = NFC_ERROR;
giovannivisentini 0:674813bd5ec9 400 }
giovannivisentini 0:674813bd5ec9 401
giovannivisentini 0:674813bd5ec9 402 return status;
giovannivisentini 0:674813bd5ec9 403 }
giovannivisentini 0:674813bd5ec9 404
giovannivisentini 0:674813bd5ec9 405 /**
giovannivisentini 0:674813bd5ec9 406 * @brief This fonction desactivate the need of a password for next write access
giovannivisentini 0:674813bd5ec9 407 * @param pCurrentWritePassword : Write password must be prensented to have the right to disable it
giovannivisentini 0:674813bd5ec9 408 * @retval NFC_OK : Write password is desactivated
giovannivisentini 0:674813bd5ec9 409 * @retval NFC_ERROR : operation does not complete
giovannivisentini 0:674813bd5ec9 410 */
giovannivisentini 0:674813bd5ec9 411 uint16_t M24SR_DisableWritePassword( uint8_t* pCurrentWritePassword)
giovannivisentini 0:674813bd5ec9 412 {
giovannivisentini 0:674813bd5ec9 413 uint16_t status = NFC_OK;
giovannivisentini 0:674813bd5ec9 414
giovannivisentini 0:674813bd5ec9 415 if((*m24srDrv).Verify( WRITE_PWD ,0x10 ,pCurrentWritePassword ) == NFC_OK)
giovannivisentini 0:674813bd5ec9 416 {
giovannivisentini 0:674813bd5ec9 417 (*m24srDrv).DisableVerificationRequirement( WRITE_PWD );
giovannivisentini 0:674813bd5ec9 418 status = NFC_OK;
giovannivisentini 0:674813bd5ec9 419 }
giovannivisentini 0:674813bd5ec9 420 else
giovannivisentini 0:674813bd5ec9 421 {
giovannivisentini 0:674813bd5ec9 422 /* M24SR already lock but password not known */
giovannivisentini 0:674813bd5ec9 423 status = NFC_ERROR;
giovannivisentini 0:674813bd5ec9 424 }
giovannivisentini 0:674813bd5ec9 425
giovannivisentini 0:674813bd5ec9 426 return status;
giovannivisentini 0:674813bd5ec9 427 }
giovannivisentini 0:674813bd5ec9 428
giovannivisentini 0:674813bd5ec9 429 /**
giovannivisentini 0:674813bd5ec9 430 * @brief This fonction desactivate the need of read and write password for next access
giovannivisentini 0:674813bd5ec9 431 * @param pSuperUserPassword : I2C super user password to overwrite read and write password
giovannivisentini 0:674813bd5ec9 432 * @retval NFC_OK : M24SR access is now free (no password needed)
giovannivisentini 0:674813bd5ec9 433 * @retval NFC_ERROR : operation does not complete
giovannivisentini 0:674813bd5ec9 434 */
giovannivisentini 0:674813bd5ec9 435 uint16_t M24SR_DisableAllPassword( uint8_t* pSuperUserPassword)
giovannivisentini 0:674813bd5ec9 436 {
giovannivisentini 0:674813bd5ec9 437 uint16_t status = NFC_OK;
giovannivisentini 0:674813bd5ec9 438
giovannivisentini 0:674813bd5ec9 439 if((*m24srDrv).Verify( I2C_PWD ,0x10 ,pSuperUserPassword ) == NFC_OK)
giovannivisentini 0:674813bd5ec9 440 {
giovannivisentini 0:674813bd5ec9 441 (*m24srDrv).DisablePermanentState( READ_PWD );
giovannivisentini 0:674813bd5ec9 442 (*m24srDrv).DisablePermanentState( WRITE_PWD );
giovannivisentini 0:674813bd5ec9 443
giovannivisentini 0:674813bd5ec9 444 (*m24srDrv).DisableVerificationRequirement( READ_PWD );
giovannivisentini 0:674813bd5ec9 445 (*m24srDrv).DisableVerificationRequirement( WRITE_PWD );
giovannivisentini 0:674813bd5ec9 446
giovannivisentini 0:674813bd5ec9 447 /* reset password */
giovannivisentini 0:674813bd5ec9 448 (*m24srDrv).ChangeReferenceData ( READ_PWD, pSuperUserPassword );
giovannivisentini 0:674813bd5ec9 449 (*m24srDrv).ChangeReferenceData ( WRITE_PWD, pSuperUserPassword );
giovannivisentini 0:674813bd5ec9 450 status = NFC_OK;
giovannivisentini 0:674813bd5ec9 451 }
giovannivisentini 0:674813bd5ec9 452 else
giovannivisentini 0:674813bd5ec9 453 {
giovannivisentini 0:674813bd5ec9 454 /* M24SR already lock but password not known */
giovannivisentini 0:674813bd5ec9 455 status = NFC_ERROR;
giovannivisentini 0:674813bd5ec9 456 }
giovannivisentini 0:674813bd5ec9 457
giovannivisentini 0:674813bd5ec9 458 return status;
giovannivisentini 0:674813bd5ec9 459 }
giovannivisentini 0:674813bd5ec9 460
giovannivisentini 0:674813bd5ec9 461 /**
giovannivisentini 0:674813bd5ec9 462 * @brief This fonction enable read only mode
giovannivisentini 0:674813bd5ec9 463 * @param pCurrentWritePassword : Write password is needed to have right to enable read only mode
giovannivisentini 0:674813bd5ec9 464 * @retval NFC_OK : M24SR access is now forbidden in write mode
giovannivisentini 0:674813bd5ec9 465 * @retval NFC_ERROR : operation does not complete
giovannivisentini 0:674813bd5ec9 466 */
giovannivisentini 0:674813bd5ec9 467 uint16_t M24SR_EnableReadOnly( uint8_t* pCurrentWritePassword)
giovannivisentini 0:674813bd5ec9 468 {
giovannivisentini 0:674813bd5ec9 469 uint16_t status = NFC_OK;
giovannivisentini 0:674813bd5ec9 470
giovannivisentini 0:674813bd5ec9 471 if((*m24srDrv).Verify( WRITE_PWD ,0x10 ,pCurrentWritePassword ) == NFC_OK)
giovannivisentini 0:674813bd5ec9 472 {
giovannivisentini 0:674813bd5ec9 473 (*m24srDrv).EnablePermanentState( WRITE_PWD ); /* lock write to have read only */
giovannivisentini 0:674813bd5ec9 474 status = NFC_OK;
giovannivisentini 0:674813bd5ec9 475 }
giovannivisentini 0:674813bd5ec9 476 else
giovannivisentini 0:674813bd5ec9 477 {
giovannivisentini 0:674813bd5ec9 478 /* M24SR already lock but password not known */
giovannivisentini 0:674813bd5ec9 479 status = NFC_ERROR;
giovannivisentini 0:674813bd5ec9 480 }
giovannivisentini 0:674813bd5ec9 481
giovannivisentini 0:674813bd5ec9 482 return status;
giovannivisentini 0:674813bd5ec9 483 }
giovannivisentini 0:674813bd5ec9 484
giovannivisentini 0:674813bd5ec9 485 /**
giovannivisentini 0:674813bd5ec9 486 * @brief This fonction disable read only mode
giovannivisentini 0:674813bd5ec9 487 * @param pCurrentWritePassword : Write password is needed to have right to disable read only mode
giovannivisentini 0:674813bd5ec9 488 * @retval NFC_OK : M24SR write access is now allowed
giovannivisentini 0:674813bd5ec9 489 * @retval NFC_ERROR : operation does not complete
giovannivisentini 0:674813bd5ec9 490 */
giovannivisentini 0:674813bd5ec9 491 uint16_t M24SR_DisableReadOnly( uint8_t* pCurrentWritePassword)
giovannivisentini 0:674813bd5ec9 492 {
giovannivisentini 0:674813bd5ec9 493 uint16_t status = NFC_OK;
giovannivisentini 0:674813bd5ec9 494
giovannivisentini 0:674813bd5ec9 495 if((*m24srDrv).Verify( I2C_PWD ,0x10 ,I2CPassword ) == NFC_OK)
giovannivisentini 0:674813bd5ec9 496 {
giovannivisentini 0:674813bd5ec9 497 (*m24srDrv).DisablePermanentState( WRITE_PWD ); /* disable write protection to disable read only mode */
giovannivisentini 0:674813bd5ec9 498 (*m24srDrv).DisableVerificationRequirement( WRITE_PWD );
giovannivisentini 0:674813bd5ec9 499 status = NFC_OK;
giovannivisentini 0:674813bd5ec9 500 }
giovannivisentini 0:674813bd5ec9 501 else
giovannivisentini 0:674813bd5ec9 502 {
giovannivisentini 0:674813bd5ec9 503 /* we don't have the good I2C password nothing to do anymore */
giovannivisentini 0:674813bd5ec9 504 status = NFC_ERROR;
giovannivisentini 0:674813bd5ec9 505 }
giovannivisentini 0:674813bd5ec9 506
giovannivisentini 0:674813bd5ec9 507 return status;
giovannivisentini 0:674813bd5ec9 508 }
giovannivisentini 0:674813bd5ec9 509
giovannivisentini 0:674813bd5ec9 510 /**
giovannivisentini 0:674813bd5ec9 511 * @brief This fonction enable write only mode
giovannivisentini 0:674813bd5ec9 512 * @param pCurrentWritePassword : Write password is needed to have right to enable write only mode
giovannivisentini 0:674813bd5ec9 513 * @retval NFC_OK : M24SR access is now forbidden in read mode
giovannivisentini 0:674813bd5ec9 514 * @retval NFC_ERROR : operation does not complete
giovannivisentini 0:674813bd5ec9 515 */
giovannivisentini 0:674813bd5ec9 516 uint16_t M24SR_EnableWriteOnly( uint8_t* pCurrentWritePassword)
giovannivisentini 0:674813bd5ec9 517 {
giovannivisentini 0:674813bd5ec9 518 uint16_t status = NFC_OK;
giovannivisentini 0:674813bd5ec9 519
giovannivisentini 0:674813bd5ec9 520 if((*m24srDrv).Verify( WRITE_PWD ,0x10 ,pCurrentWritePassword ) == NFC_OK)
giovannivisentini 0:674813bd5ec9 521 {
giovannivisentini 0:674813bd5ec9 522 (*m24srDrv).EnablePermanentState( READ_PWD ); /* disable read access and keep write */
giovannivisentini 0:674813bd5ec9 523 status = NFC_OK;
giovannivisentini 0:674813bd5ec9 524 }
giovannivisentini 0:674813bd5ec9 525 else
giovannivisentini 0:674813bd5ec9 526 {
giovannivisentini 0:674813bd5ec9 527 /* M24SR already lock but password not known */
giovannivisentini 0:674813bd5ec9 528 status = NFC_ERROR;
giovannivisentini 0:674813bd5ec9 529 }
giovannivisentini 0:674813bd5ec9 530
giovannivisentini 0:674813bd5ec9 531 return status;
giovannivisentini 0:674813bd5ec9 532 }
giovannivisentini 0:674813bd5ec9 533
giovannivisentini 0:674813bd5ec9 534 /**
giovannivisentini 0:674813bd5ec9 535 * @brief This fonction disable write only mode
giovannivisentini 0:674813bd5ec9 536 * @param pCurrentWritePassword : Write password is needed to have right to disable write only mode
giovannivisentini 0:674813bd5ec9 537 * @retval NFC_OK : M24SR read access is now allowed
giovannivisentini 0:674813bd5ec9 538 * @retval NFC_ERROR : operation does not complete
giovannivisentini 0:674813bd5ec9 539 */
giovannivisentini 0:674813bd5ec9 540 uint16_t M24SR_DisableWriteOnly( uint8_t* pCurrentWritePassword)
giovannivisentini 0:674813bd5ec9 541 {
giovannivisentini 0:674813bd5ec9 542 uint16_t status = NFC_OK;
giovannivisentini 0:674813bd5ec9 543
giovannivisentini 0:674813bd5ec9 544 if((*m24srDrv).Verify( I2C_PWD ,0x10 ,I2CPassword ) == NFC_OK)
giovannivisentini 0:674813bd5ec9 545 {
giovannivisentini 0:674813bd5ec9 546 (*m24srDrv).DisablePermanentState( READ_PWD ); /* disable write only -> enable write acces */
giovannivisentini 0:674813bd5ec9 547 (*m24srDrv).DisableVerificationRequirement( READ_PWD );
giovannivisentini 0:674813bd5ec9 548 status = NFC_OK;
giovannivisentini 0:674813bd5ec9 549 }
giovannivisentini 0:674813bd5ec9 550 else
giovannivisentini 0:674813bd5ec9 551 {
giovannivisentini 0:674813bd5ec9 552 /* M24SR already lock but password not known */
giovannivisentini 0:674813bd5ec9 553 status = NFC_ERROR;
giovannivisentini 0:674813bd5ec9 554 }
giovannivisentini 0:674813bd5ec9 555
giovannivisentini 0:674813bd5ec9 556 return status;
giovannivisentini 0:674813bd5ec9 557 }
giovannivisentini 0:674813bd5ec9 558
giovannivisentini 0:674813bd5ec9 559 /**
giovannivisentini 0:674813bd5ec9 560 * @brief This function configure GPO purpose for RF session
giovannivisentini 0:674813bd5ec9 561 * @param GPO_config: GPO configuration to set
giovannivisentini 0:674813bd5ec9 562 * @param mode: select RF or I2C, GPO config to update
giovannivisentini 0:674813bd5ec9 563 * @retval Status : Status of the operation.
giovannivisentini 0:674813bd5ec9 564 */
giovannivisentini 0:674813bd5ec9 565 uint16_t M24SR_ManageGPO( uint8_t GPO_config, uint8_t mode)
giovannivisentini 0:674813bd5ec9 566 {
giovannivisentini 0:674813bd5ec9 567 uint16_t status;
giovannivisentini 0:674813bd5ec9 568
giovannivisentini 0:674813bd5ec9 569 if( mode == RF_GPO)
giovannivisentini 0:674813bd5ec9 570 {
giovannivisentini 0:674813bd5ec9 571 status = (*m24srDrv).ManageRFGPO ( GPO_config );
giovannivisentini 0:674813bd5ec9 572 }
giovannivisentini 0:674813bd5ec9 573 else
giovannivisentini 0:674813bd5ec9 574 {
giovannivisentini 0:674813bd5ec9 575 status = (*m24srDrv).ManageI2CGPO (GPO_config );
giovannivisentini 0:674813bd5ec9 576 }
giovannivisentini 0:674813bd5ec9 577 return status;
giovannivisentini 0:674813bd5ec9 578 }
giovannivisentini 0:674813bd5ec9 579
giovannivisentini 0:674813bd5ec9 580 /**
giovannivisentini 0:674813bd5ec9 581 * @}
giovannivisentini 0:674813bd5ec9 582 */
giovannivisentini 0:674813bd5ec9 583
giovannivisentini 0:674813bd5ec9 584 /**
giovannivisentini 0:674813bd5ec9 585 * @}
giovannivisentini 0:674813bd5ec9 586 */
giovannivisentini 0:674813bd5ec9 587
giovannivisentini 0:674813bd5ec9 588 /**
giovannivisentini 0:674813bd5ec9 589 * @}
giovannivisentini 0:674813bd5ec9 590 */
giovannivisentini 0:674813bd5ec9 591
giovannivisentini 0:674813bd5ec9 592 /******************* (C) COPYRIGHT 2013 STMicroelectronics *****END OF FILE****/
giovannivisentini 0:674813bd5ec9 593
giovannivisentini 0:674813bd5ec9 594
giovannivisentini 0:674813bd5ec9 595