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