1e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna/****************************************************************************** 2e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * 3e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * Copyright (C) 2015 NXP Semiconductors 4e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * 5e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * Licensed under the Apache License, Version 2.0 (the "License"); 6e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * you may not use this file except in compliance with the License. 7e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * You may obtain a copy of the License at 8e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * 9e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * http://www.apache.org/licenses/LICENSE-2.0 10e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * 11e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * Unless required by applicable law or agreed to in writing, software 12e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * distributed under the License is distributed on an "AS IS" BASIS, 13e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * See the License for the specific language governing permissions and 15e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * limitations under the License. 16e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna * 17e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna ******************************************************************************/ 18e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna#define LOG_TAG "NxpHal" 19e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna#include "NxpNfcCapability.h" 20e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna#include <phNxpLog.h> 21e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna 22e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khannacapability* capability::instance = NULL; 23e09f8fe52be454b80a1ef33744ca665ce95101d9Love KhannatNFC_chipType capability::chipType = pn81T; 24e09f8fe52be454b80a1ef33744ca665ce95101d9Love KhannatNfc_featureList nfcFL; 25e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna 26e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khannacapability::capability() {} 27e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna 28e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khannacapability* capability::getInstance() { 29e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna if (NULL == instance) { 30e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna instance = new capability(); 31e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna } 32e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna return instance; 33e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna} 34e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna 35b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniahtNFC_chipType capability::getChipType(uint8_t* msg, uint16_t msg_len) { 36e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna if ((msg != NULL) && (msg_len != 0)) { 37b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah uint16_t offsetHwVersion = 0; 38b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah uint16_t offsetFwVersion = 0; 39b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah 40b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah if (msg[0] == 0x60 && msg[1] == 0x00) { 41b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah /*CORE_RST_NTF*/ 42b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah offsetHwVersion = offsetRstHwVersion; 43b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah offsetFwVersion = offsetRstFwVersion; 44e5c26a2869c7c522846dfd576ea995071e1f18c9Jizhou Liao } else if (msg[0] == 0x40 && msg[1] == 0x01) { 45b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah /*CORE_INIT_RSP*/ 46b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah offsetHwVersion = offsetInitHwVersion; 47b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah offsetFwVersion = offsetInitFwVersion; 48b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah } else if (msg[0] == 0x00 && msg[1] == 0x0A) { 49b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah /*Propreitary Response*/ 50b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah offsetHwVersion = offsetPropHwVersion; 51b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah offsetFwVersion = offsetPropFwVersion; 52e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna } 53e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna 54b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah if ((offsetHwVersion > 0) && (offsetHwVersion < msg_len)) { 55e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna ALOGD("%s HwVersion : 0x%02x", __func__, msg[offsetHwVersion]); 56e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna switch (msg[offsetHwVersion]) { 57e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna case 0x40: // PN553 A0 58e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna case 0x41: // PN553 B0 59e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna // NQ310 60e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna chipType = pn553; 61e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna break; 62e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna 63e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna case 0x50: // PN553 A0 + P73 64e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna case 0x51: // PN553 B0 + P73 , NQ440 65b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah // NQ330 66b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah // PN80T 67b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah // PN81T 68b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah if (msg[offsetFwVersion] == 0x12) { 69b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah chipType = pn81T; 70b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah } else { 71b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah chipType = pn80T; 72b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah } 73b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah break; 74b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah 75b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah case 0x61: 76b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah if (msg[offsetFwVersion] == 0x11) { 77b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah chipType = pn553; 78b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah } 79e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna break; 80e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna 81e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna case 0x98: 82e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna chipType = pn551; 83e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna break; 84e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna 85e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna case 0xA8: 86e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna case 0x08: 87e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna chipType = pn67T; 88e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna break; 89e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna 90e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna case 0x28: 91e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna case 0x48: // NQ210 92e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna chipType = pn548C2; 93e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna break; 94e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna 95e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna case 0x18: 96e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna case 0x58: // NQ220 97e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna chipType = pn66T; 98e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna break; 99e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna 100e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna default: 101e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna chipType = pn80T; 102e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna } 103e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna } else { 104b1a2fd7c86a343be909e9799dd60d73be075ab5canil.hiranniah ALOGD("%s Wrong msg_len. Setting Default ChiptType pn81T", __func__); 105e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna chipType = pn81T; 106e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna } 107e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna } 108e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna ALOGD("%s Product : %s", __func__, product[chipType]); 109e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna return chipType; 110e09f8fe52be454b80a1ef33744ca665ce95101d9Love Khanna} 111