11ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/* 21ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * Copyright (C) 2010-2014 NXP Semiconductors 31ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * 41ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * Licensed under the Apache License, Version 2.0 (the "License"); 51ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * you may not use this file except in compliance with the License. 61ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * You may obtain a copy of the License at 71ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * 81ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * http://www.apache.org/licenses/LICENSE-2.0 91ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * 101ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * Unless required by applicable law or agreed to in writing, software 111ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * distributed under the License is distributed on an "AS IS" BASIS, 121ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * See the License for the specific language governing permissions and 141ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * limitations under the License. 151ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao */ 161ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 171ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/* 181ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * Download Component 191ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * Download Utility routines implementation 201ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao */ 211ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 221ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao#include <phDnldNfc_Utils.h> 231ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao#include <phNxpLog.h> 241ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic uint16_t const aCrcTab[256] = { 266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0}; 551ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 561ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/******************************************************************************* 571ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 581ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Function phDnldNfc_CalcCrc16 591ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 601ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Description Calculates CRC16 for the frame buffer 611ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 621ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Parameters pBuff - CRC16 calculation input buffer 631ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** wLen - input buffer length 641ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 651ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Returns wCrc - computed 2 byte CRC16 value 661ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 671ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao*******************************************************************************/ 686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint16_t phDnldNfc_CalcCrc16(uint8_t* pBuff, uint16_t wLen) { 696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t wTmp; 706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t wValue; 716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t wCrc = 0xffff; 726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t i; 731ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((NULL == pBuff) || (0 == wLen)) { 756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NXPLOG_FWDNLD_W("Invalid Params supplied!!"); 766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Perform CRC calculation according to ccitt with a initial value of 0x1d0f 786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi */ 796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (i = 0; i < wLen; i++) { 806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi wValue = 0x00ffU & (uint16_t)pBuff[i]; 816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi wTmp = (wCrc >> 8U) ^ wValue; 826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi wCrc = (wCrc << 8U) ^ aCrcTab[wTmp]; 831ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao } 846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 851ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return wCrc; 871ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao} 88