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