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