2 * Copyright (C) 2010 NXP Semiconductors
\r
4 * Licensed under the Apache License, Version 2.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.apache.org/licenses/LICENSE-2.0
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
18 * =========================================================================== *
\r
21 * \file phHciNfc_WI.c *
\r
22 * \brief HCI WI gate Management Routines. *
\r
25 * Project: NFC-FRI-1.1 *
\r
27 * $Date: Tue Aug 18 10:22:34 2009 $ *
\r
28 * $Author: ing04880 $ *
\r
29 * $Revision: 1.33 $ *
\r
30 * $Aliases: NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $ * *
\r
31 * =========================================================================== *
\r
35 ***************************** Header File Inclusion ****************************
\r
37 #include <phNfcCompId.h>
\r
38 #include <phHciNfc_Pipe.h>
\r
39 #include <phHciNfc_WI.h>
\r
40 #include <phOsalNfc.h>
\r
41 #include <phHciNfc_Emulation.h>
\r
43 ****************************** Macro Definitions *******************************
\r
45 /* WI gate specific Events definition */
\r
46 #define NXP_EVT_SE_START_OF_TRANSACTION (0x01U)
\r
47 #define NXP_EVT_SE_END_OF_TRANSACTION (0x02U)
\r
48 #define NXP_EVT_SE_SWITCH_MODE (0x03U)
\r
49 #define NXP_EVT_SE_TRANSACTION (0x04U)
\r
51 /* WI Gate registry Settings */
\r
52 /* set default mode mode as virtual mode */
\r
53 #define NXP_SE_DEFAULTMODE_INDEX (0x01)
\r
54 #define NXP_SE_EVENTS_INDEX (0x05)
\r
56 /* Set Bit 0 and Bit 1 to report Start of transaction and End of transaction*/
\r
57 #define WI_ENABLE_EVENTS (0x04)
\r
58 #define WI_VIRTUALMODE (0x01)
\r
59 #define WI_OFFMODE (0x00)
\r
60 #define AID_SIZE (0x20)
\r
61 /****************** Structure and Enumeration ****************************/
\r
64 /****************** Static Function Declaration **************************/
\r
66 static uint8_t paypass_removal[2] = {0x50, 0x00};
\r
67 static uint8_t mifare_access = 0x60;
\r
71 phHciNfc_Recv_WI_Response(
\r
84 phHciNfc_Recv_WI_Event(
\r
97 phHciNfc_Send_WI_Event(
\r
98 phHciNfc_sContext_t *psHciContext,
\r
106 phHciNfc_WI_InfoUpdate(
\r
107 phHciNfc_sContext_t *psHciContext,
\r
109 uint8_t *reg_value,
\r
114 #if defined (WI_UPDATE_SEQ)
\r
117 phHciNfc_WI_Update_Sequence(
\r
118 phHciNfc_sContext_t *psHciContext,
\r
119 phHciNfc_eSeqType_t WI_seq
\r
121 #endif /* #if defined (WI_UPDATE_SEQ) */
\r
124 *************************** Function Definitions ***************************
\r
130 phHciNfc_WI_Init_Resources(
\r
131 phHciNfc_sContext_t *psHciContext
\r
134 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
135 phHciNfc_WI_Info_t *p_WI_info=NULL;
\r
137 if( NULL == psHciContext )
\r
139 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
143 if(( NULL == psHciContext->p_wi_info ) &&
\r
144 (phHciNfc_Allocate_Resource((void **)(&p_WI_info),
\r
145 sizeof(phHciNfc_WI_Info_t))== NFCSTATUS_SUCCESS))
\r
147 psHciContext->p_wi_info = p_WI_info;
\r
148 p_WI_info->current_seq = eWI_PipeOpen;
\r
149 p_WI_info->next_seq = eWI_PipeOpen;
\r
150 p_WI_info->pipe_id = (uint8_t)HCI_UNKNOWN_PIPE_ID;
\r
154 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INSUFFICIENT_RESOURCES);
\r
162 phHciNfc_WI_Get_PipeID(
\r
163 phHciNfc_sContext_t *psHciContext,
\r
167 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
169 if( (NULL != psHciContext)
\r
170 && ( NULL != ppipe_id )
\r
171 && ( NULL != psHciContext->p_wi_info )
\r
174 phHciNfc_WI_Info_t *p_wi_info=NULL;
\r
175 p_wi_info = (phHciNfc_WI_Info_t *)
\r
176 psHciContext->p_wi_info ;
\r
177 *ppipe_id = p_wi_info->pipe_id ;
\r
181 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
188 phHciNfc_WI_Update_PipeInfo(
\r
189 phHciNfc_sContext_t *psHciContext,
\r
191 phHciNfc_Pipe_Info_t *pPipeInfo
\r
194 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
196 if( NULL == psHciContext )
\r
198 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
200 else if(NULL == psHciContext->p_wi_info)
\r
202 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED);
\r
206 phHciNfc_WI_Info_t *p_WI_info=NULL;
\r
207 p_WI_info = (phHciNfc_WI_Info_t *)
\r
208 psHciContext->p_wi_info ;
\r
209 /* Update the pipe_id of the WI Gate obtained from HCI Response */
\r
210 p_WI_info->pipe_id = pipeID;
\r
211 p_WI_info->p_pipe_info = pPipeInfo;
\r
212 if ( NULL != pPipeInfo)
\r
214 /* Update the Response Receive routine of the WI Gate */
\r
215 pPipeInfo->recv_resp = &phHciNfc_Recv_WI_Response;
\r
216 /* Update the event Receive routine of the WI Gate */
\r
217 pPipeInfo->recv_event = &phHciNfc_Recv_WI_Event;
\r
224 #if defined (WI_UPDATE_SEQ)
\r
227 phHciNfc_WI_Update_Sequence(
\r
228 phHciNfc_sContext_t *psHciContext,
\r
229 phHciNfc_eSeqType_t WI_seq
\r
232 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
233 phHciNfc_WI_Info_t *p_WI_info=NULL;
\r
234 if( NULL == psHciContext )
\r
236 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
238 else if ( NULL == psHciContext->p_wi_info )
\r
240 status = PHNFCSTVAL(CID_NFC_HCI,
\r
241 NFCSTATUS_INVALID_HCI_INFORMATION);
\r
245 p_WI_info = (phHciNfc_WI_Info_t *)
\r
246 psHciContext->p_wi_info ;
\r
252 p_WI_info->current_seq = eWI_PipeOpen;
\r
253 p_WI_info->next_seq = eWI_SetDefaultMode ;
\r
257 p_WI_info->current_seq = p_WI_info->next_seq;
\r
262 p_WI_info->current_seq = eWI_PipeOpen;
\r
263 p_WI_info->next_seq = eWI_PipeClose ;
\r
269 }/* End of Update Sequence Switch */
\r
274 #endif /* #if defined (WI_UPDATE_SEQ) */
\r
277 phHciNfc_WI_Configure_Default(
\r
280 uint8_t enable_type
\r
283 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
284 static uint8_t param = 0;
\r
285 phHciNfc_sContext_t *psHciContext = ((phHciNfc_sContext_t *)psHciHandle);
\r
287 if( (NULL == psHciContext)||(NULL == pHwRef))
\r
289 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
291 else if ( NULL == psHciContext->p_wi_info )
\r
293 status = PHNFCSTVAL(CID_NFC_HCI,
\r
294 NFCSTATUS_INVALID_HCI_INFORMATION);
\r
298 phHciNfc_WI_Info_t *p_wi_info=NULL;
\r
299 phHciNfc_Pipe_Info_t *p_pipe_info=NULL;
\r
301 p_wi_info = (phHciNfc_WI_Info_t*)psHciContext->p_wi_info;
\r
303 p_pipe_info = p_wi_info->p_pipe_info;
\r
304 if(NULL == p_pipe_info)
\r
306 status = PHNFCSTVAL(CID_NFC_HCI,
\r
307 NFCSTATUS_INVALID_HCI_INFORMATION);
\r
311 p_pipe_info->reg_index = NXP_SE_DEFAULTMODE_INDEX;
\r
312 /* Enable/Disable Default Virtual Mode for SmartMx */
\r
313 param = (uint8_t)enable_type;
\r
314 p_pipe_info->param_info =(void*)¶m ;
\r
315 p_pipe_info->param_length = sizeof(param) ;
\r
316 status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
\r
317 p_wi_info->pipe_id,(uint8_t)ANY_SET_PARAMETER);
\r
319 }/* End of else part*/
\r
325 phHciNfc_WI_Get_Default(
\r
330 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
331 phHciNfc_sContext_t *psHciContext = ((phHciNfc_sContext_t *)psHciHandle);
\r
333 if( (NULL == psHciContext)||(NULL == pHwRef))
\r
335 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
337 else if ( NULL == psHciContext->p_wi_info )
\r
339 status = PHNFCSTVAL(CID_NFC_HCI,
\r
340 NFCSTATUS_INVALID_HCI_INFORMATION);
\r
344 phHciNfc_WI_Info_t *p_wiinfo=NULL;
\r
345 phHciNfc_Pipe_Info_t *p_pipe_info=NULL;
\r
347 p_wiinfo = (phHciNfc_WI_Info_t*)psHciContext->p_wi_info;
\r
349 p_pipe_info = p_wiinfo->p_pipe_info;
\r
350 if(NULL == p_pipe_info)
\r
352 status = PHNFCSTVAL(CID_NFC_HCI,
\r
353 NFCSTATUS_INVALID_HCI_INFORMATION);
\r
357 p_pipe_info->reg_index = NXP_SE_DEFAULTMODE_INDEX;
\r
359 status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
\r
361 (uint8_t)ANY_GET_PARAMETER);
\r
363 }/* End of else part*/
\r
370 phHciNfc_WI_Configure_Mode(
\r
373 phHal_eSmartMX_Mode_t e_smx_mode
\r
376 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
377 static uint8_t param = 0;
\r
378 phHciNfc_sContext_t *psHciContext = ((phHciNfc_sContext_t *)psHciHandle);
\r
380 if( (NULL == psHciContext)||(NULL == pHwRef))
\r
382 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
384 else if ( NULL == psHciContext->p_wi_info )
\r
386 status = PHNFCSTVAL(CID_NFC_HCI,
\r
387 NFCSTATUS_INVALID_HCI_INFORMATION);
\r
391 phHciNfc_WI_Info_t *p_wi_info=NULL;
\r
392 phHciNfc_Pipe_Info_t *p_pipe_info=NULL;
\r
394 p_wi_info = (phHciNfc_WI_Info_t*)psHciContext->p_wi_info;
\r
396 p_pipe_info = p_wi_info->p_pipe_info;
\r
397 if(NULL == p_pipe_info)
\r
399 status = PHNFCSTVAL(CID_NFC_HCI,
\r
400 NFCSTATUS_INVALID_HCI_INFORMATION);
\r
404 /* Switch the Mode of the SmartMx */
\r
405 param = (uint8_t)e_smx_mode;
\r
406 p_pipe_info->param_info =(void*)¶m ;
\r
407 p_pipe_info->param_length = sizeof(param) ;
\r
408 status = phHciNfc_Send_WI_Event( psHciContext, pHwRef,
\r
409 p_wi_info->pipe_id, NXP_EVT_SE_SWITCH_MODE );
\r
410 /* Send the Success Status as this is an event */
\r
411 status = ( (status == NFCSTATUS_PENDING)?
\r
412 NFCSTATUS_SUCCESS : status);
\r
414 }/* End of else part*/
\r
421 phHciNfc_WI_Configure_Notifications(
\r
424 phHciNfc_WI_Events_t eNotification
\r
427 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
428 static uint8_t param = 0;
\r
429 phHciNfc_sContext_t *psHciContext = ((phHciNfc_sContext_t *)psHciHandle);
\r
431 if( (NULL == psHciContext)||(NULL == pHwRef))
\r
433 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
435 else if ( NULL == psHciContext->p_wi_info )
\r
437 status = PHNFCSTVAL(CID_NFC_HCI,
\r
438 NFCSTATUS_INVALID_HCI_INFORMATION);
\r
442 phHciNfc_WI_Info_t *p_wi_info=NULL;
\r
443 phHciNfc_Pipe_Info_t *p_pipe_info=NULL;
\r
446 p_wi_info = (phHciNfc_WI_Info_t*)psHciContext->p_wi_info;
\r
447 p_pipe_info = p_wi_info->p_pipe_info;
\r
448 if(NULL == p_pipe_info)
\r
450 status = PHNFCSTVAL(CID_NFC_HCI,
\r
451 NFCSTATUS_INVALID_HCI_INFORMATION);
\r
455 if(eEnableEvents == eNotification)
\r
457 /* Enable start and end of transaction events*/
\r
458 param = WI_ENABLE_EVENTS;
\r
462 /* Disable Events*/
\r
465 p_pipe_info->reg_index = NXP_SE_EVENTS_INDEX;
\r
466 p_pipe_info->param_info =(void*)¶m ;
\r
467 p_pipe_info->param_length = sizeof(param) ;
\r
469 status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
\r
470 p_wi_info->pipe_id,(uint8_t)ANY_SET_PARAMETER);
\r
478 * \brief Sends WI gate specfic HCI Events to the connected reader device.
\r
479 * This function Sends the WI mode specific HCI Event frames in the HCP packet format to the
\r
480 * connected reader device.
\r
485 phHciNfc_Send_WI_Event(
\r
486 phHciNfc_sContext_t *psHciContext,
\r
492 phHciNfc_HCP_Packet_t *hcp_packet = NULL;
\r
493 phHciNfc_HCP_Message_t *hcp_message = NULL;
\r
494 phHciNfc_Pipe_Info_t *p_pipe_info = NULL;
\r
495 uint8_t length = 0;
\r
497 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
499 if( (NULL == psHciContext)
\r
500 || ( pipe_id > PHHCINFC_MAX_PIPE)
\r
501 ||(NULL == psHciContext->p_pipe_list[pipe_id])
\r
504 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
505 HCI_DEBUG("%s: Invalid Arguments passed \n",
\r
506 "phHciNfc_Send_WI_Event");
\r
510 p_pipe_info = (phHciNfc_Pipe_Info_t *)
\r
511 psHciContext->p_pipe_list[pipe_id];
\r
512 psHciContext->tx_total = 0 ;
\r
513 length =length+HCP_HEADER_LEN ;
\r
515 if( NXP_EVT_SE_SWITCH_MODE == event)
\r
517 hcp_packet = (phHciNfc_HCP_Packet_t *) psHciContext->send_buffer;
\r
518 /* Construct the HCP Frame */
\r
519 phHciNfc_Build_HCPFrame(hcp_packet,HCP_CHAINBIT_DEFAULT,
\r
520 (uint8_t) pipe_id, HCP_MSG_TYPE_EVENT, event);
\r
521 hcp_message = &(hcp_packet->msg.message);
\r
522 phHciNfc_Append_HCPFrame((uint8_t *)hcp_message->payload,
\r
523 i, (uint8_t *)p_pipe_info->param_info,
\r
524 p_pipe_info->param_length);
\r
525 length =(uint8_t)(length + i + p_pipe_info->param_length);
\r
529 status = PHNFCSTVAL( CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INSTRUCTION );
\r
530 HCI_DEBUG("%s: Invalid Send Event Request \n","phHciNfc_Send_WI_Event");
\r
533 if( NFCSTATUS_SUCCESS == status )
\r
535 p_pipe_info->sent_msg_type = HCP_MSG_TYPE_EVENT ;
\r
536 p_pipe_info->prev_msg = event ;
\r
537 psHciContext->tx_total = length;
\r
539 /* Send the Constructed HCP packet to the lower layer */
\r
540 status = phHciNfc_Send_HCP( psHciContext, pHwRef );
\r
541 p_pipe_info->prev_status = NFCSTATUS_PENDING;
\r
549 phHciNfc_Recv_WI_Response(
\r
552 uint8_t *pResponse,
\r
553 #ifdef ONE_BYTE_LEN
\r
560 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
561 phHciNfc_sContext_t *psHciContext =
\r
562 (phHciNfc_sContext_t *)psContext;
\r
565 if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == pResponse)
\r
568 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
570 else if(NULL == psHciContext->p_wi_info)
\r
572 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED);
\r
576 phHciNfc_WI_Info_t *p_wiinfo=NULL;
\r
577 uint8_t prev_cmd = ANY_GET_PARAMETER;
\r
578 p_wiinfo = (phHciNfc_WI_Info_t *)psHciContext->p_wi_info ;
\r
580 if( NULL == p_wiinfo->p_pipe_info)
\r
582 status = PHNFCSTVAL(CID_NFC_HCI,
\r
583 NFCSTATUS_INVALID_HCI_INFORMATION);
\r
587 prev_cmd = p_wiinfo->p_pipe_info->prev_msg ;
\r
590 case ANY_GET_PARAMETER:
\r
592 if (length > HCP_HEADER_LEN)
\r
594 status = phHciNfc_WI_InfoUpdate (psHciContext,
\r
595 p_wiinfo->p_pipe_info->reg_index,
\r
596 &pResponse[HCP_HEADER_LEN],
\r
597 (uint8_t)(length - HCP_HEADER_LEN));
\r
601 status = PHNFCSTVAL(CID_NFC_HCI,
\r
602 NFCSTATUS_INVALID_HCI_RESPONSE);
\r
606 case ANY_SET_PARAMETER:
\r
608 HCI_PRINT("WI Parameter Set \n");
\r
609 status = phHciNfc_EmuMgmt_Update_Seq(psHciContext,
\r
613 case ANY_OPEN_PIPE:
\r
615 HCI_PRINT("WI gate open pipe complete\n");
\r
616 status = phHciNfc_EmuMgmt_Update_Seq(psHciContext,
\r
620 case ANY_CLOSE_PIPE:
\r
622 HCI_PRINT("WI close pipe complete\n");
\r
623 status = phHciNfc_EmuMgmt_Update_Seq(psHciContext,
\r
629 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_RESPONSE);
\r
633 if( NFCSTATUS_SUCCESS == status )
\r
635 p_wiinfo->p_pipe_info->prev_status = NFCSTATUS_SUCCESS;
\r
636 p_wiinfo->current_seq = p_wiinfo->next_seq;
\r
645 phHciNfc_Recv_WI_Event(
\r
649 #ifdef ONE_BYTE_LEN
\r
656 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
657 phHal_sEventInfo_t EventInfo;
\r
658 /* phNfc_sNotificationInfo_t NotificationInfo; */
\r
659 phHciNfc_sContext_t *psHciContext =(phHciNfc_sContext_t *)psContext;
\r
662 if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == pEvent)
\r
665 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
667 else if(NULL == psHciContext->p_wi_info)
\r
669 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION);
\r
673 phHciNfc_HCP_Packet_t *p_packet = NULL;
\r
674 phHciNfc_HCP_Message_t *message = NULL;
\r
675 phHciNfc_WI_Info_t *p_wi_info = NULL;
\r
676 uint8_t EventType = 0;
\r
678 p_wi_info = (phHciNfc_WI_Info_t *)psHciContext->p_wi_info ;
\r
680 p_packet = (phHciNfc_HCP_Packet_t *)pEvent;
\r
681 message = &(p_packet->msg.message);
\r
682 /* Get the instruction bits from the Message Header */
\r
683 EventType = (uint8_t) GET_BITS8( message->msg_header,
\r
684 HCP_MSG_INSTRUCTION_OFFSET, HCP_MSG_INSTRUCTION_LEN);
\r
686 EventInfo.eventHost = phHal_eHostController;
\r
687 EventInfo.eventSource = phHal_ePICC_DevType;
\r
688 /* Now check for possible Transaction events for reporting */
\r
691 case NXP_EVT_SE_START_OF_TRANSACTION:
\r
693 EventInfo.eventType = NFC_EVT_START_OF_TRANSACTION;
\r
696 case NXP_EVT_SE_END_OF_TRANSACTION:
\r
698 EventInfo.eventType = NFC_EVT_END_OF_TRANSACTION;
\r
701 case NXP_EVT_SE_TRANSACTION:
\r
703 EventInfo.eventType = NFC_EVT_TRANSACTION;
\r
704 EventInfo.eventInfo.aid.buffer = (uint8_t *)p_wi_info->aid;
\r
705 /* check for AID data is at least 1 byte is their */
\r
706 if (length > HCP_HEADER_LEN)
\r
708 EventInfo.eventInfo.aid.length = length - HCP_HEADER_LEN;
\r
709 memcpy((void *)p_wi_info->aid, message->payload,
\r
710 EventInfo.eventInfo.aid.length );
\r
713 /* Filter Transaction event */
\r
714 if (EventInfo.eventInfo.aid.length == 4)
\r
716 EventInfo.eventType = NFC_EVT_APDU_RECEIVED;
\r
718 else if (EventInfo.eventInfo.aid.length == 2)
\r
720 if (!memcmp(paypass_removal, EventInfo.eventInfo.aid.buffer, EventInfo.eventInfo.aid.length))
\r
722 EventInfo.eventType = NFC_EVT_EMV_CARD_REMOVAL;
\r
724 else if(mifare_access == EventInfo.eventInfo.aid.buffer[0])
\r
726 EventInfo.eventType = NFC_EVT_MIFARE_ACCESS;
\r
730 EventInfo.eventInfo.aid.buffer = (uint8_t *)p_wi_info->aid;
\r
731 (void) memcpy((void *)p_wi_info->aid,message->payload,
\r
732 EventInfo.eventInfo.aid.length );
\r
737 status = PHNFCSTVAL(CID_NFC_HCI,
\r
738 NFCSTATUS_INVALID_HCI_INSTRUCTION);
\r
742 if (NFCSTATUS_SUCCESS == status )
\r
744 phHciNfc_Notify_Event( psHciContext, pHwRef,
\r
745 NFC_NOTIFY_EVENT, (void*)&EventInfo);
\r
753 phHciNfc_WI_InfoUpdate(
\r
754 phHciNfc_sContext_t *psHciContext,
\r
756 uint8_t *reg_value,
\r
760 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
761 phHciNfc_WI_Info_t *p_wiinfo = NULL;
\r
763 p_wiinfo = psHciContext->p_wi_info;
\r
765 if ((NXP_SE_DEFAULTMODE_INDEX == index) &&
\r
766 (sizeof(*reg_value) == reg_length))
\r
768 p_wiinfo->default_type = *reg_value;
\r
772 status = PHNFCSTVAL(CID_NFC_HCI,
\r
773 NFCSTATUS_INVALID_HCI_RESPONSE);
\r