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_IDMgmt.c                                                    *
225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* \brief HCI Identity Management Gate Routines.                               *
235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*                                                                             *
245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*                                                                             *
255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* Project: NFC-FRI-1.1                                                        *
265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*                                                                             *
275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* $Date: Fri Jun 11 11:19:25 2010 $                                           *
285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* $Author: ing04880 $                                                         *
295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* $Revision: 1.23 $                                                            *
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 <phHciNfc_Pipe.h>
405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phHciNfc_IDMgmt.h>
415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phOsalNfc.h>
425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*
445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly****************************** Macro Definitions *******************************
455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/
465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define FW_VERSION_INDEX        0x01U
485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define HCI_VERSION_INDEX       0x02U
495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define HW_VERSION_INDEX        0x03U
505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define VENDOR_NAME_INDEX       0x04U
515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define MODEL_ID_INDEX          0x05U
525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define GATES_LIST_INDEX        0x06U
535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define FULL_VERSION_INDEX      0x10U
545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define VERSION_LEN             0x03U
565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define GATES_LIST_LEN          0x20U
575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*
595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*************************** Structure and Enumeration ***************************
605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/
615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/** \defgroup grp_hci_nfc HCI Identity Management Component
645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */
675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellytypedef enum phHciNfc_IDMgmt_Seq{
695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    IDMGMT_PIPE_OPEN        = 0x00U,
705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    IDMGMT_GET_FULL_VERSION,
715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    IDMGMT_GET_FW_VERSION,
725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    IDMGMT_GET_HW_VERSION,
735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    IDMGMT_GET_HCI_VERSION,
745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    IDMGMT_GET_VENDOR_NAME,
755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    IDMGMT_GET_MODEL_ID,
765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    IDMGMT_GET_GATES_LIST,
775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    IDMGMT_PIPE_CLOSE
785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} phHciNfc_IDMgmt_Seq_t;
795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellytypedef struct phHciNfc_IDMgmt_Info{
815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_IDMgmt_Seq_t   id_cur_seq;
825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_IDMgmt_Seq_t   id_next_seq;
835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_Pipe_Info_t    *p_pipe_info;
845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t                 pipe_id;
855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint32_t                fw_version;
865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint32_t                hw_version;
875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    utf8_t                  vendor_name[VENDOR_NAME_LEN];
885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t                 model_id;
895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t                 hci_version;
905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t                 gates_list[GATES_LIST_LEN];
915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t                 full_version[NXP_FULL_VERSION_LEN];
925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} phHciNfc_IDMgmt_Info_t;
935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*
955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*************************** Static Function Declaration **************************
965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/
975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic
995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS
1005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_IDMgmt_InfoUpdate(
1015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                phHciNfc_sContext_t     *psHciContext,
1025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                phHal_sHwReference_t    *pHwRef,
1035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                uint8_t                 index,
1045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                uint8_t                 *reg_value,
1055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                uint8_t                 reg_length
1065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                         );
1075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic
1095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS
1105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_IDMgmt_Response(
1115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        void                *psHciContext,
1125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        void                *pHwRef,
1135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        uint8_t             *pResponse,
1145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN
1155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        uint8_t             length
1165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else
1175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        uint16_t            length
1185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
1195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                       );
1205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*
1235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*************************** Function Definitions ***************************
1245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/
1255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*!
1275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * \brief Allocates the resources of Identity Managment Gate.
1285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
1295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * This function Allocates the resources of the Identity Management
1305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * gate Information Structure.
1315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
1325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */
1335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS
1355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_IDMgmt_Init_Resources(
1365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                phHciNfc_sContext_t     *psHciContext
1375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                             )
1385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
1395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS                   status = NFCSTATUS_SUCCESS;
1405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_IDMgmt_Info_t      *p_identity_info=NULL;
1415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if( NULL == psHciContext )
1425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
1435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
1445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
1455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
1465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
1475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        if( ( NULL == psHciContext->p_identity_info )
1485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            && (phHciNfc_Allocate_Resource((void **)(&p_identity_info),
1495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    sizeof(phHciNfc_IDMgmt_Info_t))== NFCSTATUS_SUCCESS)
1505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        )
1515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
1525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            psHciContext->p_identity_info = p_identity_info;
1535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            p_identity_info->id_cur_seq = IDMGMT_PIPE_OPEN;
1545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            p_identity_info->id_next_seq = IDMGMT_PIPE_OPEN;
1555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            p_identity_info->pipe_id = (uint8_t)HCI_UNKNOWN_PIPE_ID;
1565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
1575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        else
1585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
1595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INSUFFICIENT_RESOURCES);
1605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
1615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
1625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
1635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
1645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*!
1665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * \brief Get the pipe_id of Identity Managment Gate.
1675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
1685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * This function Get the pipe_id of Identity Managment Gate.
1695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
1705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */
1715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS
1745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_IDMgmt_Get_PipeID(
1755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                phHciNfc_sContext_t     *psHciContext,
1765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                uint8_t                 *ppipe_id
1775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                             )
1785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
1795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS                   status = NFCSTATUS_SUCCESS;
1805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_IDMgmt_Info_t      *p_identity_info=NULL;
1815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if( (NULL != psHciContext)
1825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        && ( NULL != ppipe_id )
1835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        && ( NULL != psHciContext->p_identity_info )
1845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly      )
1855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
1865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        p_identity_info = (phHciNfc_IDMgmt_Info_t *)
1875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            psHciContext->p_identity_info ;
1885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        *ppipe_id =  p_identity_info->pipe_id  ;
1895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
1905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
1915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
1925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
1935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
1945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
1955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
1965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS
1985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_IDMgmt_Update_Sequence(
1995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                phHciNfc_sContext_t     *psHciContext,
2005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                phHciNfc_eSeqType_t     reader_seq
2015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                             )
2025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
2035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS                   status = NFCSTATUS_SUCCESS;
2045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_IDMgmt_Info_t      *p_identity_info=NULL;
2055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if( NULL == psHciContext )
2065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
2075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
2085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
2095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
2105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
2115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        if( NULL == psHciContext->p_identity_info )
2125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
2135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            status = PHNFCSTVAL(CID_NFC_HCI,
2145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        NFCSTATUS_INVALID_HCI_INFORMATION);
2155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
2165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        else
2175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
2185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            p_identity_info = (phHciNfc_IDMgmt_Info_t *)
2195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                psHciContext->p_identity_info ;
2205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            switch(reader_seq)
2215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
2225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case RESET_SEQ:
2235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case INIT_SEQ:
2245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
2255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    p_identity_info->id_cur_seq = IDMGMT_PIPE_OPEN;
2265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    p_identity_info->id_next_seq = IDMGMT_PIPE_OPEN;
2275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
2285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
2295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case UPDATE_SEQ:
2305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
2315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    p_identity_info->id_cur_seq =
2325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                            p_identity_info->id_next_seq;
2335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
2345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
2355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case INFO_SEQ:
2365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
2375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    p_identity_info->id_cur_seq = IDMGMT_GET_FW_VERSION;
2385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    p_identity_info->id_next_seq = IDMGMT_GET_FW_VERSION;
2395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
2405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
2415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case REL_SEQ:
2425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
2435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    p_identity_info->id_cur_seq = IDMGMT_PIPE_CLOSE;
2445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    p_identity_info->id_next_seq = IDMGMT_PIPE_CLOSE;
2455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
2465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
2475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                default:
2485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
2495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
2505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
2515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
2525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
2535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
2545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
2565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
2585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*!
2625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * \brief Initialisation of Identity Managment Gate.
2635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
2645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * This function initialses the Identity Management gate and
2655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * populates the Identity Management Information Structure
2665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
2675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */
2685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS
2705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_IDMgmt_Initialise(
2715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                phHciNfc_sContext_t     *psHciContext,
2725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                void                    *pHwRef
2735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                         )
2745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
2755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS                           status = NFCSTATUS_SUCCESS;
2765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_Pipe_Info_t                *p_pipe_info = NULL;
2775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_IDMgmt_Info_t              *p_identity_info=NULL;
2785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef ESTABLISH_SESSION
2795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t                             id_pipe_id = (uint8_t)HCI_UNKNOWN_PIPE_ID;
2805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
2815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if( NULL == psHciContext )
2835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
2845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
2855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
2865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
2875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
2885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        if( NULL == psHciContext->p_identity_info )
2905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
2915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            status = PHNFCSTVAL(CID_NFC_HCI,
2925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        NFCSTATUS_INVALID_HCI_INFORMATION);
2935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
2945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        else
2955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
2965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            p_identity_info = (phHciNfc_IDMgmt_Info_t *)
2975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                psHciContext->p_identity_info ;
2985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            p_pipe_info = p_identity_info->p_pipe_info;
2995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            if(NULL == p_pipe_info )
3005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
3015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = PHNFCSTVAL(CID_NFC_HCI,
3025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                NFCSTATUS_NOT_ALLOWED);
3035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
3045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            else
3055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
3065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                switch(p_identity_info->id_cur_seq )
3075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
3085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /* Identity Mgmt pipe open sequence */
3095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_PIPE_OPEN:
3105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
3115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status = phHciNfc_Open_Pipe( psHciContext,
3125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                                        pHwRef, p_pipe_info );
3135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(status == NFCSTATUS_SUCCESS)
3145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
3155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_GET_FW_VERSION;
3165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef ESTABLISH_SESSION
3175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            status = NFCSTATUS_PENDING;
3185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
3195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
3205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
3215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
3225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef ESTABLISH_SESSION
3235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_FW_VERSION:
3245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
3255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = FW_VERSION_INDEX;
3265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
3275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
3285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
3295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
3305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
3315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
3325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_GET_HW_VERSION;
3335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            /* status = NFCSTATUS_SUCCESS; */
3345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
3355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
3365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
3375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_HW_VERSION:
3385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
3395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = HW_VERSION_INDEX;
3405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
3415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
3425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
3435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
3445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
3455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
3465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_GET_HCI_VERSION;
3475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            /* status = NFCSTATUS_SUCCESS; */
3485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
3495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
3505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
3515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_HCI_VERSION:
3525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
3535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = HCI_VERSION_INDEX;
3545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
3555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
3565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
3575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
3585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
3595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
3605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_GET_VENDOR_NAME;
3615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            /* status = NFCSTATUS_SUCCESS; */
3625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
3635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
3645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
3655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_VENDOR_NAME:
3665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
3675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = VENDOR_NAME_INDEX;
3685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
3695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
3705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
3715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
3725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
3735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
3745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_GET_MODEL_ID;
3755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            /* status = NFCSTATUS_SUCCESS; */
3765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
3775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
3785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
3795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_MODEL_ID:
3805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
3815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = MODEL_ID_INDEX;
3825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
3835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
3845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
3855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
3865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
3875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
3885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_GET_GATES_LIST;
3895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            /* status = NFCSTATUS_SUCCESS; */
3905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
3915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
3925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
3935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_GATES_LIST:
3945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
3955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = GATES_LIST_INDEX;
3965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
3975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
3985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
3995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
4005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
4015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
4025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_GET_FULL_VERSION;
4035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            /* status = NFCSTATUS_SUCCESS; */
4045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
4055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
4065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
4075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_FULL_VERSION:
4085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
4095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = FULL_VERSION_INDEX;
4105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
4115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
4125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
4135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
4145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
4155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
4165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_PIPE_CLOSE;
4175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            status = NFCSTATUS_SUCCESS;
4185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
4195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
4205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
4215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
4225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    default:
4235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
4245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_SEQUENCE);
4255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
4265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
4275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }/* End of the Sequence Switch */
4295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }/* End of Pipe Info Memory Check */
4305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }/* End of the Identity Info Memory Check */
4325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    } /* End of Null Context Check */
4345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
4365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
4375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*!
4415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * \brief Initialisation of Identity Managment Gate.
4425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
4435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * This function initialses the Identity Management gate and
4445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * populates the Identity Management Information Structure
4455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
4465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */
4475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS
4495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_IDMgmt_Info_Sequence(
4505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                phHciNfc_sContext_t     *psHciContext,
4515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                void                    *pHwRef
4525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                         )
4535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
4545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS                           status = NFCSTATUS_SUCCESS;
4555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_Pipe_Info_t                *p_pipe_info = NULL;
4565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_IDMgmt_Info_t              *p_identity_info=NULL;
4575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t                             id_pipe_id = (uint8_t)HCI_UNKNOWN_PIPE_ID;
4585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if( NULL == psHciContext )
4605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
4615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
4625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
4635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
4645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
4655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        if( NULL == psHciContext->p_identity_info )
4675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
4685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            status = PHNFCSTVAL(CID_NFC_HCI,
4695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        NFCSTATUS_INVALID_HCI_INFORMATION);
4705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
4715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        else
4725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
4735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            p_identity_info = (phHciNfc_IDMgmt_Info_t *)
4745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                psHciContext->p_identity_info ;
4755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            p_pipe_info = p_identity_info->p_pipe_info;
4765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            if(NULL == p_pipe_info )
4775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
4785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = PHNFCSTVAL(CID_NFC_HCI,
4795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                NFCSTATUS_NOT_ALLOWED);
4805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
4815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            else
4825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
4835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                switch(p_identity_info->id_cur_seq )
4845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
4855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_FW_VERSION:
4865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
4875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = FW_VERSION_INDEX;
4885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
4895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
4905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
4915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
4925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
4935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
4945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_GET_HW_VERSION;
4955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            /* status = NFCSTATUS_SUCCESS; */
4965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
4975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
4985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
4995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_HW_VERSION:
5005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
5015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = HW_VERSION_INDEX;
5025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
5035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
5045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
5055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
5065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
5075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
5085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_GET_HCI_VERSION;
5095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            /* status = NFCSTATUS_SUCCESS; */
5105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
5115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
5125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
5135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_HCI_VERSION:
5145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
5155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = HCI_VERSION_INDEX;
5165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
5175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
5185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
5195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
5205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
5215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
5225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_GET_VENDOR_NAME;
5235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            /* status = NFCSTATUS_SUCCESS; */
5245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
5255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
5265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
5275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_VENDOR_NAME:
5285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
5295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = VENDOR_NAME_INDEX;
5305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
5315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
5325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
5335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
5345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
5355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
5365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_GET_MODEL_ID;
5375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            /* status = NFCSTATUS_SUCCESS; */
5385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
5395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
5405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
5415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_MODEL_ID:
5425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
5435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = MODEL_ID_INDEX;
5445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
5455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
5465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
5475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
5485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
5495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
5505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_GET_GATES_LIST;
5515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            /* status = NFCSTATUS_SUCCESS; */
5525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
5535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
5545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
5555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_GATES_LIST:
5565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
5575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = GATES_LIST_INDEX;
5585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
5595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
5605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
5615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
5625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
5635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
5645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_GET_FULL_VERSION;
5655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            /* status = NFCSTATUS_SUCCESS; */
5665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
5675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
5685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
5695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    case IDMGMT_GET_FULL_VERSION:
5705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
5715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        p_pipe_info->reg_index = FULL_VERSION_INDEX;
5725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        id_pipe_id = p_identity_info->pipe_id ;
5735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status =
5745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
5755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                id_pipe_id, (uint8_t)ANY_GET_PARAMETER );
5765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        if(NFCSTATUS_PENDING == status )
5775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        {
5785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            p_identity_info->id_next_seq = IDMGMT_PIPE_CLOSE;
5795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            status = NFCSTATUS_SUCCESS;
5805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        }
5815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
5825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
5835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    default:
5845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
5855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_SEQUENCE);
5865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        break;
5875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
5885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
5895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }/* End of the Sequence Switch */
5905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }/* End of Pipe Info Memory Check */
5915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
5925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }/* End of the Identity Info Memory Check */
5935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
5945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    } /* End of Null Context Check */
5955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
5965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
5975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
5985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
5995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*!
6005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * \brief Releases the resources allocated the Identity Management.
6015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
6025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * This function Releases the resources allocated the Identity Management.
6035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */
6045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
6055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS
6065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_IDMgmt_Release(
6075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                phHciNfc_sContext_t     *psHciContext,
6085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                void                    *pHwRef
6095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                             )
6105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
6115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS                           status = NFCSTATUS_SUCCESS;
6125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_Pipe_Info_t                *p_pipe_info = NULL;
6135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_IDMgmt_Info_t              *p_identity_info=NULL;
6145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    /* static phHciNfc_IDMgmt_Seq_t     identity_init_seq = IDMGMT_PIPE_CREATE; */
6155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
6165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if( (NULL == psHciContext) || (NULL == pHwRef) )
6175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
6185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly      status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
6195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
6205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
6215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
6225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        if( NULL != psHciContext->p_identity_info )
6235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
6245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            p_identity_info = (phHciNfc_IDMgmt_Info_t *)
6255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                psHciContext->p_identity_info ;
6265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            p_pipe_info = p_identity_info->p_pipe_info;
6275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
6285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            status = phHciNfc_Close_Pipe( psHciContext,
6295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                                pHwRef, p_pipe_info );
6305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
6315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        else
6325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
6335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_NOT_ALLOWED);
6345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
6355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }/* End of the Identity Info Memory Check */
6365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
6375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    } /* End of Null Context Check */
6385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
6395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
6405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
6415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
6425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
6435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*!
6445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * \brief Receives the HCI Response from the corresponding peripheral device.
6455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
6465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * This function receives the HCI Command Response from the connected NFC
6475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * Pheripheral device.
6485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */
6495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic
6505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS
6515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_Recv_IDMgmt_Response(
6525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        void                *psContext,
6535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        void                *pHwRef,
6545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        uint8_t             *pResponse,
6555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef ONE_BYTE_LEN
6565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        uint8_t             length
6575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else
6585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        uint16_t            length
6595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
6605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    )
6615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
6625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_sContext_t         *psHciContext =
6635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                    (phHciNfc_sContext_t *)psContext ;
6645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_IDMgmt_Info_t      *p_identity_info=NULL;
6655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS                   status = NFCSTATUS_SUCCESS;
6665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t                     prev_cmd = ANY_GET_PARAMETER;
6675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
6685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if( (NULL == psHciContext) || (NULL == pHwRef) )
6695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
6705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly      status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
6715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
6725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else if(  NULL == psHciContext->p_identity_info )
6735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
6745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED);
6755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
6765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
6775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
6785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        p_identity_info = (phHciNfc_IDMgmt_Info_t *)
6795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            psHciContext->p_identity_info ;
6805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        if( NULL != p_identity_info->p_pipe_info)
6815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
6825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            prev_cmd = p_identity_info->p_pipe_info->prev_msg ;
6835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            switch(prev_cmd)
6845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
6855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case ANY_GET_PARAMETER:
6865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
6875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = phHciNfc_IDMgmt_InfoUpdate(psHciContext,
6885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                (phHal_sHwReference_t *)pHwRef,
6895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                p_identity_info->p_pipe_info->reg_index,
6905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                &pResponse[HCP_HEADER_LEN],
6915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                    (uint8_t)(length - HCP_HEADER_LEN));
6925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
6935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
6945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case ANY_SET_PARAMETER:
6955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
6965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED);
6975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
6985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
6995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case ANY_OPEN_PIPE:
7005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
7015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
7025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
7035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case ANY_CLOSE_PIPE:
7045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
7055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
7065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
7075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                default:
7085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
7095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_RESPONSE);
7105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
7115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
7125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
7135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            if( NFCSTATUS_SUCCESS == status )
7145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
7155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                p_identity_info->p_pipe_info->prev_status = NFCSTATUS_SUCCESS;
7165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                p_identity_info->id_cur_seq = p_identity_info->id_next_seq;
7175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
7185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
7195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
7205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
7215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
7225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
7235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Function to Update the  Pipe Information */
7245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS
7255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_IDMgmt_Update_PipeInfo(
7265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                phHciNfc_sContext_t     *psHciContext,
7275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                uint8_t                 pipe_id,
7285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                phHciNfc_Pipe_Info_t    *pPipeInfo
7295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        )
7305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
7315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_IDMgmt_Info_t      *p_identity_info=NULL;
7325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS                   status = NFCSTATUS_SUCCESS;
7335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
7345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if( NULL == psHciContext )
7355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
7365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
7375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
7385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else if ( NULL == psHciContext->p_identity_info )
7395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
7405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION);
7415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
7425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
7435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
7445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        p_identity_info = (phHciNfc_IDMgmt_Info_t *)
7455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                psHciContext->p_identity_info ;
7465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Update the pipe_id of the ID Mgmt Gate obtained from the HCI Response */
7475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        p_identity_info->pipe_id = pipe_id;
7485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        p_identity_info->p_pipe_info = pPipeInfo;
7495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        if ( NULL != pPipeInfo)
7505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
7515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /* Update the Response Receive routine of the IDMgmt Gate */
7525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            pPipeInfo->recv_resp = &phHciNfc_Recv_IDMgmt_Response;
7535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
7545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
7555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
7565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
7575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
7585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
7595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic
7605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS
7615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyphHciNfc_IDMgmt_InfoUpdate(
7625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                phHciNfc_sContext_t     *psHciContext,
7635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                phHal_sHwReference_t    *pHwRef,
7645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                uint8_t                 index,
7655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                uint8_t                 *reg_value,
7665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                uint8_t                 reg_length
7675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                          )
7685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
7695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    phHciNfc_IDMgmt_Info_t      *p_identity_info=NULL;
7705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS                   status = NFCSTATUS_SUCCESS;
7715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t                     i=0;
7725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if( (NULL == psHciContext)
7735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        || (NULL == reg_value)
7745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        || (reg_length == 0)
7755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly      )
7765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
7775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
7785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
7795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else if ( NULL == psHciContext->p_identity_info )
7805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
7815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION);
7825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
7835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
7845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
7855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        p_identity_info = (phHciNfc_IDMgmt_Info_t *)
7865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                psHciContext->p_identity_info ;
7875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
7885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        switch(index)
7895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
7905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case FW_VERSION_INDEX :
7915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
7925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                HCI_PRINT_BUFFER("\tFW Version:",reg_value,reg_length);
7935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                for(i=0 ;(reg_length == VERSION_LEN)&&(i < reg_length); i++)
7945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
7955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    p_identity_info->fw_version |=
7965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                (uint32_t)(reg_value[VERSION_LEN - i - 1] << (BYTE_SIZE * i));
7975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
7985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                pHwRef->device_info.fw_version = p_identity_info->fw_version ;
7995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
8005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
8015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case HW_VERSION_INDEX :
8025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
8035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                HCI_PRINT_BUFFER("\tHW Version:",reg_value,reg_length);
8045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                for(i=0 ;(reg_length == VERSION_LEN)&&(i < reg_length); i++)
8055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
8065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    p_identity_info->hw_version |=
8075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                (uint32_t)(reg_value[VERSION_LEN - i - 1] << (BYTE_SIZE * i));
8085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
8095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                pHwRef->device_info.hw_version = p_identity_info->hw_version ;
8105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
8115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
8125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case VENDOR_NAME_INDEX :
8135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
8145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                for(i=0 ;(reg_length <= VENDOR_NAME_LEN)&&(i < reg_length); i++)
8155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
8165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    p_identity_info->vendor_name[i] = reg_value[i];
8175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    pHwRef->device_info.vendor_name[i]= reg_value[i];
8185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
8195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                HCI_DEBUG("\tVendor Name:%s",p_identity_info->vendor_name);
8205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
8215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
8225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case MODEL_ID_INDEX :
8235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
8245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                HCI_PRINT_BUFFER("\tModel ID:",reg_value,reg_length);
8255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                p_identity_info->model_id = reg_value[i] ;
8265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                pHwRef->device_info.model_id = p_identity_info->model_id  ;
8275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef NXP_HAL_ENABLE_SMX
8285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                if( NFC_HW_PN65N == pHwRef->device_info.model_id)
8295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
8305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
8315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                  pHwRef->smx_connected = TRUE;
8325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
8335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
8345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
8355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case HCI_VERSION_INDEX :
8365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
8375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                HCI_PRINT_BUFFER("\tHCI Version:",reg_value,reg_length);
8385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                p_identity_info->hci_version = reg_value[i] ;
8395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                pHwRef->device_info.hci_version = p_identity_info->hci_version  ;
8405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
8415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
8425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case GATES_LIST_INDEX :
8435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
8445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                HCI_PRINT_BUFFER("\tGates List:",reg_value,reg_length);
8455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                for(i=0 ;(reg_length <= GATES_LIST_LEN)&&(i < reg_length); i++)
8465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
8475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    p_identity_info->gates_list[i] = reg_value[i];
8485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
8495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
8505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
8515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case FULL_VERSION_INDEX :
8525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
8535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                HCI_PRINT_BUFFER("\tVERSION INFO:",reg_value,reg_length);
8545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                for(i=0 ;(reg_length <= NXP_FULL_VERSION_LEN)&&(i < reg_length); i++)
8555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
8565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    p_identity_info->full_version[i] = reg_value[i];
8575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    pHwRef->device_info.full_version[i]= reg_value[i];
8585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
8595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
8605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
8615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            default:
8625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
8635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION);
8645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
8655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            } /*End of the default Switch Case */
8665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
8675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        } /*End of the Index Switch */
8685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
8695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    } /* End of Context and the Identity information validity check */
8705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
8715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
8725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
873