15d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 25d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * Copyright (C) 2010 NXP Semiconductors 35d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * 45d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * Licensed under the Apache License, Version 2.0 (the "License"); 55d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * you may not use this file except in compliance with the License. 65d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * You may obtain a copy of the License at 75d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * 85d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * http://www.apache.org/licenses/LICENSE-2.0 95d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * 105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * Unless required by applicable law or agreed to in writing, software 115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * distributed under the License is distributed on an "AS IS" BASIS, 125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * See the License for the specific language governing permissions and 145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * limitations under the License. 155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */ 165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*! 185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* =========================================================================== * 195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* * 205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* * 215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* \file phHciNfc_Jewel.c * 225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* \brief HCI Jewel/Topaz Management Routines. * 235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* * 245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* * 255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* Project: NFC-FRI-1.1 * 265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* * 275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* $Date: Mon Mar 29 17:34:47 2010 $ * 285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* $Author: ing04880 $ * 295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* $Revision: 1.8 $ * 305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* $Aliases: NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $ 315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* * 325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* =========================================================================== * 335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly***************************** Header File Inclusion **************************** 375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phNfcCompId.h> 395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phHciNfc_Pipe.h> 405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phHciNfc_RFReader.h> 415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phOsalNfc.h> 425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#if defined(TYPE_JEWEL) 445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phHciNfc_Jewel.h> 455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly****************************** Macro Definitions ******************************* 485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define JEWEL_SINGLE_TAG_FOUND 0x00U 505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define JEWEL_MULTIPLE_TAGS_FOUND 0x03U 515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_WRA_CONTINUE_ACTIVATION 0x12U 525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_JEWEL_READID 0x78U 545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_JEWEL_READID_LENGTH 0x06U 555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*************************** Structure and Enumeration *************************** 585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*************************** Static Function Declaration ************************** 625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Jewel_Response( 675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *psContext, 685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pResponse, 705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Jewel_Event( 805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *psContext, 815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pEvent, 835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Jewel_InfoUpdate( 935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t index, 955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *reg_value, 965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t reg_length 975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 1005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 1015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Jewel_Packet( 1025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 1035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pResponse, 1045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 1055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 1065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 1075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 1085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 1095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 1105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 1135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Jewel_Get_PipeID( 1145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 1155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *ppipe_id 1165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 1175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 1185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 1195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL != psHciContext) 1215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly && ( NULL != ppipe_id ) 1225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly && ( NULL != psHciContext->p_jewel_info ) 1235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 1245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Jewel_Info_t *ps_jewel_info = NULL; 1265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info = (phHciNfc_Jewel_Info_t *)psHciContext->p_jewel_info; 1275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *ppipe_id = ps_jewel_info->pipe_id; 1285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 1305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 1325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 1345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 1355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 1375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Jewel_Init_Resources( 1385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext 1395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 1405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 1415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 1425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Jewel_Info_t *ps_jewel_info = NULL; 1435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( NULL == psHciContext ) 1445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 1465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 1485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( 1505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ( NULL == psHciContext->p_jewel_info ) && 1515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (phHciNfc_Allocate_Resource((void **)(&ps_jewel_info), 1525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly sizeof(phHciNfc_Jewel_Info_t))== NFCSTATUS_SUCCESS) 1535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 1545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_jewel_info = ps_jewel_info; 1565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->current_seq = JEWEL_INVALID_SEQ; 1575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->next_seq = JEWEL_INVALID_SEQ; 1585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->pipe_id = (uint8_t)HCI_UNKNOWN_PIPE_ID; 1595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 1615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INSUFFICIENT_RESOURCES); 1635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 1675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 1685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 1705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Jewel_Update_PipeInfo( 1715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 1725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeID, 1735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *pPipeInfo 1745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 1755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 1765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 1775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( NULL == psHciContext ) 1795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 1815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_jewel_info) 1835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 1855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 1875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Jewel_Info_t *ps_jewel_info=NULL; 1895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info = (phHciNfc_Jewel_Info_t *)psHciContext->p_jewel_info ; 1905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update the pipe_id of the Jewel Gate obtained from the HCI 1925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly Response */ 1935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->pipe_id = pipeID; 1945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->p_pipe_info = pPipeInfo; 1955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update the Response Receive routine of the Jewel Gate */ 1965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pPipeInfo->recv_resp = phHciNfc_Recv_Jewel_Response; 1975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update the event Receive routine of the Jewel Gate */ 1985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pPipeInfo->recv_event = phHciNfc_Recv_Jewel_Event; 1995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 2025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 2035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 2065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Jewel_Update_Info( 2075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 2085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t infotype, 2095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *jewel_info 2105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 2115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 2125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 2135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NULL == psHciContext) 2155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 2175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_jewel_info) 2195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 2215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 2235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Jewel_Info_t *ps_jewel_info=NULL; 2255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info = (phHciNfc_Jewel_Info_t *) 2265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_jewel_info ; 2275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly switch(infotype) 2295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case HCI_JEWEL_ENABLE: 2315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NULL != jewel_info) 2335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->enable_jewel_gate = 2355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *((uint8_t *)jewel_info); 2365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 2385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case HCI_JEWEL_INFO_SEQ: 2405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->current_seq = JEWEL_READID_SEQUENCE; 2425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->next_seq = JEWEL_READID_SEQUENCE; 2435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 2445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly default: 2465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 2485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 2495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 2535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 2545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 2565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Jewel_Info_Sequence ( 2575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *psHciHandle, 2585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef 2595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 2605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 2615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 2625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext = 2635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ((phHciNfc_sContext_t *)psHciHandle); 2645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly static uint8_t paraminfo[NXP_JEWEL_READID_LENGTH + 1] = {0}; 2655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) 2675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly || (NULL == pHwRef) 2685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 2695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 2715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if((NULL == psHciContext->p_jewel_info) || 2735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (HCI_JEWEL_ENABLE != 2745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ((phHciNfc_Jewel_Info_t *)(psHciContext->p_jewel_info))-> 2755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly enable_jewel_gate)) 2765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 2785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 2805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Jewel_Info_t *ps_jewel_info=NULL; 2825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *ps_pipe_info=NULL; 2835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 2845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info = (phHciNfc_Jewel_Info_t *) 2865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_jewel_info ; 2875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info = ps_jewel_info->p_pipe_info; 2885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == ps_pipe_info ) 2895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 2915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_SEQUENCE); 2925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 2945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly switch(ps_jewel_info->current_seq) 2965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case JEWEL_READID_SEQUENCE: 2985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = ps_pipe_info->pipe.pipe_id; 3005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info->reg_index = NXP_JEWEL_READID; 3015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly paraminfo[0] = NXP_JEWEL_READID; 3025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info->param_info = (void *)¶minfo; 3045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info->param_length = NXP_JEWEL_READID_LENGTH + 1; 3055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_Jewel_Command(psHciContext, 3075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pHwRef, pipeid, 3085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NXP_JEWEL_RAW); 3095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NFCSTATUS_PENDING == status ) 3115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->next_seq = JEWEL_END_SEQUENCE; 3135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 3155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case JEWEL_END_SEQUENCE: 3175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phNfc_sCompletionInfo_t CompInfo; 3195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info->reg_index = JEWEL_END_SEQUENCE; 3215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (JEWEL_MULTIPLE_TAGS_FOUND == 3225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->multiple_tgts_found) 3235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly CompInfo.status = NFCSTATUS_MULTIPLE_TAGS; 3255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 3275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly CompInfo.status = NFCSTATUS_SUCCESS; 3295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly CompInfo.info = &(ps_jewel_info->s_jewel_info); 3325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->s_jewel_info.RemDevType = phHal_eJewel_PICC; 3345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->current_seq = JEWEL_READID_SEQUENCE; 3355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->next_seq = JEWEL_READID_SEQUENCE; 3365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = NFCSTATUS_SUCCESS; 3375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Notify to the upper layer */ 3385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Tag_Notify(psHciContext, pHwRef, 3395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFC_NOTIFY_TARGET_DISCOVERED, 3405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &CompInfo); 3415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 3425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly default: 3445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 3465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 3475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 3485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 3535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 3545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 3565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 3575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Jewel_InfoUpdate( 3585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 3595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t index, 3605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *reg_value, 3615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t reg_length 3625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 3635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 3645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 3655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Jewel_Info_t *ps_jewel_info = NULL; 3665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHal_sJewelInfo_t *ps_jewel_tag_info = NULL; 3675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info = (phHciNfc_Jewel_Info_t *)(psHciContext->p_jewel_info); 3695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_tag_info = &(ps_jewel_info->s_jewel_info.RemoteDevInfo.Jewel_Info); 3705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly switch(index) 3725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_JEWEL_READID: 3745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("\tJewel ID", reg_value, reg_length); 3765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NXP_JEWEL_READID_LENGTH == reg_length) 3775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t i = 0; 3795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_tag_info->HeaderRom0 = reg_value[i++]; 3805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_tag_info->HeaderRom1 = reg_value[i++]; 3815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy(ps_jewel_tag_info->Uid, 3825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &(reg_value[i]), 3835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (reg_length - i)); 3845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_tag_info->UidLength = (reg_length - i); 3865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 3885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 3905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 3915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 3935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly default: 3955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 3975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 3985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 3995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 4025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 4035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 4045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 4055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 4065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Jewel_Packet( 4075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 4085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pResponse, 4095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 4105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 4115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 4125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 4135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 4145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 4155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 4165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 4175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Jewel_Info_t *ps_jewel_info = (phHciNfc_Jewel_Info_t *) 4185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (psHciContext->p_jewel_info); 4195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 4205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NXP_JEWEL_READID == ps_jewel_info->p_pipe_info->reg_index) 4215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Jewel_InfoUpdate(psHciContext, 4235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->p_pipe_info->reg_index, 4245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pResponse, (uint8_t)length); 4255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 4275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Send Jewel data to the upper layer */ 4295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("Jewel Bytes received", pResponse, length); 4305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->rx_index = HCP_HEADER_LEN; 4315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 4335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 4345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 4355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 4365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 4375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 4385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Jewel_Response( 4395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *psContext, 4405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 4415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pResponse, 4425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 4435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 4445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 4455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 4465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 4475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 4485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 4495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 4505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext = 4515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (phHciNfc_sContext_t *)psContext; 4525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 4535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 4545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == pResponse) 4555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly || (0 == length)) 4565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 4585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_jewel_info) 4605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 4625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 4645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Jewel_Info_t *ps_jewel_info=NULL; 4665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t prev_cmd = ANY_GET_PARAMETER; 4675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info = (phHciNfc_Jewel_Info_t *) 4685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_jewel_info ; 4695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( NULL == ps_jewel_info->p_pipe_info) 4705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 4725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_SEQUENCE); 4735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 4755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly prev_cmd = ps_jewel_info->p_pipe_info->prev_msg ; 4775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly switch(prev_cmd) 4785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case ANY_GET_PARAMETER: 4805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (length >= HCP_HEADER_LEN) 4825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Jewel_InfoUpdate(psHciContext, 4845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->p_pipe_info->reg_index, 4855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &pResponse[HCP_HEADER_LEN], 4865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (uint8_t)(length - HCP_HEADER_LEN)); 4875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 4895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 4915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 4925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 4945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case ANY_SET_PARAMETER: 4965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("Jewel Parameter Set \n"); 4985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_ReaderMgmt_Update_Sequence(psHciContext, 4995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly UPDATE_SEQ); 5005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->next_seq = JEWEL_READID_SEQUENCE; 5015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 5025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case ANY_OPEN_PIPE: 5045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("Jewel open pipe complete\n"); 5065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_ReaderMgmt_Update_Sequence(psHciContext, 5075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly UPDATE_SEQ); 5085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->next_seq = JEWEL_READID_SEQUENCE; 5095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 5105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case ANY_CLOSE_PIPE: 5125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("Jewel close pipe complete\n"); 5145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_ReaderMgmt_Update_Sequence(psHciContext, 5155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly UPDATE_SEQ); 5165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 5175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_JEWEL_RAW: 5195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("Jewel packet received \n"); 5215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (length >= HCP_HEADER_LEN) 5225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Append_HCPFrame(psHciContext->recv_buffer, 5245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 0, pResponse, length); 5255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->rx_total = length; 5265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Recv_Jewel_Packet(psHciContext, 5275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &pResponse[HCP_HEADER_LEN], 5285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (length - HCP_HEADER_LEN)); 5295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 5315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 5335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 5345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 5365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_WRA_CONTINUE_ACTIVATION: 5385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_WR_ACTIVATE_ID: 5395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("Jewel continue activation or "); 5415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("reactivation completed \n"); 5425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_ReaderMgmt_Update_Sequence(psHciContext, 5435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly UPDATE_SEQ); 5445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 5455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_WR_PRESCHECK: 5475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("Presence check completed \n"); 5495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 5505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_WR_ACTIVATE_NEXT: 5525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("Activate next completed \n"); 5545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (length > HCP_HEADER_LEN) 5555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (JEWEL_MULTIPLE_TAGS_FOUND == 5575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pResponse[HCP_HEADER_LEN]) 5585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->multiple_tgts_found = 5605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly JEWEL_MULTIPLE_TAGS_FOUND; 5615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 5635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->multiple_tgts_found = FALSE; 5655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 5685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 5705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 5715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 5735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_WR_DISPATCH_TO_UICC: 5755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly switch(length) 5775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case HCP_HEADER_LEN: 5795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Optional error code, if no error code field 5815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly in the response, then this command is 5825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly successfully completed */ 5835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->uicc_activation = 5845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly UICC_CARD_ACTIVATION_SUCCESS; 5855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 5865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case (HCP_HEADER_LEN + 1): 5885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->uicc_activation = 5905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pResponse[HCP_HEADER_LEN]; 5915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 5925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } /* End of case (HCP_HEADER_LEN + index) */ 5935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly default: 5945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 5965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 5975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 5985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NFCSTATUS_SUCCESS == status) 6015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_ReaderMgmt_Update_Sequence(psHciContext, 6035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly UPDATE_SEQ); 6045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 6065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly default: 6085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_RESPONSE); 6105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 6115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( NFCSTATUS_SUCCESS == status ) 6145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->p_pipe_info->prev_status = NFCSTATUS_SUCCESS; 6165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->current_seq = ps_jewel_info->next_seq; 6175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 6215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 6225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 6245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 6255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Jewel_Event( 6265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *psContext, 6275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 6285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pEvent, 6295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 6305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 6315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 6325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 6335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 6345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 6355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 6365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 6375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext = 6385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (phHciNfc_sContext_t *)psContext ; 6395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == pEvent) 6415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly || (0 == length)) 6425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 6445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if((NULL == psHciContext->p_jewel_info) || 6465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (HCI_JEWEL_ENABLE != 6475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ((phHciNfc_Jewel_Info_t *)(psHciContext->p_jewel_info))-> 6485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly enable_jewel_gate)) 6495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 6515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 6535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Packet_t *p_packet = NULL; 6555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Jewel_Info_t *ps_jewel_info = NULL; 6565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Message_t *message = NULL; 6575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t instruction=0, 6585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly i = 0; 6595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info = (phHciNfc_Jewel_Info_t *) 6615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_jewel_info ; 6625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_packet = (phHciNfc_HCP_Packet_t *)pEvent; 6635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly message = &p_packet->msg.message; 6645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Get the instruction bits from the Message Header */ 6655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly instruction = (uint8_t) GET_BITS8( message->msg_header, 6665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCP_MSG_INSTRUCTION_OFFSET, HCP_MSG_INSTRUCTION_LEN); 6675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if ((EVT_TARGET_DISCOVERED == instruction) 6695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly && ((JEWEL_MULTIPLE_TAGS_FOUND == message->payload[i] ) 6705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly || (JEWEL_SINGLE_TAG_FOUND == message->payload[i])) 6715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 6725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly static phNfc_sCompletionInfo_t pCompInfo; 6745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (JEWEL_MULTIPLE_TAGS_FOUND == message->payload[i]) 6765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->multiple_tgts_found = 6785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly JEWEL_MULTIPLE_TAGS_FOUND; 6795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pCompInfo.status = NFCSTATUS_MULTIPLE_TAGS; 6805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 6825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->multiple_tgts_found = FALSE; 6845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pCompInfo.status = NFCSTATUS_SUCCESS; 6855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->host_rf_type = phHal_eJewel_PCD; 6885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->s_jewel_info.RemDevType = phHal_eJewel_PICC; 6895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info->current_seq = JEWEL_READID_SEQUENCE; 6905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Notify to the HCI Generic layer To Update the FSM */ 6925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Notify_Event(psHciContext, pHwRef, 6935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFC_NOTIFY_TARGET_DISCOVERED, 6945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &pCompInfo); 6955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 6985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_RESPONSE); 7005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 7035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 7045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 7065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Send_Jewel_Command( 7075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psContext, 7085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 7095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipe_id, 7105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t cmd 7115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 7125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 7135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 7145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext = 7155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (phHciNfc_sContext_t *)psContext ; 7165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef) ) 7175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 7195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if((NULL == psHciContext->p_jewel_info) || 7215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (HCI_JEWEL_ENABLE != 7225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ((phHciNfc_Jewel_Info_t *)(psHciContext->p_jewel_info))-> 7235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly enable_jewel_gate) || 7245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (HCI_UNKNOWN_PIPE_ID == 7255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ((phHciNfc_Jewel_Info_t *)(psHciContext->p_jewel_info))-> 7265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipe_id) || 7275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (pipe_id != 7285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ((phHciNfc_Jewel_Info_t *)(psHciContext->p_jewel_info))-> 7295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipe_id)) 7305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 7325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 7345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Jewel_Info_t *ps_jewel_info=NULL; 7365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *ps_pipe_info=NULL; 7375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Packet_t *hcp_packet = NULL; 7385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Message_t *hcp_message = NULL; 7395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t i = 0, 7405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly length = HCP_HEADER_LEN; 7415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info = (phHciNfc_Jewel_Info_t *) 7435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_jewel_info ; 7445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info = ps_jewel_info->p_pipe_info; 7455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == ps_pipe_info ) 7465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 7485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_SEQUENCE); 7495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 7515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->tx_total = 0 ; 7535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly hcp_packet = (phHciNfc_HCP_Packet_t *) psHciContext->send_buffer; 7545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NXP_JEWEL_RAW == cmd) 7565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Construct the HCP Frame */ 7585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Build_HCPFrame(hcp_packet,HCP_CHAINBIT_DEFAULT, 7595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (uint8_t) pipe_id, HCP_MSG_TYPE_COMMAND, cmd); 7605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly hcp_message = &(hcp_packet->msg.message); 7615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Append_HCPFrame((uint8_t *)hcp_message->payload, 7625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly i, (uint8_t *)ps_pipe_info->param_info, 7635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info->param_length); 7645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly length =(uint8_t)(length + i + ps_pipe_info->param_length); 7655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 7675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_COMMAND); 7695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NFCSTATUS_SUCCESS == status) 7725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info->sent_msg_type = (uint8_t)HCP_MSG_TYPE_COMMAND; 7745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info->prev_msg = cmd; 7755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->tx_total = length; 7765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->response_pending = TRUE; 7775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Send the Constructed HCP packet to the lower layer */ 7795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_HCP( psHciContext, pHwRef); 7805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info->prev_status = status; 7815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 7855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 7865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 7885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Jewel_GetRID( 7895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 7905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef) 7915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 7925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 7935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly static uint8_t reader_id_info[NXP_JEWEL_READID_LENGTH] = {0}; 7945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef)) 7965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 7985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if((NULL == psHciContext->p_jewel_info) || 8005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (HCI_JEWEL_ENABLE != 8015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ((phHciNfc_Jewel_Info_t *)(psHciContext->p_jewel_info))-> 8025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly enable_jewel_gate)) 8035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 8055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 8075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Jewel_Info_t *ps_jewel_info=NULL; 8095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *ps_pipe_info=NULL; 8105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 8115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_jewel_info = (phHciNfc_Jewel_Info_t *) 8135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_jewel_info ; 8145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info = ps_jewel_info->p_pipe_info; 8165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == ps_pipe_info ) 8175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 8195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_SEQUENCE); 8205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 8225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = ps_jewel_info->pipe_id ; 8245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly reader_id_info[0] = NXP_JEWEL_READID; 8255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info->param_info = (void *)&reader_id_info; 8275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info->param_length = NXP_JEWEL_READID_LENGTH + 1 ; 8285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_Jewel_Command(psHciContext, 8305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pHwRef, pipeid, 8315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NXP_JEWEL_RAW); 8325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 8355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 8365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* #if defined(TYPE_JEWEL) */ 8385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 840