ST Expansion SW Team / libNDEF

Dependents:   mbed-os-nfc04a1 Wiagro-Lanza34-XDot

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers lib_NDEF_URI.cpp Source File

lib_NDEF_URI.cpp

00001 /**
00002   ******************************************************************************
00003   * @file    lib_NDEF_URI.c
00004   * @author  MMY Application Team
00005   * @version $Revision: 2702 $
00006   * @date    $Date: 2016-07-13 18:45:05 +0200 (Wed, 13 Jul 2016) $
00007   * @brief   This file help to manage NDEF file that represent URI.
00008   ******************************************************************************
00009   * @attention
00010   *
00011   * <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2>
00012   *
00013   * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License");
00014   * You may not use this file except in compliance with the License.
00015   * You may obtain a copy of the License at:
00016   *
00017   *        http://www.st.com/myliberty  
00018   *
00019   * Unless required by applicable law or agreed to in writing, software 
00020   * distributed under the License is distributed on an "AS IS" BASIS, 
00021   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
00022   * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY,
00023   * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
00024   * See the License for the specific language governing permissions and
00025   * limitations under the License.
00026   *
00027   ******************************************************************************
00028   */
00029 /* Includes ------------------------------------------------------------------*/
00030 #include "lib_NDEF_URI.h"
00031 
00032 /** @addtogroup NFC_libraries
00033   * @{
00034   * @brief  <b>This is the library used to manage the content of the TAG (data)
00035   *          But also the specific feature of the tag, for instance
00036   *          password, gpo... </b>
00037   */
00038 
00039 
00040 /** @addtogroup libNFC_FORUM
00041   * @{
00042   * @brief  This part of the library manage data which follow NFC forum organisation.
00043   */
00044 
00045 /**
00046   * @brief  This buffer contains the data send/received by TAG
00047   */
00048 extern uint8_t NDEF_Buffer [];
00049 
00050 /** @defgroup libURI_Private_Functions
00051   * @{
00052   */
00053 
00054 static void NDEF_Parse_WellKnowType( sRecordInfo_t *pRecordStruct, sURI_Info* pURI );
00055 
00056 /**
00057   * @brief  This function read the URI information and store data in a structure.
00058   * @param  pRecordStruct : Pointer on the record structure.
00059   * @param  pURI : pointer on the structure to fill.
00060   */
00061 static void NDEF_Parse_WellKnowType( sRecordInfo_t *pRecordStruct, sURI_Info* pURI )
00062 {
00063   uint32_t PayloadSize;
00064   uint8_t Offset;
00065   uint8_t* pPayload;
00066 
00067   pPayload = (uint8_t*)(pRecordStruct->PayloadBufferAdd);
00068 
00069   switch( *pPayload )
00070   {
00071     case URI_ID_0x01:
00072       memcpy( pURI->protocol, URI_ID_0x01_STRING, strlen(URI_ID_0x01_STRING) );
00073       Offset = strlen( URI_ID_0x01_STRING );
00074       break;
00075 
00076     case URI_ID_0x02:
00077       memcpy( pURI->protocol, URI_ID_0x02_STRING, strlen(URI_ID_0x02_STRING) );
00078       Offset = strlen( URI_ID_0x02_STRING );
00079       break;
00080     case URI_ID_0x03:
00081       memcpy( pURI->protocol, URI_ID_0x03_STRING, strlen(URI_ID_0x03_STRING) );
00082       Offset = strlen( URI_ID_0x03_STRING );
00083       break;
00084 
00085     case URI_ID_0x04:
00086       memcpy( pURI->protocol, URI_ID_0x04_STRING, strlen(URI_ID_0x04_STRING) );
00087       Offset = strlen( URI_ID_0x04_STRING );
00088       break;
00089 
00090     case URI_ID_0x05:
00091       memcpy( pURI->protocol, URI_ID_0x05_STRING, strlen(URI_ID_0x05_STRING) );
00092       Offset = strlen( URI_ID_0x05_STRING );
00093       break;
00094 
00095     case URI_ID_0x06:
00096       memcpy( pURI->protocol, URI_ID_0x06_STRING, strlen(URI_ID_0x06_STRING) );
00097       Offset = strlen( URI_ID_0x06_STRING );
00098       break;
00099 
00100     case URI_ID_0x07:
00101       memcpy( pURI->protocol, URI_ID_0x07_STRING, strlen(URI_ID_0x07_STRING) );
00102       Offset = strlen( URI_ID_0x07_STRING );
00103       break;
00104 
00105     case URI_ID_0x08:
00106       memcpy( pURI->protocol, URI_ID_0x08_STRING, strlen(URI_ID_0x08_STRING) );
00107       Offset = strlen( URI_ID_0x08_STRING );
00108       break;
00109 
00110     case URI_ID_0x09:
00111       memcpy( pURI->protocol, URI_ID_0x09_STRING, strlen(URI_ID_0x09_STRING) );
00112       Offset = strlen( URI_ID_0x09_STRING );
00113       break;
00114 
00115     case URI_ID_0x0A:
00116       memcpy( pURI->protocol, URI_ID_0x0A_STRING, strlen(URI_ID_0x0A_STRING) );
00117       Offset = strlen( URI_ID_0x0A_STRING );
00118       break;
00119 
00120     case URI_ID_0x0B:
00121       memcpy( pURI->protocol, URI_ID_0x0B_STRING, strlen(URI_ID_0x0B_STRING) );
00122       Offset = strlen( URI_ID_0x0B_STRING );
00123       break;
00124 
00125     case URI_ID_0x0C:
00126       memcpy( pURI->protocol, URI_ID_0x0C_STRING, strlen(URI_ID_0x0C_STRING) );
00127       Offset = strlen( URI_ID_0x0C_STRING );
00128       break;
00129 
00130     case URI_ID_0x0D:
00131       memcpy( pURI->protocol, URI_ID_0x0D_STRING, strlen(URI_ID_0x0D_STRING) );
00132       Offset = strlen( URI_ID_0x0D_STRING );
00133       break;
00134 
00135     case URI_ID_0x0E:
00136       memcpy( pURI->protocol, URI_ID_0x0E_STRING, strlen(URI_ID_0x0E_STRING) );
00137       Offset = strlen( URI_ID_0x0E_STRING );
00138       break;
00139 
00140     case URI_ID_0x0F:
00141       memcpy( pURI->protocol, URI_ID_0x0F_STRING, strlen(URI_ID_0x0F_STRING) );
00142       Offset = strlen( URI_ID_0x0F_STRING );
00143       break;
00144 
00145     case URI_ID_0x10:
00146       memcpy( pURI->protocol, URI_ID_0x10_STRING, strlen(URI_ID_0x10_STRING) );
00147       Offset = strlen( URI_ID_0x10_STRING );
00148       break;
00149 
00150     case URI_ID_0x11:
00151       memcpy( pURI->protocol, URI_ID_0x11_STRING, strlen(URI_ID_0x11_STRING) );
00152       Offset = strlen( URI_ID_0x11_STRING );
00153       break;
00154 
00155     case URI_ID_0x12:
00156       memcpy( pURI->protocol, URI_ID_0x12_STRING, strlen(URI_ID_0x12_STRING) );
00157       Offset = strlen( URI_ID_0x12_STRING );
00158       break;
00159 
00160     case URI_ID_0x13:
00161       memcpy( pURI->protocol, URI_ID_0x13_STRING, strlen(URI_ID_0x13_STRING) );
00162       Offset = strlen( URI_ID_0x13_STRING );
00163       break;
00164 
00165     case URI_ID_0x14:
00166       memcpy( pURI->protocol, URI_ID_0x14_STRING, strlen(URI_ID_0x14_STRING) );
00167       Offset = strlen( URI_ID_0x14_STRING );
00168       break;
00169 
00170     case URI_ID_0x15:
00171       memcpy( pURI->protocol, URI_ID_0x15_STRING, strlen(URI_ID_0x15_STRING) );
00172       Offset = strlen( URI_ID_0x15_STRING );
00173       break;
00174 
00175     case URI_ID_0x16:
00176       memcpy( pURI->protocol, URI_ID_0x16_STRING, strlen(URI_ID_0x16_STRING) );
00177       Offset = strlen( URI_ID_0x16_STRING );
00178       break;
00179 
00180     case URI_ID_0x17:
00181       memcpy( pURI->protocol, URI_ID_0x17_STRING, strlen(URI_ID_0x17_STRING) );
00182       Offset = strlen( URI_ID_0x17_STRING );
00183       break;
00184 
00185     case URI_ID_0x18:
00186       memcpy( pURI->protocol, URI_ID_0x18_STRING, strlen(URI_ID_0x18_STRING) );
00187       Offset = strlen( URI_ID_0x18_STRING );
00188       break;
00189 
00190     case URI_ID_0x19:
00191       memcpy( pURI->protocol, URI_ID_0x19_STRING, strlen(URI_ID_0x19_STRING) );
00192       Offset = strlen( URI_ID_0x19_STRING );
00193       break;
00194 
00195     case URI_ID_0x1A:
00196       memcpy( pURI->protocol, URI_ID_0x1A_STRING, strlen(URI_ID_0x1A_STRING) );
00197       Offset = strlen( URI_ID_0x1A_STRING );
00198       break;
00199 
00200     case URI_ID_0x1B:
00201       memcpy( pURI->protocol, URI_ID_0x1B_STRING, strlen(URI_ID_0x1B_STRING) );
00202       Offset = strlen( URI_ID_0x1B_STRING );
00203       break;
00204 
00205     case URI_ID_0x1C:
00206       memcpy( pURI->protocol, URI_ID_0x1C_STRING, strlen(URI_ID_0x1C_STRING) );
00207       Offset = strlen( URI_ID_0x1C_STRING );
00208       break;
00209 
00210     case URI_ID_0x1D:
00211       memcpy( pURI->protocol, URI_ID_0x1D_STRING, strlen(URI_ID_0x1D_STRING) );
00212       Offset = strlen( URI_ID_0x1D_STRING );
00213       break;
00214 
00215     case URI_ID_0x1E:
00216       memcpy( pURI->protocol, URI_ID_0x1E_STRING, strlen(URI_ID_0x1E_STRING) );
00217       Offset = strlen( URI_ID_0x1E_STRING );
00218       break;
00219 
00220     case URI_ID_0x1F:
00221       memcpy( pURI->protocol, URI_ID_0x1F_STRING, strlen(URI_ID_0x1F_STRING) );
00222       Offset = strlen( URI_ID_0x1F_STRING );
00223       break;
00224 
00225     case URI_ID_0x20:
00226       memcpy( pURI->protocol, URI_ID_0x20_STRING, strlen(URI_ID_0x20_STRING) );
00227       Offset = strlen( URI_ID_0x20_STRING );
00228       break;
00229 
00230     case URI_ID_0x21:
00231       memcpy( pURI->protocol, URI_ID_0x21_STRING, strlen(URI_ID_0x21_STRING) );
00232       Offset = strlen( URI_ID_0x21_STRING );
00233       break;
00234 
00235     case URI_ID_0x22:
00236       memcpy( pURI->protocol, URI_ID_0x22_STRING, strlen(URI_ID_0x22_STRING) );
00237       Offset = strlen( URI_ID_0x22_STRING );
00238       break;
00239 
00240     case URI_ID_0x23:
00241       memcpy( pURI->protocol, URI_ID_0x23_STRING, strlen(URI_ID_0x23_STRING) );
00242       Offset = strlen( URI_ID_0x23_STRING );
00243       break;
00244     default:
00245       Offset = 0;
00246       /* Should not happened */
00247       break;
00248   }
00249   /* add end of string character */
00250   pURI->protocol[Offset] = '\0';
00251 
00252   pPayload++; /* go after well know byte */
00253 
00254   PayloadSize = pRecordStruct->PayloadLength;
00255 
00256   PayloadSize = PayloadSize - 1; /* remove well know byte */
00257 
00258   memcpy( pURI->URI_Message, pPayload, PayloadSize );
00259   /* add end of string character */
00260   pURI->URI_Message[PayloadSize] = '\0';
00261 
00262 }
00263 
00264 /**
00265   * @}
00266   */
00267 
00268 /** @defgroup libURI_Public_Functions
00269   * @{
00270   * @brief  This file is used to manage URI (stored or loaded in tag)
00271   */ 
00272 
00273 /**
00274   * @brief  This function read NDEF and retrieve URI information if any.
00275   * @param  pRecordStruct : Pointer on the record structure.
00276   * @param  pURI : pointer on the structure to fill.
00277   * @retval NDEF_OK : URI information from NDEF have been retrieved.
00278   * @retval NDEF_ERROR : Not able to retrieve URI information.
00279   */
00280 uint16_t NDEF_ReadURI( sRecordInfo_t *pRecordStruct, sURI_Info *pURI )
00281 {
00282   uint16_t status = NDEF_ERROR;
00283   sRecordInfo_t *pSPRecordStruct;
00284   uint32_t PayloadSize, RecordPosition;
00285   uint8_t* pData;
00286 
00287   if( pRecordStruct->NDEF_Type == WELL_KNOWN_ABRIDGED_URI_TYPE )
00288   {
00289     NDEF_Parse_WellKnowType( pRecordStruct, pURI );
00290     status = NDEF_OK;
00291   }
00292   else if( pRecordStruct->NDEF_Type == SMARTPOSTER_TYPE )
00293   {
00294     for( RecordPosition = 0; RecordPosition < pRecordStruct->NbOfRecordInSPPayload; RecordPosition++ )
00295     {
00296       pSPRecordStruct = pRecordStruct->SPRecordStructAdd[RecordPosition];
00297       if( pSPRecordStruct->NDEF_Type == WELL_KNOWN_ABRIDGED_URI_TYPE )
00298       {
00299         NDEF_Parse_WellKnowType( pSPRecordStruct, pURI );
00300         status = NDEF_OK;
00301       }
00302       if( pSPRecordStruct->NDEF_Type == TEXT_TYPE )
00303       {
00304         PayloadSize = pSPRecordStruct->PayloadLength;
00305 
00306         /* The instruction content the UTF-8 language code that is not used here */
00307         pData = (uint8_t*)pSPRecordStruct->PayloadBufferAdd;
00308         PayloadSize -= *pData + 1; /* remove not usefull data */
00309         pData += *pData + 1;
00310 
00311         memcpy( pURI->Information, pData, PayloadSize );
00312       }
00313     }
00314   }
00315   else 
00316   {
00317     status = NDEF_ERROR;
00318   }
00319 
00320   return status;
00321 }
00322 
00323 /**
00324   * @brief  This function prepare the NDEF message with the URI data given in the structure.
00325   * @param  pURI : pointer on structure that contain the URI information.
00326   * @param  pNDEFMessage : pointer on the NDEF message.
00327   * @param  size : to store the size of the NDEF message generated.
00328   */
00329 void NDEF_PrepareURIMessage( sURI_Info *pURI, uint8_t *pNDEFMessage, uint16_t *size )
00330 {
00331   uint32_t uriSize, totalSize, Offset = 0;
00332   uint32_t infoSize = 0;
00333   char type;
00334 
00335   /* An URI can be included in a smart poster to add text to give instruction to user for instance */
00336 
00337   /* URI (smart poster) Record Header */
00338 /************************************/
00339 /*  7 |  6 |  5 |  4 |  3 | 2  1  0 */
00340 /*----------------------------------*/
00341 /* MB   ME   CF   SR   IL    TNF    */  /* <---- CF=0, IL=0 and SR=1 TNF=1 NFC Forum Well-known type*/
00342 /*----------------------------------*/
00343 /*          TYPE LENGTH             */
00344 /*----------------------------------*/
00345 /*        PAYLOAD LENGTH 3          */  /* <---- Used only if SR=0 */
00346 /*----------------------------------*/
00347 /*        PAYLOAD LENGTH 2          */  /* <---- Used only if SR=0 */
00348 /*----------------------------------*/
00349 /*        PAYLOAD LENGTH 1          */  /* <---- Used only if SR=0 */
00350 /*----------------------------------*/
00351 /*        PAYLOAD LENGTH 0          */
00352 /*----------------------------------*/
00353 /*          ID LENGTH               */  /* <---- Not Used  */
00354 /*----------------------------------*/
00355 /*              TYPE                */
00356 /*----------------------------------*/
00357 /*               ID                 */  /* <---- Not Used  */
00358 /************************************/
00359 
00360   /* We need to know the URI type in order to define if an abreviation is available */
00361   type = getUriType( pURI->protocol );
00362 
00363   /* URI : 1+URI for abreviate protocol*/
00364   if( type != URI_ID_0x00 )
00365     uriSize = 1 + strlen(pURI->URI_Message);
00366   else /*: 1+protocol+URI else*/
00367     uriSize = 1 + strlen(pURI->protocol) + strlen(pURI->URI_Message);
00368 
00369   /* Check if a Smart poster is needed */
00370   if( pURI->Information[0] != '\0' )
00371   {
00372     /* Info : 1+2+info */
00373     infoSize = 1 + ISO_ENGLISH_CODE_STRING_LENGTH + strlen(pURI->Information);
00374     /* Total */
00375     totalSize = 4 + uriSize + 4 + infoSize;
00376     if( uriSize > 255 ) totalSize += 3;   /* Normal URI size */
00377     if( infoSize > 255 ) totalSize += 3;  /* Normal Info size */
00378 
00379     /* SmartPoster header */
00380     if( totalSize > 255 )
00381     {
00382       pNDEFMessage[Offset++] = 0xC1;
00383       pNDEFMessage[Offset++] = SMART_POSTER_TYPE_STRING_LENGTH;
00384       pNDEFMessage[Offset++] = (totalSize & 0xFF000000) >> 24;
00385       pNDEFMessage[Offset++] = (totalSize & 0x00FF0000) >> 16;
00386       pNDEFMessage[Offset++] = (totalSize & 0x0000FF00) >> 8;
00387       pNDEFMessage[Offset++] = totalSize & 0x000000FF;
00388     }
00389     else
00390     {
00391       pNDEFMessage[Offset++] = 0xD1;
00392       pNDEFMessage[Offset++] = SMART_POSTER_TYPE_STRING_LENGTH;
00393       pNDEFMessage[Offset++] = (uint8_t)totalSize;
00394     }
00395     memcpy( &pNDEFMessage[Offset], SMART_POSTER_TYPE_STRING, SMART_POSTER_TYPE_STRING_LENGTH );
00396     Offset += SMART_POSTER_TYPE_STRING_LENGTH;
00397   }
00398 
00399   /* URI header */
00400   pNDEFMessage[Offset] = 0x81;
00401   if( uriSize < 256 ) pNDEFMessage[Offset] |= 0x10;                      // Set the SR bit
00402   if( pURI->Information[0] == '\0' ) pNDEFMessage[Offset] |= 0x40;       // Set the ME bit
00403   Offset++;
00404 
00405   pNDEFMessage[Offset++] = URI_TYPE_STRING_LENGTH;
00406   if( uriSize > 255 )
00407   {
00408     pNDEFMessage[Offset++] = (uriSize & 0xFF000000) >> 24;
00409     pNDEFMessage[Offset++] = (uriSize & 0x00FF0000) >> 16;
00410     pNDEFMessage[Offset++] = (uriSize & 0x0000FF00) >> 8;
00411     pNDEFMessage[Offset++] = uriSize & 0x000000FF;
00412   }
00413   else
00414   {
00415     pNDEFMessage[Offset++] = (uint8_t)uriSize;
00416   }
00417   memcpy( &pNDEFMessage[Offset], URI_TYPE_STRING, URI_TYPE_STRING_LENGTH );
00418   Offset += URI_TYPE_STRING_LENGTH;
00419 
00420   pNDEFMessage[Offset++] = type;
00421   if( type == URI_ID_0x00 ) // No abreviation
00422   {
00423     memcpy( &pNDEFMessage[Offset], pURI->protocol, strlen(pURI->protocol) );
00424     Offset += strlen(pURI->protocol);
00425   }
00426 
00427   memcpy( &pNDEFMessage[Offset], pURI->URI_Message, strlen(pURI->URI_Message) );
00428   Offset += strlen(pURI->URI_Message);
00429 
00430   /* Information header */
00431   if( pURI->Information[0] != '\0' )
00432   {
00433     if( infoSize > 255 )
00434     {
00435       pNDEFMessage[Offset++] = 0x41;
00436       pNDEFMessage[Offset++] = TEXT_TYPE_STRING_LENGTH;
00437       pNDEFMessage[Offset++] = (infoSize & 0xFF000000) >> 24;
00438       pNDEFMessage[Offset++] = (infoSize & 0x00FF0000) >> 16;
00439       pNDEFMessage[Offset++] = (infoSize & 0x0000FF00) >> 8;
00440       pNDEFMessage[Offset++] = infoSize & 0x000000FF;
00441     }
00442     else
00443     {
00444       pNDEFMessage[Offset++] = 0x51;
00445       pNDEFMessage[Offset++] = TEXT_TYPE_STRING_LENGTH;
00446       pNDEFMessage[Offset++] = (uint8_t)infoSize;
00447     }
00448 
00449     memcpy( &pNDEFMessage[Offset], TEXT_TYPE_STRING, TEXT_TYPE_STRING_LENGTH );
00450     Offset+=TEXT_TYPE_STRING_LENGTH;
00451     pNDEFMessage[Offset++] = ISO_ENGLISH_CODE_STRING_LENGTH; /* UTF-8 with x byte language code */
00452     memcpy( &pNDEFMessage[Offset], ISO_ENGLISH_CODE_STRING, ISO_ENGLISH_CODE_STRING_LENGTH );
00453     Offset += ISO_ENGLISH_CODE_STRING_LENGTH;
00454 
00455     /* Information payload */
00456     memcpy( &pNDEFMessage[Offset], pURI->Information, strlen(pURI->Information) );
00457     Offset += strlen(pURI->Information);
00458   }
00459 
00460   *size = Offset;
00461 
00462 }
00463 /**
00464   * @brief  This function write the NDEF file with the URI data given in the structure.
00465   * @param  pURI : pointer on structure that contain the URI information.
00466   * @retval NDEF_OK : NDEF file data written in the tag.
00467   * @retval NDEF_ERROR : not able to store NDEF in tag.
00468   * @retval NDEF_ERROR_MEMORY_INTERNAL : Cannot write to tag.
00469   * @retval NDEF_ERROR_NOT_FORMATED : CCFile data not supported or not present.
00470   * @retval NDEF_ERROR_MEMORY_TAG : Size not compatible with memory.
00471   * @retval NDEF_ERROR_LOCKED : Tag locked, cannot be write.
00472   */
00473 uint16_t NDEF_WriteURI( sURI_Info *pURI, I2C* mi2cChannel )
00474 {
00475   uint16_t status = NDEF_ERROR, Offset = 0;
00476 
00477   NDEF_PrepareURIMessage( pURI, NDEF_Buffer, &Offset );
00478 
00479 
00480   status = NfcTag_WriteNDEF( Offset , NDEF_Buffer, mi2cChannel );
00481 
00482   return status;
00483 }
00484 
00485 char getUriType( char *protocol )
00486 {
00487   if( !memcmp( protocol, URI_ID_0x01_STRING, strlen(URI_ID_0x01_STRING) ) ) return URI_ID_0x01;
00488   else if( !memcmp( protocol, URI_ID_0x02_STRING, strlen(URI_ID_0x02_STRING) ) ) return URI_ID_0x02;
00489   else if( !memcmp( protocol, URI_ID_0x03_STRING, strlen(URI_ID_0x03_STRING) ) ) return URI_ID_0x03;
00490   else if( !memcmp( protocol, URI_ID_0x04_STRING, strlen(URI_ID_0x04_STRING) ) ) return URI_ID_0x04;
00491   else if( !memcmp( protocol, URI_ID_0x05_STRING, strlen(URI_ID_0x05_STRING) ) ) return URI_ID_0x05;
00492   else if( !memcmp( protocol, URI_ID_0x06_STRING, strlen(URI_ID_0x06_STRING) ) ) return URI_ID_0x06;
00493   else if( !memcmp( protocol, URI_ID_0x07_STRING, strlen(URI_ID_0x07_STRING) ) ) return URI_ID_0x07;
00494   else if( !memcmp( protocol, URI_ID_0x08_STRING, strlen(URI_ID_0x08_STRING) ) ) return URI_ID_0x08;
00495   else if( !memcmp( protocol, URI_ID_0x09_STRING, strlen(URI_ID_0x09_STRING) ) ) return URI_ID_0x09;
00496   else if( !memcmp( protocol, URI_ID_0x0A_STRING, strlen(URI_ID_0x0A_STRING) ) ) return URI_ID_0x0A;
00497   else if( !memcmp( protocol, URI_ID_0x0B_STRING, strlen(URI_ID_0x0B_STRING) ) ) return URI_ID_0x0B;
00498   else if( !memcmp( protocol, URI_ID_0x0C_STRING, strlen(URI_ID_0x0C_STRING) ) ) return URI_ID_0x0C;
00499   else if( !memcmp( protocol, URI_ID_0x0D_STRING, strlen(URI_ID_0x0D_STRING) ) ) return URI_ID_0x0D;
00500   else if( !memcmp( protocol, URI_ID_0x0E_STRING, strlen(URI_ID_0x0E_STRING) ) ) return URI_ID_0x0E;
00501   else if( !memcmp( protocol, URI_ID_0x0F_STRING, strlen(URI_ID_0x0F_STRING) ) ) return URI_ID_0x0F;
00502   else if( !memcmp( protocol, URI_ID_0x10_STRING, strlen(URI_ID_0x10_STRING) ) ) return URI_ID_0x10;
00503   else if( !memcmp( protocol, URI_ID_0x11_STRING, strlen(URI_ID_0x11_STRING) ) ) return URI_ID_0x11;
00504   else if( !memcmp( protocol, URI_ID_0x12_STRING, strlen(URI_ID_0x12_STRING) ) ) return URI_ID_0x12;
00505   else if( !memcmp( protocol, URI_ID_0x13_STRING, strlen(URI_ID_0x13_STRING) ) ) return URI_ID_0x13;
00506   else if( !memcmp( protocol, URI_ID_0x14_STRING, strlen(URI_ID_0x14_STRING) ) ) return URI_ID_0x14;
00507   else if( !memcmp( protocol, URI_ID_0x15_STRING, strlen(URI_ID_0x15_STRING) ) ) return URI_ID_0x15;
00508   else if( !memcmp( protocol, URI_ID_0x16_STRING, strlen(URI_ID_0x16_STRING) ) ) return URI_ID_0x16;
00509   else if( !memcmp( protocol, URI_ID_0x17_STRING, strlen(URI_ID_0x17_STRING) ) ) return URI_ID_0x17;
00510   else if( !memcmp( protocol, URI_ID_0x18_STRING, strlen(URI_ID_0x18_STRING) ) ) return URI_ID_0x18;
00511   else if( !memcmp( protocol, URI_ID_0x19_STRING, strlen(URI_ID_0x19_STRING) ) ) return URI_ID_0x19;
00512   else if( !memcmp( protocol, URI_ID_0x1A_STRING, strlen(URI_ID_0x1A_STRING) ) ) return URI_ID_0x1A;
00513   else if( !memcmp( protocol, URI_ID_0x1B_STRING, strlen(URI_ID_0x1B_STRING) ) ) return URI_ID_0x1B;
00514   else if( !memcmp( protocol, URI_ID_0x1C_STRING, strlen(URI_ID_0x1C_STRING) ) ) return URI_ID_0x1C;
00515   else if( !memcmp( protocol, URI_ID_0x1D_STRING, strlen(URI_ID_0x1D_STRING) ) ) return URI_ID_0x1D;
00516   else if( !memcmp( protocol, URI_ID_0x1E_STRING, strlen(URI_ID_0x1E_STRING) ) ) return URI_ID_0x1E;
00517   else if( !memcmp( protocol, URI_ID_0x1F_STRING, strlen(URI_ID_0x1F_STRING) ) ) return URI_ID_0x1F;
00518   else if( !memcmp( protocol, URI_ID_0x20_STRING, strlen(URI_ID_0x20_STRING) ) ) return URI_ID_0x20;
00519   else if( !memcmp( protocol, URI_ID_0x21_STRING, strlen(URI_ID_0x21_STRING) ) ) return URI_ID_0x21;
00520   else if( !memcmp( protocol, URI_ID_0x22_STRING, strlen(URI_ID_0x22_STRING) ) ) return URI_ID_0x22;
00521   else if( !memcmp( protocol, URI_ID_0x23_STRING, strlen(URI_ID_0x23_STRING) ) ) return URI_ID_0x23;
00522   else return URI_ID_0x00; // No abreviation for this protocol  
00523 }
00524 
00525 
00526 /**
00527   * @}
00528   */
00529 
00530 /**
00531   * @}
00532   */
00533 
00534 /**
00535   * @}
00536   */
00537 
00538 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/