[SINGLE BINARY] : Force NCI2.0 logic
diff --git a/halimpl/pn54x/configs/NxpNfcCapability.cpp b/halimpl/pn54x/configs/NxpNfcCapability.cpp
index 0e36424..0bcc876 100644
--- a/halimpl/pn54x/configs/NxpNfcCapability.cpp
+++ b/halimpl/pn54x/configs/NxpNfcCapability.cpp
@@ -31,47 +31,50 @@
}
tNFC_chipType capability::processChipType(uint8_t* msg, uint16_t msg_len) {
- if(msg[0] == 0x60 && msg[1] == 00) {
- chipType = pn81T;
- }
- else if(offsetHwVersion < msg_len) {
- ALOGD ("%s HwVersion : 0x%02x", __func__,msg[offsetHwVersion]);
- switch(msg[offsetHwVersion]){
+ if((msg != NULL) && (msg_len != 0)) {
+ if((msg[0] == 0x60 && msg[1] == 00) ||
+ ((offsetFwVersion < msg_len) && (msg[offsetFwVersion] == 0x12))) {
+ chipType = pn81T;
+ }
+ else if(offsetHwVersion < msg_len) {
+ ALOGD ("%s HwVersion : 0x%02x", __func__,msg[offsetHwVersion]);
+ switch(msg[offsetHwVersion]){
- case 0x40 : //PN553 A0
- case 0x41 : //PN553 B0
- chipType = pn553;
- break;
+ case 0x40 : //PN553 A0
+ case 0x41 : //PN553 B0
+ chipType = pn553;
+ break;
- case 0x50 : //PN553 A0 + P73
- case 0x51 : //PN553 B0 + P73
- chipType = pn80T;
- break;
+ case 0x50 : //PN553 A0 + P73
+ case 0x51 : //PN553 B0 + P73
+ chipType = pn80T;
+ break;
- case 0x98 :
- chipType = pn551;
- break;
+ case 0x98 :
+ chipType = pn551;
+ break;
- case 0xA8 :
- chipType = pn67T;
- break;
+ case 0xA8 :
+ chipType = pn67T;
+ break;
- case 0x28 :
- chipType = pn548C2;
- break;
+ case 0x28 :
+ chipType = pn548C2;
+ break;
- case 0x18 :
- chipType = pn66T;
- break;
+ case 0x18 :
+ chipType = pn66T;
+ break;
- default :
+ default :
+ chipType = pn80T;
+ }
+ }
+ else {
+ ALOGD ("%s Wrong msg_len. Setting Default ChiptType pn80T",__func__);
chipType = pn80T;
}
}
- else {
- ALOGD ("%s Wrong msg_len. Setting Default ChiptType pn80T",__func__);
- chipType = pn80T;
- }
return chipType;
}
diff --git a/halimpl/pn54x/configs/NxpNfcCapability.h b/halimpl/pn54x/configs/NxpNfcCapability.h
index fd6b398..538a9c8 100644
--- a/halimpl/pn54x/configs/NxpNfcCapability.h
+++ b/halimpl/pn54x/configs/NxpNfcCapability.h
@@ -55,6 +55,7 @@
private:
static capability* instance;
const uint16_t offsetHwVersion = 24;
+ const uint16_t offsetFwVersion = 25;
capability();
public:
static tNFC_chipType chipType;
diff --git a/halimpl/pn54x/hal/phNxpNciHal.c b/halimpl/pn54x/hal/phNxpNciHal.c
index 7036a1e..006cdff 100644
--- a/halimpl/pn54x/hal/phNxpNciHal.c
+++ b/halimpl/pn54x/hal/phNxpNciHal.c
@@ -779,10 +779,20 @@
status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
} else {
status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci), cmd_init_nci);
+ if(status == NFCSTATUS_SUCCESS && (nfcFL.chipType == pn557)) {
+ NXPLOG_NCIHAL_E("Chip is in NCI1.0 mode reset the chip to 2.0 mode");
+ status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
+ if(status == NFCSTATUS_SUCCESS) {
+ status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
+ if(status == NFCSTATUS_SUCCESS) {
+ goto init_retry;
+ }
+ }
+ }
}
if (status != NFCSTATUS_SUCCESS) {
- NXPLOG_NCIHAL_E("NCI_CORE_INIT : Failed");
+ NXPLOG_NCIHAL_E("COMMAND Failed");
if (init_retry_cnt < 3) {
init_retry_cnt++;
(void)phNxpNciHal_power_cycle();