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_NfcIPMgmt.c * 225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* \brief HCI NFCIP-1 management routines. * 235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* * 245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* * 255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* Project: NFC-FRI-1.1 * 265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* * 275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* $Date: Tue Jun 8 09:32:31 2010 $ * 285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* $Author: ing04880 $ * 295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* $Revision: 1.33 $ * 305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* $Aliases: 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 <phNfcHalTypes.h> 405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phHciNfc_Pipe.h> 415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phHciNfc_RFReader.h> 425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phHciNfc_Emulation.h> 435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phOsalNfc.h> 445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#if defined (ENABLE_P2P) 465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phHciNfc_NfcIPMgmt.h> 475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly****************************** Macro Definitions ******************************* 495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* RF Error */ 515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NFCIP_RF_NO_ERROR 0x00U 525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NFCIP_STATUS_MAX_VALUE 0x01U 535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Read and write to the below registry for initiator and target */ 555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_MODE 0x01U 565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_ATR_REQ 0x02U 575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_ATR_RES 0x03U 585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_PSL1 0x04U 595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_PSL2 0x05U 605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_DID 0x06U 615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_NAD 0x07U 625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_OPTIONS 0x08U 635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_STATUS 0x09U 645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_NFCID3I 0x0AU 655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_NFCID3T 0x0BU 665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_PARAM 0x0CU 675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_MERGE 0x0DU 685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* command */ 705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCIP_ATTREQUEST 0x12U 715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_NFCI_CONTINUE_ACTIVATION 0x13U 725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Event */ 745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_EVT_NFC_SND_DATA 0x01U 755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_EVT_NFC_ACTIVATED 0x02U 765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_EVT_NFC_DEACTIVATED 0x03U 775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_EVT_NFC_RCV_DATA 0x04U 785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NXP_EVT_NFC_CONTINUE_MI 0x05U 795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NFCIP_DATE_RATE_FACTOR 0x40U 815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NFCIP_DATE_RATE_SHIFT 0x06U 825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NFCIP_DATA_RATE_CALC(val) \ 835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ((((uint8_t)(val) >> NFCIP_DATE_RATE_SHIFT) + \ 845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 0x01U) * NFCIP_DATE_RATE_FACTOR) 855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NFCIP_COMM_INITIATOR_SHIFT 0x03 865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define NFCIP_COMM_FACTOR 0x03 875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*************************** Structure and Enumeration *************************** 895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*************************** Static Function Declaration ************************** 935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_InfoUpdate( 975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t index, 995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *reg_value, 1005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t reg_length 1015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 1025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 1045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 1055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_RecvData( 1065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 1075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 1085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pResponse, 1095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 1105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 1115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 1125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 1135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 1145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 1155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 1175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 1185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_NfcIP_Response( 1195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 1205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *ppipe_info, 1215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pResponse, 1225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 1235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 1245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 1255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 1265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 1275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 1285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 1305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 1315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_NfcIP_Event( 1325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 1335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 1345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pEvent, 1355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 1365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 1375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 1385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 1395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 1405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 1415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 1435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 1445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Initiator_Event( 1455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *psContext, 1465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 1475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pEvent, 1485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 1495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 1505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 1515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 1525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 1535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 1545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 1565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 1575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Target_Event( 1585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *psContext, 1595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 1605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pEvent, 1615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 1625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 1635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 1645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 1655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 1665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 1675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 1695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 1705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Initiator_Response( 1715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *psContext, 1725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 1735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pResponse, 1745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 1755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 1765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 1775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 1785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 1795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 1805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 1825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 1835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Target_Response( 1845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *psContext, 1855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 1865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pResponse, 1875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 1885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 1895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 1905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 1915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 1925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 1935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 1945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*************************** Function Definitions *************************** 1955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 1965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 1985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Initiator_Init_Resources( 1995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext 2005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 2015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 2025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 2035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_init_info=NULL; 2045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( NULL == psHciContext ) 2055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 2075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 2095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NULL != psHciContext->p_nfcip_info) 2115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = NFCSTATUS_SUCCESS; 2135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(( NULL == psHciContext->p_nfcip_info ) && 2155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (phHciNfc_Allocate_Resource((void **)(&p_init_info), 2165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly sizeof(phHciNfc_NfcIP_Info_t))== NFCSTATUS_SUCCESS) 2175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 2185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info = p_init_info; 2205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_init_info->nfcip_type = NFCIP_INVALID; 2215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_init_info->current_seq = NFCIP_INVALID_SEQUENCE; 2225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_init_info->next_seq = NFCIP_INVALID_SEQUENCE; 2235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_init_info->p_init_pipe_info = NULL; 2245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_init_info->p_tgt_pipe_info = NULL; 2255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 2275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INSUFFICIENT_RESOURCES); 2295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 2335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 2345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 2365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Initiator_Get_PipeID( 2375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 2385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *ppipe_id 2395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 2405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 2415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 2425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL != psHciContext) 2435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly && ( NULL != ppipe_id ) 2445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly && ( NULL != psHciContext->p_nfcip_info ) 2455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 2465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_init_info=NULL; 2485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_init_info = (phHciNfc_NfcIP_Info_t *) 2495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 2505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *ppipe_id = p_init_info->p_init_pipe_info->pipe.pipe_id ; 2515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 2535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 2555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 2575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 2585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 2605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Initiator_Update_PipeInfo( 2615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 2625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeID, 2635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *pPipeInfo 2645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 2655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 2665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 2675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( NULL == psHciContext ) 2685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 2705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 2725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 2745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 2765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_init_info=NULL; 2785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_init_info = (phHciNfc_NfcIP_Info_t *) 2795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 2805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update the pipe_id of the NFCIP-1 initiator Gate obtained from 2815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly the HCI Response */ 2825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_init_info->p_init_pipe_info = pPipeInfo; 2835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_init_info->p_init_pipe_info->pipe.pipe_id = pipeID; 2845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update the Response Receive routine of the NFCIP-1 initiator Gate */ 2855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pPipeInfo->recv_resp = &phHciNfc_Recv_Initiator_Response; 2865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update the event Receive routine of the NFCIP-1 initiator Gate */ 2875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pPipeInfo->recv_event = &phHciNfc_Recv_Initiator_Event; 2885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 2905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 2915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 2935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_Presence_Check( 2945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 2955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef 2965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 2975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 2985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 2995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef) ) 3015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 3035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if((NULL == psHciContext->p_nfcip_info) || 3055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NFCIP_INVALID == 3065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ((phHciNfc_NfcIP_Info_t *)(psHciContext->p_nfcip_info))->nfcip_type)) 3075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 3095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 3115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 3135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 3145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 3165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 3175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = ((NFCIP_INITIATOR == p_nfcipinfo->nfcip_type)? 3185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_init_pipe_info : 3195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_tgt_pipe_info); 3205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == p_pipe_info ) 3225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 3245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 3255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 3275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Packet_t *hcp_packet = NULL; 3295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length = HCP_HEADER_LEN; 3305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 3315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = p_pipe_info->pipe.pipe_id; 3335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->tx_total = 0 ; 3345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly hcp_packet = (phHciNfc_HCP_Packet_t *) psHciContext->send_buffer; 3355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Construct the HCP Frame */ 3365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Build_HCPFrame(hcp_packet,(uint8_t)HCP_CHAINBIT_DEFAULT, 3375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (uint8_t) pipeid, (uint8_t)HCP_MSG_TYPE_COMMAND, 3385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (uint8_t)NXP_NFCIP_ATTREQUEST); 3395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->sent_msg_type = (uint8_t)HCP_MSG_TYPE_COMMAND; 3415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->prev_msg = (uint8_t)NXP_NFCIP_ATTREQUEST; 3425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->tx_total = length; 3435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->response_pending = (uint8_t)TRUE; 3445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Send the Constructed HCP packet to the lower layer */ 3465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_HCP( psHciContext, pHwRef); 3475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->prev_status = status; 3485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 3515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 3525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 3545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 3555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Initiator_Response( 3565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pContext, 3575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 3585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pResponse, 3595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 3605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 3615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 3625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 3635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 3645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 3655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 3665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 3675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext = 3685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (phHciNfc_sContext_t *)pContext ; 3695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == pResponse) 3715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly || (0 == length)) 3725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 3745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 3765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 3785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 3805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcip_info=NULL; 3825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info = NULL; 3835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcip_info = (phHciNfc_NfcIP_Info_t *) 3855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 3865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = p_nfcip_info->p_init_pipe_info; 3875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( NULL == p_pipe_info) 3885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 3905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 3915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 3935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Recv_NfcIP_Response(psHciContext, 3955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info, pResponse, 3965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly length); 3975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NFCSTATUS_SUCCESS == status) 3985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_ReaderMgmt_Update_Sequence(psHciContext, 4005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly UPDATE_SEQ); 4015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 4055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 4065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 4075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 4085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 4095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Initiator_Event( 4105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *psContext, 4115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 4125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pEvent, 4135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 4145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 4155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 4165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 4175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 4185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 4195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 4205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 4215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext = 4225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (phHciNfc_sContext_t *)psContext ; 4235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == pEvent) 4245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly || (0 == length)) 4255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 4275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 4295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 4315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 4335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Packet_t *p_packet = NULL; 4355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcip_info=NULL; 4365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Message_t *message = NULL; 4375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t instruction=0; 4385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 4395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcip_info = (phHciNfc_NfcIP_Info_t *) 4405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 4415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_packet = (phHciNfc_HCP_Packet_t *)pEvent; 4425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly message = &p_packet->msg.message; 4435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Get the instruction bits from the Message Header */ 4445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly instruction = (uint8_t) GET_BITS8( message->msg_header, 4455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCP_MSG_INSTRUCTION_OFFSET, HCP_MSG_INSTRUCTION_LEN); 4465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NXP_EVT_NFC_ACTIVATED == instruction) 4475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcip_info->nfcip_type = NFCIP_INITIATOR; 4495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->host_rf_type = phHal_eNfcIP1_Initiator; 4505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcip_info->rem_nfcip_tgt_info.RemDevType = phHal_eNfcIP1_Target; 4515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 4535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Recv_NfcIP_Event(psHciContext, 4545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pHwRef, pEvent, length); 4555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 4575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 4585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 4595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 4605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Target_Init_Resources( 4615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext 4625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 4635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 4645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 4655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_target_info=NULL; 4665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( NULL == psHciContext ) 4675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 4695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 4715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NULL != psHciContext->p_nfcip_info) 4735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = NFCSTATUS_SUCCESS; 4755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if( 4775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ( NULL == psHciContext->p_nfcip_info ) && 4785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (phHciNfc_Allocate_Resource((void **)(&p_target_info), 4795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly sizeof(phHciNfc_NfcIP_Info_t))== NFCSTATUS_SUCCESS) 4805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 4815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info = p_target_info; 4835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_target_info->nfcip_type = NFCIP_INVALID; 4845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_target_info->current_seq = NFCIP_INVALID_SEQUENCE; 4855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_target_info->next_seq = NFCIP_INVALID_SEQUENCE; 4865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_target_info->p_tgt_pipe_info = NULL; 4875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_target_info->p_tgt_pipe_info = NULL; 4885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 4905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 4915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INSUFFICIENT_RESOURCES); 4925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 4945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 4955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 4965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 4975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 4985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 4995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Target_Get_PipeID( 5005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 5015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *ppipe_id 5025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 5035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 5045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 5055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL != psHciContext) 5065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly && ( NULL != ppipe_id ) 5075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly && ( NULL != psHciContext->p_nfcip_info ) 5085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 5095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_target_info=NULL; 5115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_target_info = (phHciNfc_NfcIP_Info_t *) 5125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 5135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *ppipe_id = p_target_info->p_tgt_pipe_info->pipe.pipe_id; 5145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 5165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 5185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 5205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 5215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 5225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 5235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Target_Update_PipeInfo( 5245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 5255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeID, 5265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *pPipeInfo 5275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 5285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 5295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 5305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( NULL == psHciContext ) 5315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 5335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 5355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 5375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 5395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_target_info=NULL; 5415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_target_info = (phHciNfc_NfcIP_Info_t *) 5425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 5435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update the pipe_id of the NFCIP-1 target Gate obtained from 5445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly the HCI Response */ 5455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_target_info->p_tgt_pipe_info = pPipeInfo; 5465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_target_info->p_tgt_pipe_info->pipe.pipe_id = pipeID; 5475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update the Response Receive routine of the NFCIP-1 target Gate */ 5485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pPipeInfo->recv_resp = &phHciNfc_Recv_Target_Response; 5495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update the event Receive routine of the NFCIP-1 target Gate */ 5505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pPipeInfo->recv_event = &phHciNfc_Recv_Target_Event; 5515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 5535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 5545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 5555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 5565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 5575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Target_Response( 5585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pContext, 5595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 5605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pResponse, 5615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 5625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 5635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 5645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 5655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 5665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 5675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 5685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 5695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext = 5705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (phHciNfc_sContext_t *)pContext ; 5715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 5725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == pResponse) 5735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly || (0 == length)) 5745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 5765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 5785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 5805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 5825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcip_info=NULL; 5845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info = NULL; 5855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 5865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcip_info = (phHciNfc_NfcIP_Info_t *) 5875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 5885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = p_nfcip_info->p_tgt_pipe_info; 5895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( NULL == p_pipe_info) 5905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 5925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 5935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 5945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 5955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 5965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Recv_NfcIP_Response(psHciContext, 5975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info, pResponse, 5985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly length); 5995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NFCSTATUS_SUCCESS == status) 6005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_EmuMgmt_Update_Seq(psHciContext, 6025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly UPDATE_SEQ); 6035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 6075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 6085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 6105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 6115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_Target_Event( 6125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *psContext, 6135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 6145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pEvent, 6155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 6165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 6175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 6185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 6195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 6205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 6215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 6225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 6235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext = 6245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (phHciNfc_sContext_t *)psContext ; 6255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == pEvent) 6265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly || (0 == length)) 6275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 6295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 6315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 6335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 6355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Packet_t *p_packet = NULL; 6375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcip_info=NULL; 6385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Message_t *message = NULL; 6395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t instruction=0; 6405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcip_info = (phHciNfc_NfcIP_Info_t *)psHciContext->p_nfcip_info ; 6425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_packet = (phHciNfc_HCP_Packet_t *)pEvent; 6435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly message = &p_packet->msg.message; 6445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Get the instruction bits from the Message Header */ 6455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly instruction = (uint8_t) GET_BITS8( message->msg_header, 6465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCP_MSG_INSTRUCTION_OFFSET, HCP_MSG_INSTRUCTION_LEN); 6475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NXP_EVT_NFC_ACTIVATED == instruction) 6485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcip_info->nfcip_type = NFCIP_TARGET; 6505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->host_rf_type = phHal_eNfcIP1_Target; 6515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcip_info->rem_nfcip_tgt_info.RemDevType = 6525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHal_eNfcIP1_Initiator; 6535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Recv_NfcIP_Event(psHciContext, 6555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pHwRef, pEvent, length); 6565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 6585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 6595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 6615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 6625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_NfcIP_Response( 6635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 6645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *ppipe_info, 6655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pResponse, 6665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 6675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 6685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 6695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 6705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 6715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 6725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 6735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 6745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 6755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t prev_cmd = ANY_GET_PARAMETER; 6765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 6785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 6795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly prev_cmd = ppipe_info->prev_msg ; 6805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly switch(prev_cmd) 6815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case ANY_OPEN_PIPE: 6835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("NFCIP-1 NFCIP open pipe complete\n"); 6855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->next_seq = NFCIP_NFCID3I; 6865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 6875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case ANY_CLOSE_PIPE: 6895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("NFCIP-1 NFCIP close pipe complete\n"); 6915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->next_seq = NFCIP_NFCID3I; 6925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 6935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case ANY_GET_PARAMETER: 6955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("NFCIP-1 NFCIP get parameter complete\n"); 6975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (length >= HCP_HEADER_LEN) 6985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_NfcIP_InfoUpdate(psHciContext, 7005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ppipe_info->reg_index, 7015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &pResponse[HCP_HEADER_LEN], 7025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (uint8_t)(length - HCP_HEADER_LEN)); 7035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 7055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 7075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 7085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 7105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case ANY_SET_PARAMETER: 7125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("NFCIP-1 NFCIP Parameter Set \n"); 7145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->next_seq = NFCIP_NFCID3I; 7155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 7165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCI_CONTINUE_ACTIVATION: 7185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCIP_ATTREQUEST: 7195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->next_seq = NFCIP_NFCID3I; 7215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 7225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly default: 7245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_RESPONSE); 7265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 7275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( NFCSTATUS_SUCCESS == status ) 7315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ppipe_info->prev_status = NFCSTATUS_SUCCESS; 7335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->current_seq = p_nfcipinfo->next_seq; 7345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 7365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 7375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 7395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 7405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_NfcIP_Event( 7415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 7425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 7435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pEvent, 7445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 7455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 7465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 7475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 7485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 7495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 7505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 7515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 7525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Packet_t *p_packet = NULL; 7535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 7545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Message_t *message = NULL; 7555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phNfc_sCompletionInfo_t pCompInfo; 7565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t instruction=0; 7575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t type = 0; 7585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 7605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 7615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_packet = (phHciNfc_HCP_Packet_t *)pEvent; 7625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly message = &p_packet->msg.message; 7635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Get the instruction bits from the Message Header */ 7645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly instruction = (uint8_t) GET_BITS8( message->msg_header, 7655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCP_MSG_INSTRUCTION_OFFSET, HCP_MSG_INSTRUCTION_LEN); 7665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly switch(instruction) 7685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_EVT_NFC_ACTIVATED: 7705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("NFCIP-1 device discovered\n"); 7725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NFCIP_INITIATOR == p_nfcipinfo->nfcip_type) 7745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pCompInfo.info = &(p_nfcipinfo->rem_nfcip_tgt_info); 7765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly type = NFC_NOTIFY_TARGET_DISCOVERED; 7775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 7795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly type = NFC_NOTIFY_DEVICE_ACTIVATED; 7815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(length > HCP_HEADER_LEN) 7845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_DEBUG("NfcIP-1 activation mode : %d\n", pEvent[HCP_HEADER_LEN]); 7865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Mode indicates in which mode the current activation 7875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly as be done 7885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly - 0x00: Passive mode 7895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly - 0x01: Active */ 7905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->activation_mode = pEvent[HCP_HEADER_LEN]; 7915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pCompInfo.status = NFCSTATUS_SUCCESS; 7935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Notify to the HCI Generic layer To Update the FSM */ 7945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Notify_Event(psHciContext, pHwRef, 7955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly type, &pCompInfo); 7965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 7975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_EVT_NFC_DEACTIVATED: 7995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly static phHal_sEventInfo_t event_info; 8015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly event_info.eventHost = phHal_eHostController; 8035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly event_info.eventType = NFC_EVT_DEACTIVATED; 8045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->activation_mode = FALSE; 8055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NFCIP_INITIATOR == p_nfcipinfo->nfcip_type) 8065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->rem_nfcip_tgt_info.RemDevType = 8085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHal_eNfcIP1_Target; 8095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly event_info.eventSource = phHal_eNfcIP1_Initiator; 8105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 8125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->rem_nfcip_tgt_info.RemDevType = 8145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHal_eNfcIP1_Initiator; 8155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly event_info.eventSource = phHal_eNfcIP1_Target; 8165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Reset the sequence */ 8185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->current_seq = NFCIP_NFCID3I; 8195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->next_seq = NFCIP_NFCID3I; 8205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("NFCIP-1 Target Deactivated\n"); 8225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Notify_Event(psHciContext, pHwRef, 8235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFC_NOTIFY_DEVICE_DEACTIVATED, 8245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &event_info); 8255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 8265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_EVT_NFC_RCV_DATA: 8285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_NfcIP_RecvData(psHciContext, 8305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pHwRef, 8315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &pEvent[HCP_HEADER_LEN], 8325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (length - HCP_HEADER_LEN)); 8335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 8345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_EVT_NFC_CONTINUE_MI: 8365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* psHciContext->response_pending = FALSE; */ 8385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->event_pending = FALSE; 8395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 8405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly default: 8425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 8445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 8455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 8495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 8505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 8525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 8535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_RecvData( 8545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 8555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 8565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *pResponse, 8575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN 8585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t length 8595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 8605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length 8615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 8625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 8635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 8645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 8655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t index = 0; 8665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) 8685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly || (NULL == pHwRef) 8695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly || (NULL == pResponse) 8705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly || (0 == length)) 8715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 8735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 8755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phNfc_sTransactionInfo_t transInfo; 8775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo = NULL; 8785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t type = 0; 8795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 8815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info; 8825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("NFCIP-1 received bytes :"); 8835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NFCIP_RF_NO_ERROR == pResponse[index]) 8845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("device ", &pResponse[index], (length - index)); 8865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly transInfo.status = NFCSTATUS_SUCCESS; 8875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly index++; 8885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (TRUE == pResponse[index]) 8895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update the more information bit to the upper layer */ 8915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly transInfo.status = NFCSTATUS_MORE_INFORMATION; 8925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly index++; 8945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly transInfo.buffer = &pResponse[index]; 8975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly transInfo.length = (length - index); 8985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly type = (uint8_t)NFC_NOTIFY_RECV_EVENT; 8995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 9005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 9015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 9025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT("NFCIP-1 receive RF ERROR "); 9035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->activation_mode = FALSE; 9045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly type = (uint8_t)NFC_NOTIFY_RECV_EVENT; 9055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly transInfo.status = NFCSTATUS_RF_TIMEOUT; 9065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly transInfo.buffer = NULL; 9075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly transInfo.length = 0; 9085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 9095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = NFCSTATUS_PENDING; 9105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Event NXP_EVT_NFC_RCV_DATA: so give received data to 9115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly the upper layer */ 9125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Notify_Event(psHciContext, pHwRef, 9135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly type, 9145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &transInfo ); 9155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 9165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 9175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 9185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 9205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_Send_Data ( 9215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 9225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 9235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_XchgInfo_t *sData 9245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 9255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 9265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 9275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == sData) || 9295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NULL == sData->tx_buffer) || (0 == sData->tx_length)) 9305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 9315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 9325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 9335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if((NULL == psHciContext->p_nfcip_info) || 9345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NFCIP_INVALID == 9355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ((phHciNfc_NfcIP_Info_t *)(psHciContext->p_nfcip_info))->nfcip_type)) 9365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 9375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 9385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 9395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 9405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 9415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 9425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 9435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 9455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 9465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = ((NFCIP_INITIATOR == p_nfcipinfo->nfcip_type)? 9475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_init_pipe_info : 9485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_tgt_pipe_info); 9495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == p_pipe_info ) 9515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 9525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 9535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 9545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 9555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 9565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 9575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Packet_t *hcp_packet = NULL; 9585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Message_t *hcp_message = NULL; 9595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length = HCP_HEADER_LEN; 9605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0, 9615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly i = 0; 9625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("HCI NFCIP-1 Send Data: ", sData->tx_buffer, sData->tx_length); 9645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->tx_total = 0 ; 9665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = p_pipe_info->pipe.pipe_id; 9675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly hcp_packet = (phHciNfc_HCP_Packet_t *) psHciContext->send_buffer; 9685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly hcp_message = &(hcp_packet->msg.message); 9695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly hcp_message->payload[i] = sData->params.nfc_info.more_info; 9705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly i++; 9715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Construct the HCP Frame */ 9735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Build_HCPFrame(hcp_packet,(uint8_t)HCP_CHAINBIT_DEFAULT, 9745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (uint8_t) pipeid, (uint8_t)HCP_MSG_TYPE_EVENT, 9755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (uint8_t)NXP_EVT_NFC_SND_DATA); 9765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Append_HCPFrame((uint8_t *)hcp_message->payload, 9785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly i, (uint8_t *)sData->tx_buffer, 9795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (uint8_t)sData->tx_length); 9805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly length =(uint16_t)(length + i + sData->tx_length); 9825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->sent_msg_type = (uint8_t)HCP_MSG_TYPE_EVENT; 9845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->prev_msg = NXP_EVT_NFC_SND_DATA; 9855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->tx_total = length; 9865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Send the Constructed HCP packet to the lower layer */ 9875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_HCP( psHciContext, pHwRef); 9885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#if !defined (ENABLE_CONTINUE_MI) 9895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if ((TRUE == sData->params.nfc_info.more_info) && 9905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NFCSTATUS_PENDING == status)) 9915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 9925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* If more information bit is set, then wait for the event 9935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NXP_EVT_NFC_CONTINUE_MI */ 9945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* psHciContext->response_pending = TRUE; */ 9955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->event_pending = TRUE; 9965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 9975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* #if defined (ENABLE_CONTINUE_MI) */ 9985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->prev_status = status; 9995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 10005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 10015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 10025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 10035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 10045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 10055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_Info_Sequence ( 10065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 10075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef 10085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef NOTIFY_REQD 10095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly , 10105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t notify_reqd 10115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* #ifdef NOTIFY_REQD */ 10125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 10135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 10145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 10155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 10165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) 10175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly || (NULL == pHwRef) 10185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 10195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 10205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 10215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 10225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if((NULL == psHciContext->p_nfcip_info) || 10235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NFCIP_INVALID == 10245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ((phHciNfc_NfcIP_Info_t *)(psHciContext->p_nfcip_info))-> 10255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly nfcip_type)) 10265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 10275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 10285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 10295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 10305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 10315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 10325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 10335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 10345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 10355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 10365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = ((NFCIP_INITIATOR == p_nfcipinfo->nfcip_type)? 10375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_init_pipe_info: 10385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_tgt_pipe_info); 10395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == p_pipe_info ) 10405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 10415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 10425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 10435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 10445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 10455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 10465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly switch(p_nfcipinfo->current_seq) 10475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 10485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NFCIP_NFCID3I: 10495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 10505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)NXP_NFCIP_NFCID3I; 10515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Fill the data buffer and send the command to the 10525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly device */ 10535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = 10545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 10555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->pipe.pipe_id, 10565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ANY_GET_PARAMETER); 10575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NFCSTATUS_PENDING == status ) 10585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 10595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->next_seq = NFCIP_NFCID3T; 10605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 10615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 10625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 10635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NFCIP_NFCID3T: 10645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 10655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)NXP_NFCIP_NFCID3T; 10665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Fill the data buffer and send the command to the 10675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly device */ 10685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = 10695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 10705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->pipe.pipe_id, 10715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ANY_GET_PARAMETER); 10725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NFCSTATUS_PENDING == status ) 10735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 10745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->next_seq = NFCIP_PARAM; 10755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 10765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 10775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 10785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NFCIP_PARAM: 10795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 10805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)NXP_NFCIP_PARAM; 10815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Fill the data buffer and send the command to the 10825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly device */ 10835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = 10845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 10855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->pipe.pipe_id, 10865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ANY_GET_PARAMETER); 10875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NFCSTATUS_PENDING == status ) 10885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 10895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->next_seq = NFCIP_ATR_INFO; 10905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 10915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 10925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 10935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NFCIP_ATR_INFO: 10945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 10955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)((NFCIP_INITIATOR == 10965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->nfcip_type)? 10975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NXP_NFCIP_ATR_RES : 10985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NXP_NFCIP_ATR_REQ); 10995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = 11005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 11015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->pipe.pipe_id, 11025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ANY_GET_PARAMETER); 11035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 11045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NFCSTATUS_PENDING == status ) 11055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 11065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->next_seq = NFCIP_STATUS; 11075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 11085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 11095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 11105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NFCIP_STATUS: 11115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 11125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)NXP_NFCIP_STATUS; 11135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Fill the data buffer and send the command to the 11145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly device */ 11155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = 11165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 11175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->pipe.pipe_id, 11185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ANY_GET_PARAMETER); 11195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NFCSTATUS_PENDING == status ) 11205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 11215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef NOTIFY_REQD 11225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(FALSE == notify_reqd) 11235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else /* #ifdef NOTIFY_REQD */ 11245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NULL != psHciContext->p_target_info) 11255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* #ifdef NOTIFY_REQD */ 11265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 11275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->next_seq = NFCIP_NFCID3I; 11285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = NFCSTATUS_SUCCESS; 11295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 11305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 11315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 11325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->next_seq = NFCIP_END_SEQUENCE; 11335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 11345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 11355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 11365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 11375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NFCIP_END_SEQUENCE: 11385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 11395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHal_uRemoteDevInfo_t *rem_nfcipinfo = NULL; 11405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 11415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NULL != psHciContext->p_target_info) 11425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 11435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* This is given to user */ 11445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo = 11455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &(psHciContext->p_target_info->RemoteDevInfo); 11465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 11475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 11485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 11495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo = 11505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &(p_nfcipinfo->rem_nfcip_tgt_info.RemoteDevInfo); 11515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 11525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 11535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update maximum frame length */ 11545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo->NfcIP_Info.MaxFrameLength = 11555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->max_frame_len; 11565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 11575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->current_seq = NFCIP_NFCID3I; 11585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->next_seq = NFCIP_NFCID3I; 11595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 11605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo->NfcIP_Info.Nfcip_Active = 11615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->activation_mode; 11625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 11635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NFCIP_INITIATOR == p_nfcipinfo->nfcip_type) 11645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 11655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phNfc_sCompletionInfo_t CompInfo; 11665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 11675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->rem_nfcip_tgt_info.RemDevType = 11685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHal_eNfcIP1_Target; 11695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 11705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update initiator speed */ 11715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo->NfcIP_Info.Nfcip_Datarate = 11725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (phHalNfc_eDataRate_t) 11735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (p_nfcipinfo->initiator_speed); 11745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 11755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 11765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update ATR info */ 11775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo->NfcIP_Info.ATRInfo_Length = 11785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->atr_res_length; 11795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy( 11805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)rem_nfcipinfo->NfcIP_Info.ATRInfo, 11815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)p_nfcipinfo->atr_res_info, 11825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo->NfcIP_Info.ATRInfo_Length); 11835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 11845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update NFCID */ 11855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo->NfcIP_Info.NFCID_Length = 11865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->nfcid3i_length; 11875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy( 11885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)rem_nfcipinfo->NfcIP_Info.NFCID, 11895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)p_nfcipinfo->nfcid3i, 11905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo->NfcIP_Info.NFCID_Length); 11915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 11925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly CompInfo.status = status = NFCSTATUS_SUCCESS; 11935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NULL != psHciContext->p_target_info) 11945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 11955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly CompInfo.info = &(psHciContext->p_target_info); 11965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 11975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 11985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 11995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly CompInfo.info = &(p_nfcipinfo->rem_nfcip_tgt_info); 12005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 12015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Notify to the upper layer */ 12025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Tag_Notify(psHciContext, pHwRef, 12035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFC_NOTIFY_TARGET_DISCOVERED, 12045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &CompInfo); 12055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 12065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 12075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 12085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly static phHal_sEventInfo_t event_info; 12095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->rem_nfcip_tgt_info.RemDevType = 12115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHal_eNfcIP1_Initiator; 12125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update target speed */ 12145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo->NfcIP_Info.Nfcip_Datarate = 12155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (phHalNfc_eDataRate_t) 12165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (p_nfcipinfo->target_speed); 12175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update ATR info */ 12185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo->NfcIP_Info.ATRInfo_Length = 12195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->atr_req_length; 12205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy( 12215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)rem_nfcipinfo->NfcIP_Info.ATRInfo, 12225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)p_nfcipinfo->atr_req_info, 12235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo->NfcIP_Info.ATRInfo_Length); 12245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Update NFCID */ 12265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo->NfcIP_Info.NFCID_Length = 12275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->nfcid3t_length; 12285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy( 12295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)rem_nfcipinfo->NfcIP_Info.NFCID, 12305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)p_nfcipinfo->nfcid3t, 12315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly rem_nfcipinfo->NfcIP_Info.NFCID_Length); 12325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly event_info.eventHost = phHal_eHostController; 12345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly event_info.eventType = NFC_EVT_ACTIVATED; 12355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly event_info.eventSource = phHal_eNfcIP1_Target; 12365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly event_info.eventInfo.pRemoteDevInfo = 12375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &(p_nfcipinfo->rem_nfcip_tgt_info); 12385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Target_Select_Notify((void *)psHciContext, 12405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pHwRef, 12415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFC_NOTIFY_EVENT, 12425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &(event_info)); 12435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 12445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 12455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 12465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly default: 12475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 12485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 12495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 12505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 12515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 12525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 12535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 12545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 12555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 12565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 12575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic 12595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 12605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_InfoUpdate( 12615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 12625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t index, 12635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t *reg_value, 12645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t reg_length 12655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 12665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 12675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 12685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo = NULL; 12695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHal_sNfcIPInfo_t *p_rem_nfcipinfo = NULL; 12705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *)(psHciContext->p_nfcip_info ); 12725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_rem_nfcipinfo = &(p_nfcipinfo->rem_nfcip_tgt_info.RemoteDevInfo.NfcIP_Info); 12735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly switch(index) 12765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 12775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCIP_ATR_RES: 12785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 12795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (reg_length <= NFCIP_ATR_MAX_LENGTH) 12805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 12815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Remote device info provided by the user */ 12825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("\tNFCIP ATR_RES", reg_value, reg_length); 12845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_rem_nfcipinfo->ATRInfo_Length = 12865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->atr_res_length = reg_length; 12875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy((void *)p_rem_nfcipinfo->ATRInfo, 12895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)reg_value, 12905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_rem_nfcipinfo->ATRInfo_Length); 12915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy((void *)p_nfcipinfo->atr_res_info, 12935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)reg_value, 12945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->atr_res_length); 12955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NULL != psHciContext->p_target_info) 12965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 12975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHal_sNfcIPInfo_t *p_remtgt_info = NULL; 12985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* This is given to user */ 12995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_remtgt_info = 13005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &(psHciContext->p_target_info->RemoteDevInfo.NfcIP_Info); 13015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_remtgt_info->ATRInfo_Length = reg_length; 13025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy((void *)p_remtgt_info->ATRInfo, 13035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)reg_value, 13045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_remtgt_info->ATRInfo_Length); 13055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 13085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 13095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 13105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 13115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 13135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCIP_STATUS: 13155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 13165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (sizeof(*reg_value) == reg_length) 13175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef STATUS_BUFFER_CHECK 13185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly && (*reg_value <= NFCIP_STATUS_MAX_VALUE)) 13195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* #ifdef STATUS_ERROR */ 13205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 13215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("\tNFCIP STATUS", reg_value, reg_length); 13225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->linkstatus = *reg_value; 13235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 13255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 13265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 13275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 13285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 13305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCIP_NFCID3I: 13325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 13335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (reg_length <= NFCIP_NFCID_LENGTH) 13345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 13355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("\tNFCIP NFCID3I", reg_value, reg_length); 13365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->nfcid3i_length = 13375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_rem_nfcipinfo->NFCID_Length = reg_length; 13385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy((void *)p_rem_nfcipinfo->NFCID, 13395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)reg_value, 13405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_rem_nfcipinfo->NFCID_Length); 13415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy((void *)p_nfcipinfo->nfcid3i, 13425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)reg_value, 13435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly reg_length); 13445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if ((NULL != psHciContext->p_target_info) && 13455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NFCIP_INITIATOR == p_nfcipinfo->nfcip_type)) 13465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 13475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHal_sNfcIPInfo_t *p_remtgt_info = NULL; 13485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* This is given to user */ 13495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_remtgt_info = 13505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &(psHciContext->p_target_info->RemoteDevInfo.NfcIP_Info); 13515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_remtgt_info->NFCID_Length = reg_length; 13525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy((void *)p_remtgt_info->NFCID, 13535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)reg_value, 13545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_remtgt_info->NFCID_Length); 13555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 13585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 13595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 13605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 13615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 13635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCIP_NFCID3T: 13655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 13665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (reg_length <= NFCIP_NFCID_LENGTH) 13675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 13685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("\tNFCIP NFCID3T", reg_value, reg_length); 13695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->nfcid3t_length = 13705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_rem_nfcipinfo->NFCID_Length = reg_length; 13715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy((void *)p_rem_nfcipinfo->NFCID, 13725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)reg_value, 13735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_rem_nfcipinfo->NFCID_Length); 13745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy((void *)p_nfcipinfo->nfcid3t, 13755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)reg_value, 13765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly reg_length); 13775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if ((NULL != psHciContext->p_target_info) && 13785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NFCIP_TARGET == p_nfcipinfo->nfcip_type)) 13795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 13805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHal_sNfcIPInfo_t *p_remtgt_info = NULL; 13815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* This is given to user */ 13825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_remtgt_info = 13835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &(psHciContext->p_target_info->RemoteDevInfo.NfcIP_Info); 13845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_remtgt_info->NFCID_Length = reg_length; 13855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy((void *)p_remtgt_info->NFCID, 13865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)reg_value, 13875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_remtgt_info->NFCID_Length); 13885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 13915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 13925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 13935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 13945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 13965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCIP_PARAM: 13985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 13995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (sizeof(*reg_value) == reg_length) 14005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 14015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("\tNFCIP PARAMS", reg_value, reg_length); 14025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->initiator_speed = (phHciNfc_eP2PSpeed_t) 14035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ((*reg_value >> NFCIP_COMM_INITIATOR_SHIFT) 14045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly & NFCIP_COMM_FACTOR); 140520b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen if (p_nfcipinfo->nfcip_type == NFCIP_INITIATOR) { 140620b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen switch(p_nfcipinfo->initiator_speed) { 140720b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen case phNfc_eDataRate_106: 140820b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen ALOGI("I'm P2P %s Initiator @ 106 kb/s", p_nfcipinfo->activation_mode ? "Active" : "Passive"); 140920b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen break; 141020b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen case phNfc_eDataRate_212: 141120b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen ALOGI("I'm P2P %s Initiator @ 212 kb/s", p_nfcipinfo->activation_mode ? "Active" : "Passive"); 141220b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen break; 141320b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen case phNfc_eDataRate_424: 141420b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen ALOGI("I'm P2P %s Initiator @ 424 kb/s", p_nfcipinfo->activation_mode ? "Active" : "Passive"); 141520b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen break; 141620b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen } 141720b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen } 14185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->target_speed = (phHciNfc_eP2PSpeed_t) 14195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (*reg_value & NFCIP_COMM_FACTOR); 142020b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen if (p_nfcipinfo->nfcip_type == NFCIP_TARGET) { 142120b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen switch(p_nfcipinfo->target_speed) { 142220b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen case phNfc_eDataRate_106: 142320b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen ALOGI("I'm P2P %s Target @ 106 kb/s", p_nfcipinfo->activation_mode ? "Active" : "Passive"); 142420b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen break; 142520b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen case phNfc_eDataRate_212: 142620b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen ALOGI("I'm P2P %s Target @ 212 kb/s", p_nfcipinfo->activation_mode ? "Active" : "Passive"); 142720b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen break; 142820b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen case phNfc_eDataRate_424: 142920b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen ALOGI("I'm P2P %s Target @ 424 kb/s", p_nfcipinfo->activation_mode ? "Active" : "Passive"); 143020b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen break; 143120b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen } 143220b7bd5f6985dc890ac99d7d1e8154f965df02dbMartijn Coenen } 14335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->max_frame_len = NFCIP_DATA_RATE_CALC(*reg_value); 14345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 143532060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi if (p_nfcipinfo->max_frame_len > NFCIP_MAX_DEP_REQ_HDR_LEN) 14365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 143732060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi p_nfcipinfo->max_frame_len -= NFCIP_MAX_DEP_REQ_HDR_LEN; 143832060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi 143932060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi if (NULL != psHciContext->p_target_info) 144032060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi { 144132060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi phHal_sNfcIPInfo_t *p_remtgt_info = NULL; 144232060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi /* This is given to user */ 144332060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi p_remtgt_info = 144432060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi &(psHciContext->p_target_info->RemoteDevInfo.NfcIP_Info); 144532060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi p_remtgt_info->MaxFrameLength = p_nfcipinfo->max_frame_len; 144632060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi p_remtgt_info->Nfcip_Datarate = (phHalNfc_eDataRate_t) 14475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->initiator_speed; 144832060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi } 144932060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi } 145032060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi else 145132060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi { 145232060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi status = PHNFCSTVAL(CID_NFC_HCI, 145332060a1ad89a5791039bf4a7e89db6cbc3e669d0Sunil Jogi NFCSTATUS_INVALID_HCI_RESPONSE); 14545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 14555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 14565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 14575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 14585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 14595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 14605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 14615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 14625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 14635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCIP_MODE: 14645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 14655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (sizeof(*reg_value) == reg_length) 14665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 14675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("\tNFCIP MODE", reg_value, reg_length); 14685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->nfcip_mode = *reg_value; 14695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 14705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 14715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 14725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 14735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 14745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 14755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 14765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 14775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCIP_ATR_REQ: 14785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 14795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (reg_length <= NFCIP_ATR_MAX_LENGTH) 14805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 14815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("\tNFCIP ATR_REQ", reg_value, reg_length); 14825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_rem_nfcipinfo->ATRInfo_Length = 14835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->atr_req_length = reg_length; 14845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy((void *)p_rem_nfcipinfo->ATRInfo, 14855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)reg_value, 14865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_rem_nfcipinfo->ATRInfo_Length); 14875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy((void *)p_nfcipinfo->atr_req_info, 14885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)reg_value, 14895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->atr_req_length); 14905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (NULL != psHciContext->p_target_info) 14915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 14925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHal_sNfcIPInfo_t *p_remtgt_info = NULL; 14935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* This is given to user */ 14945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_remtgt_info = 14955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &(psHciContext->p_target_info->RemoteDevInfo.NfcIP_Info); 14965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_remtgt_info->NFCID_Length = reg_length; 14975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memcpy((void *)p_remtgt_info->ATRInfo, 14985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void *)reg_value, 14995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_remtgt_info->ATRInfo_Length); 15005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 15035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 15055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 15065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 15085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCIP_PSL1: 15105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (sizeof(*reg_value) == reg_length) 15125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("\tNFCIP PSL1", reg_value, reg_length); 15145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->psl1 = *reg_value; 15155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 15175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 15195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 15205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 15225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCIP_PSL2: 15245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (sizeof(*reg_value) == reg_length) 15265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("\tNFCIP PSL2", reg_value, reg_length); 15285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->psl2 = *reg_value; 15295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 15315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 15335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 15345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 15365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCIP_DID: 15385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (sizeof(*reg_value) == reg_length) 15405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("\tNFCIP DID", reg_value, reg_length); 15425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->did = *reg_value; 15435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 15455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 15475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 15485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 15505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCIP_NAD: 15525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (sizeof(*reg_value) == reg_length) 15545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("\tNFCIP NAD", reg_value, reg_length); 15565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->nad = *reg_value; 15575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 15595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 15615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 15625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 15645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NXP_NFCIP_OPTIONS: 15665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if (sizeof(*reg_value) == reg_length) 15685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly HCI_PRINT_BUFFER("\tNFCIP OPTIONS", reg_value, reg_length); 15705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->options = *reg_value; 15715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 15735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 15755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 15765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 15785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly default: 15805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 15815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 15825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_RESPONSE); 15835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly break; 15845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 15865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 15875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 15885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 15895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 15905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 15915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_SetMode( 15925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 15935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 15945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_eNfcIPType_t nfciptype, 15955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t nfcip_mode 15965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 15975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 15985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 15995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 16005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef) || 16015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (nfcip_mode > (uint8_t)NFCIP_MODE_ALL)) 16025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 16035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 16045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 16055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if (NFCIP_INVALID == nfciptype) 16065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 16075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION); 16085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 16095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 16105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 16115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 16125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 16135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 16145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 16155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 16165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 16175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 16185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 16195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 16205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 16215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = ((NFCIP_INITIATOR == nfciptype)? 16225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_init_pipe_info: 16235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_tgt_pipe_info); 16245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 16255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == p_pipe_info ) 16265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 16275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 16285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 16295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 16305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 16315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 16325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = p_pipe_info->pipe.pipe_id ; 16335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)NXP_NFCIP_MODE; 16345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 16355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_info = &nfcip_mode; 16365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_length = sizeof(uint8_t); 16375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 16385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid, (uint8_t)ANY_SET_PARAMETER); 16395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 16405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 16415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 16425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 16435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 16445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 16455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_SetNAD( 16465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 16475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 16485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_eNfcIPType_t nfciptype, 16495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t nad 16505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 16515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 16525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 16535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 16545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef)) 16555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 16565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 16575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 16585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if (NFCIP_INVALID == nfciptype) 16595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 16605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION); 16615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 16625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 16635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 16645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 16655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 16665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 16675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 16685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 16695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 16705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 16715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 16725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 16735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 16745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = ((NFCIP_INITIATOR == nfciptype)? 16755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_init_pipe_info: 16765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_tgt_pipe_info); 16775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 16785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == p_pipe_info ) 16795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 16805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 16815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 16825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 16835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 16845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 16855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = p_pipe_info->pipe.pipe_id ; 16865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)NXP_NFCIP_NAD; 16875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 16885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_info = &nad; 16895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_length = sizeof(uint8_t); 16905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 16915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid, (uint8_t)ANY_SET_PARAMETER); 16925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 16935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 16945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 16955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 16965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 16975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 16985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_SetDID( 16995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 17005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 17015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t did 17025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 17035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 17045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 17055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 17065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef)) 17075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 17085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 17095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 17105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 17115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 17125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 17135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 17145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 17155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 17165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 17175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 17185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 17195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 17205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 17215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 17225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = p_nfcipinfo->p_init_pipe_info; 17235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 17245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == p_pipe_info ) 17255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 17265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 17275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 17285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 17295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 17305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 17315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = p_pipe_info->pipe.pipe_id ; 17325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)NXP_NFCIP_DID; 17335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 17345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_info = &did; 17355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_length = sizeof(uint8_t); 17365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 17375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid, (uint8_t)ANY_SET_PARAMETER); 17385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 17395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 17405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 17415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 17425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 17435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 17445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_SetOptions( 17455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 17465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 17475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_eNfcIPType_t nfciptype, 17485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t nfcip_options 17495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 17505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 17515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 17525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 17535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef)) 17545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 17555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 17565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 17575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if (NFCIP_INVALID == nfciptype) 17585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 17595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION); 17605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 17615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 17625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 17635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 17645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 17655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 17665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 17675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 17685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 17695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 17705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 17715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 17725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 17735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = ((NFCIP_INITIATOR == p_nfcipinfo->nfcip_type)? 17745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_init_pipe_info: 17755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_tgt_pipe_info); 17765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = p_pipe_info->pipe.pipe_id ; 17775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)NXP_NFCIP_OPTIONS; 17785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 17795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_info = &nfcip_options; 17805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_length = sizeof(uint8_t); 17815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 17825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid, (uint8_t)ANY_SET_PARAMETER); 17835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 17845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 17855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 17865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 17875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 17885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_SetATRInfo( 17895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 17905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 17915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_eNfcIPType_t nfciptype, 17925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHal_sNfcIPCfg_t *atr_info 17935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 17945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 17955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 17965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 17975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == atr_info) || 17985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (atr_info->generalBytesLength > NFCIP_ATR_MAX_LENGTH)) 17995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 18005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 18015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 18025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if (NFCIP_INVALID == nfciptype) 18035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 18045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION); 18055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 18065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 18075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 18085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 18095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 18105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 18115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 18125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 18135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 18145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 18155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 18165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 18175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 18185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = ((NFCIP_INITIATOR == nfciptype)? 18195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_init_pipe_info: 18205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_tgt_pipe_info); 18215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 18225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == p_pipe_info ) 18235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 18245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 18255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 18265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 18275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 18285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 18295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = p_pipe_info->pipe.pipe_id ; 18305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)((NFCIP_INITIATOR == nfciptype)? 18315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NXP_NFCIP_ATR_REQ : 18325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NXP_NFCIP_ATR_RES); 18335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 18345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_info = atr_info->generalBytes; 18355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_length = (uint8_t) 18365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly atr_info->generalBytesLength; 18375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 18385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid, (uint8_t)ANY_SET_PARAMETER); 18395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 18405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 18415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 18425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 18435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 18445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 18455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_SetPSL1( 18465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 18475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 18485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t psl1 18495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 18505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 18515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 18525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 18535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef)) 18545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 18555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 18565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 18575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 18585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 18595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 18605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 18615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 18625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 18635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 18645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 18655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 18665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 18675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 18685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 18695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = p_nfcipinfo->p_init_pipe_info; 18705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 18715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == p_pipe_info ) 18725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 18735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 18745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 18755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 18765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 18775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 18785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = p_pipe_info->pipe.pipe_id ; 18795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)NXP_NFCIP_PSL1; 18805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 18815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_info = &psl1; 18825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_length = sizeof(uint8_t); 18835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 18845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid, (uint8_t)ANY_SET_PARAMETER); 18855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 18865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 18875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 18885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 18895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 18905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 18915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_SetPSL2( 18925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 18935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 18945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t psl2 18955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 18965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 18975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 18985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 18995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef)) 19005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 19015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 19025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 19035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 19045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 19055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 19065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 19075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 19085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 19095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 19105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 19115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 19125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 19135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 19145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 19155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = p_nfcipinfo->p_init_pipe_info; 19165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 19175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == p_pipe_info ) 19185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 19195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 19205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 19215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 19225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 19235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 19245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = p_pipe_info->pipe.pipe_id ; 19255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)NXP_NFCIP_PSL2; 19265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 19275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_info = &psl2; 19285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->param_length = sizeof(uint8_t); 19295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 19305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid, (uint8_t)ANY_SET_PARAMETER); 19315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 19325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 19335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 19345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 19355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 19365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 19375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_GetStatus( 19385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 19395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 19405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_eNfcIPType_t nfciptype 19415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 19425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 19435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 19445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 19455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef)) 19465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 19475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 19485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 19495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if (NFCIP_INVALID == nfciptype) 19505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 19515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION); 19525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 19535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 19545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 19555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 19565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 19575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 19585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 19595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 19605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 19615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 19625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 19635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 19645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 19655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = ((NFCIP_INITIATOR == nfciptype)? 19665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_init_pipe_info : 19675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_tgt_pipe_info); 19685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == p_pipe_info ) 19695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 19705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 19715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 19725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 19735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 19745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 19755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = p_pipe_info->pipe.pipe_id ; 19765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)NXP_NFCIP_STATUS; 19775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 19785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 19795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid, (uint8_t)ANY_GET_PARAMETER); 19805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 19815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 19825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 19835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 19845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 19855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 19865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_GetParam( 19875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 19885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 19895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_eNfcIPType_t nfciptype 19905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 19915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 19925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 19935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 19945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef)) 19955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 19965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 19975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 19985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if (NFCIP_INVALID == nfciptype) 19995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 20005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION); 20015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 20025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 20035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 20045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 20055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 20065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 20075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 20085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 20095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 20105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 20115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 20125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 20135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 20145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = ((NFCIP_INITIATOR == nfciptype)? 20155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_init_pipe_info : 20165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_tgt_pipe_info); 20175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == p_pipe_info ) 20185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 20195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 20205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 20215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 20225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 20235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 20245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = p_pipe_info->pipe.pipe_id ; 20255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)NXP_NFCIP_PARAM; 20265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 20275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 20285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid, (uint8_t)ANY_GET_PARAMETER); 20295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 20305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 20315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 20325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 20335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 20345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 20355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Initiator_Cont_Activate ( 20365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 20375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef 20385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 20395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 20405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 20415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 20425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef) ) 20435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 20445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 20455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 20465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 20475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 20485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 20495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 20505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 20515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 20525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo = NULL; 20535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 20545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 20555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 20565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 20575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->nfcip_type = NFCIP_INITIATOR; 20585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->host_rf_type = phHal_eNfcIP1_Initiator; 20595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = p_nfcipinfo->p_init_pipe_info; 20605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == p_pipe_info ) 20615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 20625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 20635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 20645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 20655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 20665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 20675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_HCP_Packet_t *hcp_packet = NULL; 20685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t length = HCP_HEADER_LEN; 20695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 20705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 20715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = p_pipe_info->pipe.pipe_id; 20725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->tx_total = 0 ; 20735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly hcp_packet = (phHciNfc_HCP_Packet_t *) psHciContext->send_buffer; 20745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Construct the HCP Frame */ 20755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Build_HCPFrame(hcp_packet,(uint8_t)HCP_CHAINBIT_DEFAULT, 20765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (uint8_t) pipeid, (uint8_t)HCP_MSG_TYPE_COMMAND, 20775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (uint8_t)NXP_NFCI_CONTINUE_ACTIVATION); 20785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 20795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->sent_msg_type = (uint8_t)HCP_MSG_TYPE_COMMAND; 20805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->prev_msg = (uint8_t)NXP_NFCI_CONTINUE_ACTIVATION; 20815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->tx_total = length; 20825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->response_pending = (uint8_t)TRUE; 20835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 20845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Send the Constructed HCP packet to the lower layer */ 20855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_HCP( psHciContext, pHwRef); 20865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->prev_status = status; 20875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 20885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 20895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 20905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 20915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 20925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 20935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 20945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_GetATRInfo ( 20955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 20965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 20975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_eNfcIPType_t nfciptype 20985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 20995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 21005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 21015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 21025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) 21035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly || (NULL == pHwRef)) 21045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 21055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 21065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 21075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if (NFCIP_INVALID == nfciptype) 21085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 21095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION); 21105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 21115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 21125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 21135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 21145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 21155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 21165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 21175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *p_nfcipinfo=NULL; 21185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *p_pipe_info=NULL; 21195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 21205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 21215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 21225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 21235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 21245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info = ((NFCIP_INITIATOR == nfciptype)? 21255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_init_pipe_info : 21265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_nfcipinfo->p_tgt_pipe_info); 21275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 21285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == p_pipe_info ) 21295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 21305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 21315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 21325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 21335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 21345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 21355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly p_pipe_info->reg_index = (uint8_t)((NFCIP_INITIATOR == nfciptype)? 21365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NXP_NFCIP_ATR_RES : 21375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NXP_NFCIP_ATR_REQ); 21385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = p_pipe_info->pipe.pipe_id ; 21395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Fill the data buffer and send the command to the 21405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly device */ 21415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = 21425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 21435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid, (uint8_t)ANY_GET_PARAMETER); 21445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 21455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 21465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 21475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 21485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 21495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS 21505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_NfcIP_SetMergeSak( 21515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_sContext_t *psHciContext, 21525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *pHwRef, 21535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t sak_value 21545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 21555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 21565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 21575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 21585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( (NULL == psHciContext) || (NULL == pHwRef) || 21595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (sak_value > (uint8_t)TRUE)) 21605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 21615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER); 21625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 21635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else if(NULL == psHciContext->p_nfcip_info) 21645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 21655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED); 21665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 21675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 21685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 21695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_NfcIP_Info_t *ps_nfcipinfo=NULL; 21705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phHciNfc_Pipe_Info_t *ps_pipe_info=NULL; 21715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t pipeid = 0; 21725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 21735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_nfcipinfo = (phHciNfc_NfcIP_Info_t *) 21745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly psHciContext->p_nfcip_info ; 21755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info = ps_nfcipinfo->p_tgt_pipe_info; 21765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 21775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL == ps_pipe_info ) 21785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 21795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = PHNFCSTVAL(CID_NFC_HCI, 21805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_INVALID_HCI_INFORMATION); 21815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 21825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 21835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 21845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid = ps_pipe_info->pipe.pipe_id ; 21855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info->reg_index = (uint8_t)NXP_NFCIP_MERGE; 21865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 21875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info->param_info = &sak_value; 21885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ps_pipe_info->param_length = sizeof(uint8_t); 21895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef, 21905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pipeid, (uint8_t)ANY_SET_PARAMETER); 21915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 21925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 21935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 21945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 21955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 21965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* #if defined (ENABLE_P2P) */ 21975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2198