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