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
19 * =========================================================================== *
\r
22 * \file phHciNfc_DevMgmt.c *
\r
23 * \brief HCI PN544 Device Management Gate Routines. *
\r
26 * Project: NFC-FRI-1.1 *
\r
28 * $Date: Fri Mar 12 10:21:54 2010 $ *
\r
29 * $Author: ing04880 $ *
\r
30 * $Revision: 1.29 $ *
\r
31 * $Aliases: NFC_FRI1.1_WK1007_R33_3,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
33 * =========================================================================== *
\r
37 ***************************** Header File Inclusion ****************************
\r
39 #include <phNfcConfig.h>
\r
40 #include <phNfcCompId.h>
\r
41 #include <phHciNfc_Pipe.h>
\r
42 #include <phHciNfc_DevMgmt.h>
\r
43 #include <phHciNfc_Emulation.h>
\r
44 #include <phOsalNfc.h>
\r
47 ****************************** Macro Definitions *******************************
\r
50 /* Commands for System Management module */
\r
51 #define NXP_RF_CHECK_SETTINGS 0x10U
\r
52 #define NXP_RF_UPDATE_SETTINGS 0x11U
\r
54 /* Self Test Commands */
\r
55 #define NXP_SELF_TEST_ANTENNA 0x20U
\r
56 #define NXP_SELF_TEST_SWP 0x21U
\r
57 #define NXP_SELF_TEST_NFCWI 0x22U
\r
58 #define NXP_SELF_TEST_PRBS 0x25U
\r
60 /* System Management propreitary control */
\r
61 #define NXP_DBG_READ 0x3EU
\r
62 #define NXP_DBG_WRITE 0x3FU
\r
64 /* System Management Events */
\r
65 #define NXP_EVT_SET_AUTONOMOUS 0x01U
\r
66 #define NXP_EVT_CLF_WAKEUP 0x02U
\r
68 /* System Management Information Events */
\r
69 #define NXP_EVT_INFO_TXLDO_OVERCUR 0x10U
\r
70 #define NXP_EVT_INFO_PMUVCC 0x11U
\r
71 #define NXP_EVT_INFO_EXT_RF_FIELD 0x12U
\r
72 #define NXP_EVT_INFO_MEM_VIOLATION 0x13U
\r
73 #define NXP_EVT_INFO_TEMP_OVERHEAT 0x14U
\r
74 #define NXP_EVT_INFO_LLC_ERROR 0x15U
\r
76 #define NFC_DEV_TXLDO_MASK 0x03U
\r
80 *************************** Structure and Enumeration ***************************
\r
84 /** \defgroup grp_hci_nfc HCI PN544 Device Management Component
\r
89 typedef enum phHciNfc_DevMgmt_Seq{
\r
90 DEV_MGMT_PIPE_OPEN = 0x00U,
\r
91 DEV_MGMT_SET_PWR_STATUS,
\r
92 DEV_MGMT_SET_INFO_EVT,
\r
93 DEV_MGMT_GET_EEPROM_INFO,
\r
97 DEV_MGMT_IFC_TO_RX_H,
\r
98 DEV_MGMT_IFC_TO_RX_L,
\r
99 DEV_MGMT_IFC_TO_TX_H,
\r
100 DEV_MGMT_IFC_TO_TX_L,
\r
101 DEV_MGMT_ANAIRQ_CONF,
\r
104 DEV_MGMT_INPUT_CLK,
\r
105 DEV_MGMT_UICC_PWR_REQUEST,
\r
106 DEV_MGMT_ACTIVE_GUARD_TO,
\r
107 DEV_MGMT_MAX_ACT_TO_LOW,
\r
108 DEV_MGMT_MAX_ACT_TO_HIGH,
\r
109 DEV_MGMT_UICC_CE_A_ACCESS,
\r
110 DEV_MGMT_UICC_CE_B_ACCESS,
\r
111 DEV_MGMT_UICC_CE_BP_ACCESS,
\r
112 DEV_MGMT_UICC_CE_F_ACCESS,
\r
113 DEV_MGMT_UICC_RD_A_ACCESS,
\r
114 DEV_MGMT_UICC_RD_B_ACCESS,
\r
115 DEV_MGMT_UICC_BIT_RATE,
\r
116 DEV_MGMT_UICC_RX_ERR_CNT,
\r
117 DEV_MGMT_UICC_TX_ERR_CNT,
\r
118 DEV_MGMT_LLC_GRD_TO_H,
\r
119 DEV_MGMT_LLC_GRD_TO_L,
\r
120 DEV_MGMT_LLC_ACK_TO_H,
\r
121 DEV_MGMT_LLC_ACK_TO_L,
\r
122 DEV_MGMT_FELICA_RC,
\r
123 DEV_MGMT_EVT_AUTONOMOUS,
\r
124 DEV_MGMT_PIPE_CLOSE
\r
125 } phHciNfc_DevMgmt_Seq_t;
\r
128 typedef struct phHciNfc_DevMgmt_Info{
\r
129 phHciNfc_DevMgmt_Seq_t current_seq;
\r
130 phHciNfc_DevMgmt_Seq_t next_seq;
\r
131 phHciNfc_Pipe_Info_t *p_pipe_info;
\r
132 uint8_t test_status;
\r
135 uint8_t pmuvcc_status;
\r
136 uint8_t overheat_status;
\r
138 uint8_t eeprom_crc;
\r
139 phNfc_sData_t test_result;
\r
141 } phHciNfc_DevMgmt_Info_t;
\r
145 *************************** Static Function Declaration **************************
\r
150 phHciNfc_DevMgmt_InfoUpdate(
\r
151 phHciNfc_sContext_t *psHciContext,
\r
152 phHal_sHwReference_t *pHwRef,
\r
154 uint8_t *reg_value,
\r
160 phHciNfc_Recv_DevMgmt_Response(
\r
161 void *psHciContext,
\r
163 uint8_t *pResponse,
\r
164 #ifdef ONE_BYTE_LEN
\r
173 phHciNfc_Recv_DevMgmt_Event(
\r
177 #ifdef ONE_BYTE_LEN
\r
187 phHciNfc_Send_DevMgmt_Command (
\r
188 phHciNfc_sContext_t *psHciContext,
\r
196 phHciNfc_Send_DevMgmt_Event (
\r
197 phHciNfc_sContext_t *psHciContext,
\r
204 *************************** Function Definitions ***************************
\r
209 phHciNfc_DevMgmt_Init_Resources(
\r
210 phHciNfc_sContext_t *psHciContext
\r
213 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
214 phHciNfc_DevMgmt_Info_t *p_device_mgmt_info=NULL;
\r
216 if( NULL == psHciContext )
\r
218 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
222 if(( NULL == psHciContext->p_device_mgmt_info ) &&
\r
223 (phHciNfc_Allocate_Resource((void **)(&p_device_mgmt_info),
\r
224 sizeof(phHciNfc_DevMgmt_Info_t))== NFCSTATUS_SUCCESS))
\r
226 psHciContext->p_device_mgmt_info = p_device_mgmt_info;
\r
227 p_device_mgmt_info->current_seq = DEV_MGMT_PIPE_OPEN;
\r
228 p_device_mgmt_info->next_seq = DEV_MGMT_PIPE_OPEN;
\r
229 p_device_mgmt_info->p_pipe_info = NULL;
\r
233 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INSUFFICIENT_RESOURCES);
\r
241 phHciNfc_DevMgmt_Get_PipeID(
\r
242 phHciNfc_sContext_t *psHciContext,
\r
246 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
248 if( (NULL != psHciContext)
\r
249 && ( NULL != ppipe_id )
\r
250 && ( NULL != psHciContext->p_device_mgmt_info )
\r
253 phHciNfc_Pipe_Info_t *p_pipe_info = NULL;
\r
254 p_pipe_info = ((phHciNfc_DevMgmt_Info_t *)
\r
255 psHciContext->p_device_mgmt_info)->p_pipe_info ;
\r
256 if (NULL != p_pipe_info)
\r
258 *ppipe_id = p_pipe_info->pipe.pipe_id ;
\r
262 *ppipe_id = (uint8_t)HCI_UNKNOWN_PIPE_ID;
\r
268 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION);
\r
275 phHciNfc_DevMgmt_Get_Test_Result(
\r
276 phHciNfc_sContext_t *psHciContext,
\r
277 phNfc_sData_t *p_test_result
\r
280 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
282 if( (NULL != psHciContext)
\r
283 && ( NULL != p_test_result )
\r
284 && ( NULL != psHciContext->p_device_mgmt_info )
\r
287 phHciNfc_DevMgmt_Info_t *p_device_mgmt_info=NULL;
\r
288 p_device_mgmt_info = (phHciNfc_DevMgmt_Info_t *)
\r
289 psHciContext->p_device_mgmt_info ;
\r
290 p_test_result->buffer = p_device_mgmt_info->test_result.buffer;
\r
291 p_test_result->length = p_device_mgmt_info->test_result.length;
\r
296 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION);
\r
304 phHciNfc_DevMgmt_Set_Test_Result(
\r
305 phHciNfc_sContext_t *psHciContext,
\r
306 uint8_t test_status
\r
309 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
311 if( (NULL != psHciContext)
\r
312 && ( NULL != psHciContext->p_device_mgmt_info )
\r
315 phHciNfc_DevMgmt_Info_t *p_device_mgmt_info=NULL;
\r
316 p_device_mgmt_info = (phHciNfc_DevMgmt_Info_t *)
\r
317 psHciContext->p_device_mgmt_info ;
\r
318 p_device_mgmt_info->test_status = test_status;
\r
323 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION);
\r
332 phHciNfc_DevMgmt_Update_PipeInfo(
\r
333 phHciNfc_sContext_t *psHciContext,
\r
335 phHciNfc_Pipe_Info_t *pPipeInfo
\r
338 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
340 if( NULL == psHciContext )
\r
342 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
344 else if(NULL == psHciContext->p_device_mgmt_info)
\r
346 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED);
\r
350 phHciNfc_DevMgmt_Info_t *p_device_mgmt_info=NULL;
\r
351 p_device_mgmt_info = (phHciNfc_DevMgmt_Info_t *)
\r
352 psHciContext->p_device_mgmt_info ;
\r
353 /* Update the pipe_info of the Device Management Gate obtained
\r
354 * from HCI Response */
\r
355 p_device_mgmt_info->p_pipe_info = pPipeInfo;
\r
356 if (( NULL != pPipeInfo)
\r
357 && ((uint8_t)HCI_UNKNOWN_PIPE_ID != pipeID)
\r
360 /* Update the Response Receive routine of the Device
\r
361 * Managment Gate */
\r
362 pPipeInfo->recv_resp = &phHciNfc_Recv_DevMgmt_Response;
\r
363 pPipeInfo->recv_event = &phHciNfc_Recv_DevMgmt_Event;
\r
372 phHciNfc_DevMgmt_Configure (
\r
373 phHciNfc_sContext_t *psHciContext,
\r
379 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
380 phHciNfc_Pipe_Info_t *p_pipe_info = NULL;
\r
381 uint8_t pipe_id = (uint8_t)HCI_UNKNOWN_PIPE_ID;
\r
385 if( (NULL == psHciContext) || (NULL == pHwRef) )
\r
387 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
389 else if( NULL == psHciContext->p_device_mgmt_info )
\r
391 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION);
\r
395 p_pipe_info = ((phHciNfc_DevMgmt_Info_t *)
\r
396 psHciContext->p_device_mgmt_info)->p_pipe_info ;
\r
398 if(NULL == p_pipe_info )
\r
400 status = PHNFCSTVAL(CID_NFC_HCI,
\r
401 NFCSTATUS_INVALID_HCI_SEQUENCE);
\r
405 pipe_id = p_pipe_info->pipe.pipe_id ;
\r
406 params[i++] = 0x00;
\r
407 params[i++] = (uint8_t)(address >> BYTE_SIZE);
\r
408 params[i++] = (uint8_t)address;
\r
409 params[i++] = value;
\r
410 p_pipe_info->param_info = ¶ms;
\r
411 p_pipe_info->param_length = i ;
\r
412 status = phHciNfc_Send_DevMgmt_Command( psHciContext, pHwRef,
\r
413 pipe_id, (uint8_t)NXP_DBG_WRITE );
\r
421 phHciNfc_DevMgmt_Get_Info (
\r
422 phHciNfc_sContext_t *psHciContext,
\r
428 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
429 phHciNfc_Pipe_Info_t *p_pipe_info = NULL;
\r
430 uint8_t pipe_id = (uint8_t)HCI_UNKNOWN_PIPE_ID;
\r
434 if( (NULL == psHciContext) || (NULL == pHwRef) )
\r
436 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
438 else if( NULL == psHciContext->p_device_mgmt_info )
\r
440 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION);
\r
444 p_pipe_info = ((phHciNfc_DevMgmt_Info_t *)
\r
445 psHciContext->p_device_mgmt_info)->p_pipe_info ;
\r
447 if(NULL == p_pipe_info )
\r
449 status = PHNFCSTVAL(CID_NFC_HCI,
\r
450 NFCSTATUS_INVALID_HCI_SEQUENCE);
\r
454 ((phHciNfc_DevMgmt_Info_t *)
\r
455 psHciContext->p_device_mgmt_info)->p_val = p_val;
\r
456 pipe_id = p_pipe_info->pipe.pipe_id ;
\r
457 params[i++] = 0x00;
\r
458 params[i++] = (uint8_t)(address >> BYTE_SIZE);
\r
459 params[i++] = (uint8_t) address;
\r
460 p_pipe_info->param_info = ¶ms;
\r
461 p_pipe_info->param_length = i ;
\r
462 status = phHciNfc_Send_DevMgmt_Command( psHciContext, pHwRef,
\r
463 pipe_id, (uint8_t)NXP_DBG_READ );
\r
471 * \brief Initialisation of PN544 Device Managment Gate.
\r
473 * This function initialses the PN544 Device Management gate and
\r
474 * populates the PN544 Device Management Information Structure
\r
479 phHciNfc_DevMgmt_Initialise(
\r
480 phHciNfc_sContext_t *psHciContext,
\r
484 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
485 phHciNfc_Pipe_Info_t *p_pipe_info = NULL;
\r
486 phHciNfc_DevMgmt_Info_t *p_device_mgmt_info=NULL;
\r
487 static uint8_t config = 0x10;
\r
489 if( ( NULL == psHciContext )
\r
490 || (NULL == pHwRef )
\r
493 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
495 else if (NULL == psHciContext->p_device_mgmt_info)
\r
497 status = PHNFCSTVAL(CID_NFC_HCI,
\r
498 NFCSTATUS_INVALID_HCI_INFORMATION);
\r
499 }/* End of the PN544 Device Info Memory Check */
\r
502 p_device_mgmt_info = (phHciNfc_DevMgmt_Info_t *)
\r
503 psHciContext->p_device_mgmt_info ;
\r
504 p_pipe_info = p_device_mgmt_info->p_pipe_info;
\r
506 if (NULL == p_pipe_info)
\r
508 status = PHNFCSTVAL(CID_NFC_HCI,
\r
509 NFCSTATUS_INVALID_HCI_SEQUENCE);
\r
513 switch(p_device_mgmt_info->current_seq )
\r
515 /* PN544 Device Mgmt pipe open sequence */
\r
516 case DEV_MGMT_PIPE_OPEN:
\r
518 status = phHciNfc_Open_Pipe( psHciContext,
\r
519 pHwRef, p_pipe_info );
\r
520 if(status == NFCSTATUS_SUCCESS)
\r
522 p_device_mgmt_info->next_seq =
\r
523 DEV_MGMT_FELICA_RC;
\r
524 status = NFCSTATUS_PENDING;
\r
528 case DEV_MGMT_GET_EEPROM_INFO:
\r
530 p_pipe_info->reg_index = DEVICE_INFO_EEPROM_INDEX;
\r
531 status = phHciNfc_Send_Generic_Cmd( psHciContext,
\r
532 pHwRef, (uint8_t)p_pipe_info->pipe.pipe_id,
\r
533 (uint8_t)ANY_GET_PARAMETER);
\r
534 if(NFCSTATUS_PENDING == status )
\r
536 #if ( NXP_NFC_IFC_TIMEOUT & 0x01 )
\r
537 p_device_mgmt_info->next_seq =
\r
538 DEV_MGMT_IFC_TO_TX_H;
\r
540 p_device_mgmt_info->next_seq =
\r
542 #endif /* #if ( NXP_NFC_IFC_TIMEOUT & 0x01 ) */
\r
546 case DEV_MGMT_GPIO_PDIR:
\r
549 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
550 NFC_ADDRESS_GPIO_PDIR , config );
\r
551 if(NFCSTATUS_PENDING == status )
\r
553 p_device_mgmt_info->next_seq =
\r
558 case DEV_MGMT_GPIO_PEN:
\r
560 config = NXP_NFC_GPIO_MASK(NXP_DOWNLOAD_GPIO)| 0x03 ;
\r
561 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
562 NFC_ADDRESS_GPIO_PEN , config );
\r
563 if(NFCSTATUS_PENDING == status )
\r
565 #if ( NXP_NFC_IFC_TIMEOUT & 0x01 )
\r
566 p_device_mgmt_info->next_seq =
\r
567 DEV_MGMT_IFC_TO_TX_H;
\r
569 p_device_mgmt_info->next_seq =
\r
571 #endif /* #if ( NXP_NFC_IFC_TIMEOUT & 0x01 ) */
\r
575 case DEV_MGMT_FELICA_RC:
\r
578 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
579 NFC_FELICA_RC_ADDR , config );
\r
580 if(NFCSTATUS_PENDING == status )
\r
583 if ((HCI_SELF_TEST == psHciContext->init_mode )
\r
584 || (HCI_NFC_DEVICE_TEST == psHciContext->init_mode ))
\r
586 p_device_mgmt_info->next_seq =
\r
587 DEV_MGMT_GPIO_PDIR;
\r
591 p_device_mgmt_info->next_seq =
\r
592 DEV_MGMT_GET_EEPROM_INFO;
\r
598 #if ( NXP_NFC_IFC_TIMEOUT & 0x01 )
\r
600 case DEV_MGMT_IFC_TO_TX_H:
\r
603 ( NXP_NFC_IFC_CONFIG_DEFAULT >> BYTE_SIZE ) /* 0x03 */;
\r
604 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
605 NFC_ADDRESS_IFC_TO_TX_H , config );
\r
606 if(NFCSTATUS_PENDING == status )
\r
608 p_device_mgmt_info->next_seq =
\r
609 DEV_MGMT_IFC_TO_TX_L;
\r
613 case DEV_MGMT_IFC_TO_TX_L:
\r
616 ( NXP_NFC_IFC_CONFIG_DEFAULT & BYTE_MASK ) /* 0xE8 */;
\r
617 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
618 NFC_ADDRESS_IFC_TO_TX_L , config );
\r
619 if(NFCSTATUS_PENDING == status )
\r
621 #if ( NXP_NFC_IFC_TIMEOUT & 0x02 )
\r
622 p_device_mgmt_info->next_seq =
\r
623 DEV_MGMT_IFC_TO_RX_H;
\r
625 p_device_mgmt_info->next_seq =
\r
627 #endif /* #if ( NXP_NFC_IFC_TIMEOUT & 0x02 ) */
\r
631 case DEV_MGMT_IFC_TO_RX_H:
\r
634 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
635 NFC_ADDRESS_IFC_TO_RX_H , config );
\r
636 if(NFCSTATUS_PENDING == status )
\r
638 p_device_mgmt_info->next_seq =
\r
639 DEV_MGMT_IFC_TO_RX_L;
\r
643 case DEV_MGMT_IFC_TO_RX_L:
\r
646 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
647 NFC_ADDRESS_IFC_TO_RX_L , config );
\r
648 if(NFCSTATUS_PENDING == status )
\r
650 p_device_mgmt_info->next_seq =
\r
656 #endif /* #if ( NXP_NFC_IFC_TIMEOUT & 0x01 ) */
\r
657 case DEV_MGMT_TX_LDO:
\r
659 #if ( NXP_HAL_VERIFY_EEPROM_CRC & 0x01U )
\r
660 if (0 != p_device_mgmt_info->eeprom_crc)
\r
662 status = NFCSTATUS_FAILED;
\r
667 config = (NFC_DEV_HWCONF_DEFAULT |
\r
668 (NXP_DEFAULT_TX_LDO & NFC_DEV_TXLDO_MASK));
\r
669 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
670 NFC_ADDRESS_HW_CONF , config );
\r
671 if(NFCSTATUS_PENDING == status )
\r
673 #if ( SW_TYPE_RF_TUNING_BF & 0x01)
\r
674 p_device_mgmt_info->next_seq = DEV_MGMT_ANAIRQ_CONF;
\r
676 p_device_mgmt_info->next_seq = DEV_MGMT_CLK_REQ;
\r
678 /* status = NFCSTATUS_SUCCESS; */
\r
683 #if ( SW_TYPE_RF_TUNING_BF & 0x01)
\r
684 /* The Analogue IRQ Configuartion */
\r
685 case DEV_MGMT_ANAIRQ_CONF:
\r
688 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
689 NFC_ADDRESS_ANAIRQ_CONF , config );
\r
690 if(NFCSTATUS_PENDING == status )
\r
692 p_device_mgmt_info->next_seq =
\r
694 /* status = NFCSTATUS_SUCCESS; */
\r
698 /* The PMOS Modulation Index */
\r
699 case DEV_MGMT_PMOS_MOD:
\r
701 config = NFC_DEV_PMOS_MOD_DEFAULT;
\r
702 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
703 NFC_ADDRESS_PMOS_MOD , config );
\r
704 if(NFCSTATUS_PENDING == status )
\r
706 p_device_mgmt_info->next_seq =
\r
708 /* status = NFCSTATUS_SUCCESS; */
\r
712 #endif /* #if ( SW_TYPE_RF_TUNING_BF & 0x01) */
\r
713 case DEV_MGMT_CLK_REQ:
\r
715 config = ((phHal_sHwConfig_t *)
\r
716 psHciContext->p_config_params)->clk_req ;
\r
717 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
718 NFC_ADDRESS_CLK_REQ , config );
\r
719 if(NFCSTATUS_PENDING == status )
\r
721 p_device_mgmt_info->next_seq =
\r
722 DEV_MGMT_INPUT_CLK;
\r
723 /* status = NFCSTATUS_SUCCESS; */
\r
727 case DEV_MGMT_INPUT_CLK:
\r
729 config = ((phHal_sHwConfig_t *)
\r
730 psHciContext->p_config_params)->input_clk;
\r
731 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
732 NFC_ADDRESS_CLK_INPUT , config );
\r
733 if(NFCSTATUS_PENDING == status )
\r
735 p_device_mgmt_info->next_seq =
\r
736 DEV_MGMT_UICC_PWR_REQUEST;
\r
740 case DEV_MGMT_UICC_PWR_REQUEST:
\r
742 config = NXP_UICC_PWR_REQUEST;
\r
743 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
744 NFC_ADDRESS_SWP_PWR_REQ , config );
\r
745 if(NFCSTATUS_PENDING == status )
\r
747 p_device_mgmt_info->next_seq =
\r
748 DEV_MGMT_UICC_RD_A_ACCESS;
\r
752 case DEV_MGMT_UICC_RD_A_ACCESS:
\r
754 #if ( NXP_UICC_RD_RIGHTS & 0x01 )
\r
755 config = (uint8_t) phHciNfc_RFReaderAGate;
\r
758 #endif /* #if ( NXP_UICC_RD_RIGHTS & 0x01 ) */
\r
759 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
760 NFC_ADDRESS_UICC_RD_A_ACCESS , config );
\r
761 if(NFCSTATUS_PENDING == status )
\r
763 p_device_mgmt_info->next_seq =
\r
764 DEV_MGMT_UICC_RD_B_ACCESS;
\r
768 case DEV_MGMT_UICC_RD_B_ACCESS:
\r
770 #if ( NXP_UICC_RD_RIGHTS & 0x02 )
\r
771 config = (uint8_t) phHciNfc_RFReaderBGate;
\r
774 #endif /* #if ( NXP_UICC_RD_RIGHTS & 0x02 ) */
\r
775 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
776 NFC_ADDRESS_UICC_RD_B_ACCESS , config );
\r
777 if(NFCSTATUS_PENDING == status )
\r
779 p_device_mgmt_info->next_seq =
\r
780 DEV_MGMT_UICC_CE_A_ACCESS;
\r
784 case DEV_MGMT_UICC_CE_A_ACCESS:
\r
786 #if defined(HOST_EMULATION) || ( NXP_UICC_CE_RIGHTS & 0x01 )
\r
787 config = (uint8_t) phHciNfc_CETypeAGate;
\r
790 #endif /* #if ( NXP_UICC_CE_RIGHTS & 0x01 ) */
\r
791 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
792 NFC_ADDRESS_UICC_CE_A_ACCESS , config );
\r
793 if(NFCSTATUS_PENDING == status )
\r
795 p_device_mgmt_info->next_seq =
\r
796 DEV_MGMT_UICC_CE_B_ACCESS;
\r
800 case DEV_MGMT_UICC_CE_B_ACCESS:
\r
802 #if defined(HOST_EMULATION) || ( NXP_UICC_CE_RIGHTS & 0x02 )
\r
803 config = (uint8_t) phHciNfc_CETypeBGate;
\r
806 #endif /* #if ( NXP_UICC_CE_RIGHTS & 0x02 ) */
\r
807 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
808 NFC_ADDRESS_UICC_CE_B_ACCESS , config );
\r
809 if(NFCSTATUS_PENDING == status )
\r
811 p_device_mgmt_info->next_seq =
\r
812 DEV_MGMT_UICC_CE_BP_ACCESS;
\r
816 case DEV_MGMT_UICC_CE_BP_ACCESS:
\r
818 #if defined(HOST_EMULATION) || ( NXP_UICC_CE_RIGHTS & 0x04 )
\r
819 config = (uint8_t) phHciNfc_CETypeBPrimeGate;
\r
822 #endif /* #if ( NXP_UICC_CE_RIGHTS & 0x04 ) */
\r
823 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
824 NFC_ADDRESS_UICC_CE_BP_ACCESS , config );
\r
825 if(NFCSTATUS_PENDING == status )
\r
827 p_device_mgmt_info->next_seq =
\r
828 DEV_MGMT_UICC_CE_F_ACCESS;
\r
832 case DEV_MGMT_UICC_CE_F_ACCESS:
\r
834 #if defined(HOST_EMULATION) || ( NXP_UICC_CE_RIGHTS & 0x08 )
\r
835 config = (uint8_t) phHciNfc_CETypeFGate;
\r
838 #endif /* #if ( NXP_UICC_CE_RIGHTS & 0x08 ) */
\r
839 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
840 NFC_ADDRESS_UICC_CE_F_ACCESS , config );
\r
841 if(NFCSTATUS_PENDING == status )
\r
843 p_device_mgmt_info->next_seq =
\r
844 DEV_MGMT_UICC_BIT_RATE;
\r
848 case DEV_MGMT_UICC_BIT_RATE:
\r
850 config = NXP_UICC_BIT_RATE;
\r
851 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
852 NFC_ADDRESS_SWP_BITRATE , config );
\r
853 if(NFCSTATUS_PENDING == status )
\r
855 #if defined (CFG_PWR_STATUS)
\r
856 p_device_mgmt_info->next_seq =
\r
857 DEV_MGMT_SET_PWR_STATUS;
\r
859 p_device_mgmt_info->next_seq =
\r
860 DEV_MGMT_SET_INFO_EVT;
\r
865 #ifdef CFG_PWR_STATUS
\r
866 case DEV_MGMT_SET_PWR_STATUS:
\r
868 config = NXP_SYSTEM_PWR_STATUS;
\r
869 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
870 NFC_ADDRESS_PWR_STATUS , config );
\r
871 if(NFCSTATUS_PENDING == status )
\r
873 p_device_mgmt_info->next_seq =
\r
874 DEV_MGMT_SET_INFO_EVT;
\r
879 case DEV_MGMT_SET_INFO_EVT:
\r
881 config = NXP_SYSTEM_EVT_INFO;
\r
882 status = phHciNfc_Set_Param(psHciContext, pHwRef,
\r
883 p_pipe_info, DEVICE_INFO_EVT_INDEX,
\r
884 (uint8_t *)&config, sizeof(config) );
\r
885 if(NFCSTATUS_PENDING == status )
\r
887 #if ( HOST_LINK_TIMEOUT & 0x01 )
\r
888 p_device_mgmt_info->next_seq =
\r
889 DEV_MGMT_LLC_GRD_TO_H;
\r
891 p_device_mgmt_info->next_seq =
\r
892 DEV_MGMT_EVT_AUTONOMOUS;
\r
893 status = NFCSTATUS_SUCCESS;
\r
894 #endif /* #if ( HOST_LINK_TIMEOUT & 0x01 ) */
\r
898 #if ( HOST_LINK_TIMEOUT & 0x01 )
\r
900 case DEV_MGMT_LLC_GRD_TO_H:
\r
903 ( NXP_NFC_LINK_GRD_CFG_DEFAULT >> BYTE_SIZE ) /* 0x00 */;
\r
904 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
905 NFC_ADDRESS_LLC_GRD_TO_H , config );
\r
906 if(NFCSTATUS_PENDING == status )
\r
908 p_device_mgmt_info->next_seq =
\r
909 DEV_MGMT_LLC_GRD_TO_L;
\r
913 case DEV_MGMT_LLC_GRD_TO_L:
\r
916 ( NXP_NFC_LINK_GRD_CFG_DEFAULT & BYTE_MASK ) /* 0x32 */;
\r
917 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
918 NFC_ADDRESS_LLC_GRD_TO_L , config );
\r
919 if(NFCSTATUS_PENDING == status )
\r
921 #if ( HOST_LINK_TIMEOUT & 0x02 )
\r
922 p_device_mgmt_info->next_seq =
\r
923 DEV_MGMT_LLC_ACK_TO_H;
\r
925 p_device_mgmt_info->next_seq =
\r
926 DEV_MGMT_EVT_AUTONOMOUS;
\r
927 status = NFCSTATUS_SUCCESS;
\r
928 #endif /* #if ( HOST_LINK_TIMEOUT & 0x02 ) */
\r
932 case DEV_MGMT_LLC_ACK_TO_H:
\r
935 ( NXP_NFC_LINK_ACK_CFG_DEFAULT >> BYTE_SIZE )/* 0x00 */;
\r
936 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
937 NFC_ADDRESS_LLC_ACK_TO_H , config );
\r
938 if(NFCSTATUS_PENDING == status )
\r
940 p_device_mgmt_info->next_seq =
\r
941 DEV_MGMT_LLC_ACK_TO_L;
\r
945 case DEV_MGMT_LLC_ACK_TO_L:
\r
948 ( NXP_NFC_LINK_ACK_CFG_DEFAULT & BYTE_MASK ) /* 0x00 */;;
\r
949 status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
\r
950 NFC_ADDRESS_LLC_ACK_TO_L , config );
\r
951 if(NFCSTATUS_PENDING == status )
\r
953 p_device_mgmt_info->next_seq =
\r
954 DEV_MGMT_EVT_AUTONOMOUS;
\r
955 status = NFCSTATUS_SUCCESS;
\r
960 #endif /* #if ( HOST_LINK_TIMEOUT & 0x01 ) */
\r
963 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_SEQUENCE);
\r
967 }/* End of the Sequence Switch */
\r
970 } /* End of Null Context Check */
\r
976 * \brief Releases the resources allocated the PN544 Device Management.
\r
978 * This function Releases the resources allocated the PN544 Device Management
\r
979 * and resets the hardware to the reset state.
\r
983 phHciNfc_DevMgmt_Release(
\r
984 phHciNfc_sContext_t *psHciContext,
\r
988 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
989 phHciNfc_Pipe_Info_t *p_pipe_info = NULL;
\r
990 phHciNfc_DevMgmt_Info_t *p_device_mgmt_info=NULL;
\r
992 if( (NULL == psHciContext) || (NULL == pHwRef) )
\r
994 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
998 if( NULL != psHciContext->p_device_mgmt_info )
\r
1000 p_device_mgmt_info = (phHciNfc_DevMgmt_Info_t *)
\r
1001 psHciContext->p_device_mgmt_info ;
\r
1002 switch(p_device_mgmt_info->current_seq)
\r
1005 /* PN544 Device pipe close sequence */
\r
1006 case DEV_MGMT_EVT_AUTONOMOUS:
\r
1008 p_pipe_info = p_device_mgmt_info->p_pipe_info;
\r
1010 p_pipe_info->param_info = NULL;
\r
1011 p_pipe_info->param_length = HCP_ZERO_LEN;
\r
1013 status = phHciNfc_Send_DevMgmt_Event(psHciContext, pHwRef,
\r
1014 p_pipe_info->pipe.pipe_id, NXP_EVT_SET_AUTONOMOUS);
\r
1015 if(status == NFCSTATUS_PENDING)
\r
1017 p_device_mgmt_info->next_seq = DEV_MGMT_PIPE_OPEN;
\r
1018 status = NFCSTATUS_SUCCESS;
\r
1022 /* PN544 Device pipe close sequence */
\r
1023 case DEV_MGMT_PIPE_CLOSE:
\r
1025 p_pipe_info = p_device_mgmt_info->p_pipe_info;
\r
1027 status = phHciNfc_Close_Pipe( psHciContext,
\r
1028 pHwRef, p_pipe_info );
\r
1029 if(status == NFCSTATUS_SUCCESS)
\r
1031 p_device_mgmt_info->next_seq = DEV_MGMT_PIPE_OPEN;
\r
1032 /* status = NFCSTATUS_PENDING; */
\r
1038 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_SEQUENCE);
\r
1042 }/* End of the Sequence Switch */
\r
1044 }/* End of the PN544 Device Info Memory Check */
\r
1046 } /* End of Null Context Check */
\r
1052 phHciNfc_DevMgmt_Update_Sequence(
\r
1053 phHciNfc_sContext_t *psHciContext,
\r
1054 phHciNfc_eSeqType_t DevMgmt_seq
\r
1057 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
1058 phHciNfc_DevMgmt_Info_t *p_device_mgmt_info=NULL;
\r
1059 if( NULL == psHciContext )
\r
1061 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
1063 else if ( NULL == psHciContext->p_device_mgmt_info )
\r
1065 status = PHNFCSTVAL(CID_NFC_HCI,
\r
1066 NFCSTATUS_INVALID_HCI_INFORMATION);
\r
1070 p_device_mgmt_info = (phHciNfc_DevMgmt_Info_t *)
\r
1071 psHciContext->p_device_mgmt_info ;
\r
1072 switch(DevMgmt_seq)
\r
1077 p_device_mgmt_info->current_seq = DEV_MGMT_PIPE_OPEN;
\r
1078 p_device_mgmt_info->next_seq = DEV_MGMT_PIPE_OPEN ;
\r
1083 p_device_mgmt_info->current_seq = p_device_mgmt_info->next_seq;
\r
1089 p_device_mgmt_info->current_seq = DEV_MGMT_EVT_AUTONOMOUS;
\r
1090 p_device_mgmt_info->next_seq = DEV_MGMT_EVT_AUTONOMOUS ;
\r
1097 }/* End of Update Sequence Switch */
\r
1106 * \brief Perform the System Management Tests
\r
1107 * provided by the corresponding peripheral device.
\r
1109 * This function performs the System Management Tests provided by the NFC
\r
1110 * Peripheral device.
\r
1114 phHciNfc_DevMgmt_Test(
\r
1117 uint8_t test_type,
\r
1118 phNfc_sData_t *test_param
\r
1121 phHciNfc_sContext_t *psHciContext =
\r
1122 (phHciNfc_sContext_t *)psContext ;
\r
1123 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
1124 phHciNfc_Pipe_Info_t *p_pipe_info = NULL;
\r
1125 uint8_t pipe_id = (uint8_t)HCI_UNKNOWN_PIPE_ID;
\r
1127 if( (NULL == psHciContext) || (NULL == pHwRef) )
\r
1129 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
1131 else if( NULL == psHciContext->p_device_mgmt_info )
\r
1133 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION);
\r
1137 phHciNfc_DevMgmt_Info_t *p_device_mgmt_info = (phHciNfc_DevMgmt_Info_t *)
\r
1138 psHciContext->p_device_mgmt_info ;
\r
1139 p_pipe_info = ((phHciNfc_DevMgmt_Info_t *)
\r
1140 psHciContext->p_device_mgmt_info)->p_pipe_info ;
\r
1143 case NXP_SELF_TEST_ANTENNA:
\r
1144 case NXP_SELF_TEST_SWP:
\r
1145 case NXP_SELF_TEST_PRBS:
\r
1146 /* case NXP_SELF_TEST_NFCWI: */
\r
1148 if (NULL != p_pipe_info)
\r
1150 pipe_id = p_pipe_info->pipe.pipe_id ;
\r
1151 if ( NULL != test_param )
\r
1153 p_pipe_info->param_info = test_param->buffer;
\r
1154 p_pipe_info->param_length = (uint8_t)test_param->length;
\r
1156 p_device_mgmt_info->test_result.buffer = NULL;
\r
1157 p_device_mgmt_info->test_result.length = 0;
\r
1159 phHciNfc_Send_DevMgmt_Command( psHciContext, pHwRef,
\r
1160 pipe_id, (uint8_t)test_type );
\r
1164 status = PHNFCSTVAL(CID_NFC_HCI,
\r
1165 NFCSTATUS_INVALID_HCI_INFORMATION);
\r
1171 status = PHNFCSTVAL(CID_NFC_HCI,
\r
1172 NFCSTATUS_FEATURE_NOT_SUPPORTED);
\r
1183 * \brief Receives the HCI Response from the corresponding peripheral device.
\r
1185 * This function receives the HCI Command Response from the connected NFC
\r
1186 * Peripheral device.
\r
1190 phHciNfc_Recv_DevMgmt_Response(
\r
1193 uint8_t *pResponse,
\r
1194 #ifdef ONE_BYTE_LEN
\r
1201 phHciNfc_sContext_t *psHciContext =
\r
1202 (phHciNfc_sContext_t *)psContext ;
\r
1203 phHciNfc_DevMgmt_Info_t *p_device_mgmt_info=NULL;
\r
1204 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
1205 uint8_t prev_cmd = ANY_GET_PARAMETER;
\r
1207 if( (NULL == psHciContext) || (NULL == pHwRef) )
\r
1209 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
1211 else if( NULL == psHciContext->p_device_mgmt_info )
\r
1213 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED);
\r
1217 p_device_mgmt_info = (phHciNfc_DevMgmt_Info_t *)
\r
1218 psHciContext->p_device_mgmt_info ;
\r
1219 prev_cmd = p_device_mgmt_info->p_pipe_info->prev_msg ;
\r
1222 case ANY_GET_PARAMETER:
\r
1224 status = phHciNfc_DevMgmt_InfoUpdate(psHciContext,
\r
1225 (phHal_sHwReference_t *)pHwRef,
\r
1226 p_device_mgmt_info->p_pipe_info->reg_index,
\r
1227 &pResponse[HCP_HEADER_LEN],
\r
1228 (uint8_t)(length - HCP_HEADER_LEN));
\r
1231 case ANY_SET_PARAMETER:
\r
1235 case ANY_OPEN_PIPE:
\r
1239 case ANY_CLOSE_PIPE:
\r
1241 phOsalNfc_FreeMemory(p_device_mgmt_info->p_pipe_info);
\r
1242 p_device_mgmt_info->p_pipe_info = NULL;
\r
1243 psHciContext->p_pipe_list[PIPETYPE_STATIC_LINK] = NULL;
\r
1246 case NXP_DBG_READ:
\r
1247 /* fall through */
\r
1248 case NXP_DBG_WRITE:
\r
1250 if( NULL != p_device_mgmt_info->p_val )
\r
1252 *p_device_mgmt_info->p_val = (uint8_t)( length > HCP_HEADER_LEN ) ?
\r
1253 pResponse[HCP_HEADER_LEN]: 0;
\r
1254 p_device_mgmt_info->p_val = NULL;
\r
1258 /* Self Test Commands */
\r
1259 case NXP_SELF_TEST_ANTENNA:
\r
1260 case NXP_SELF_TEST_SWP:
\r
1261 case NXP_SELF_TEST_NFCWI:
\r
1262 case NXP_SELF_TEST_PRBS:
\r
1264 p_device_mgmt_info->test_status = (uint8_t) ( length > HCP_HEADER_LEN ) ?
\r
1265 pResponse[HCP_HEADER_LEN]: 0;
\r
1266 p_device_mgmt_info->test_result.buffer = (uint8_t)( length > HCP_HEADER_LEN ) ?
\r
1267 &pResponse[HCP_HEADER_LEN]: NULL;
\r
1268 p_device_mgmt_info->test_result.length = ( length - HCP_HEADER_LEN );
\r
1273 status = PHNFCSTVAL(CID_NFC_HCI,
\r
1274 NFCSTATUS_INVALID_HCI_RESPONSE);
\r
1278 if( NFCSTATUS_SUCCESS == status )
\r
1280 if( NULL != p_device_mgmt_info->p_pipe_info)
\r
1282 p_device_mgmt_info->p_pipe_info->prev_status = NFCSTATUS_SUCCESS;
\r
1284 p_device_mgmt_info->current_seq = p_device_mgmt_info->next_seq;
\r
1292 * \brief Receives the HCI Event from the corresponding peripheral device.
\r
1294 * This function receives the HCI Event from the connected NFC
\r
1295 * Peripheral device.
\r
1300 phHciNfc_Recv_DevMgmt_Event(
\r
1304 #ifdef ONE_BYTE_LEN
\r
1311 phHciNfc_sContext_t *psHciContext =
\r
1312 (phHciNfc_sContext_t *)psContext ;
\r
1313 phHciNfc_DevMgmt_Info_t *p_device_mgmt_info=NULL;
\r
1314 phHciNfc_HCP_Packet_t *hcp_packet = NULL;
\r
1315 phHciNfc_HCP_Message_t *hcp_message = NULL;
\r
1316 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
1317 phHal_sEventInfo_t event_info;
\r
1318 uint8_t event = (uint8_t) HCP_MSG_INSTRUCTION_INVALID;
\r
1320 if( (NULL == psHciContext) || (NULL == pHwRef) )
\r
1322 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
1324 else if( NULL == psHciContext->p_device_mgmt_info )
\r
1326 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED);
\r
1330 p_device_mgmt_info = (phHciNfc_DevMgmt_Info_t *)
\r
1331 psHciContext->p_device_mgmt_info ;
\r
1332 hcp_packet = (phHciNfc_HCP_Packet_t *)pEvent;
\r
1333 hcp_message = &hcp_packet->msg.message;
\r
1335 /* Get the Event instruction bits from the Message Header */
\r
1336 event = (uint8_t) GET_BITS8( hcp_message->msg_header,
\r
1337 HCP_MSG_INSTRUCTION_OFFSET, HCP_MSG_INSTRUCTION_LEN);
\r
1338 event_info.eventHost = phHal_eHostController ;
\r
1339 event_info.eventSource = phHal_ePCD_DevType;
\r
1343 /* Information Events */
\r
1344 case NXP_EVT_INFO_TXLDO_OVERCUR:
\r
1346 event_info.eventType = NFC_INFO_TXLDO_OVERCUR;
\r
1349 case NXP_EVT_INFO_PMUVCC:
\r
1351 p_device_mgmt_info->pmuvcc_status = (uint8_t) ( length > HCP_HEADER_LEN ) ?
\r
1352 pEvent[HCP_HEADER_LEN]: 0;
\r
1355 case NXP_EVT_INFO_EXT_RF_FIELD:
\r
1357 event_info.eventSource = phHal_ePICC_DevType ;
\r
1358 p_device_mgmt_info->rf_status = (uint8_t) ( length > HCP_HEADER_LEN ) ?
\r
1359 pEvent[HCP_HEADER_LEN]: 0;
\r
1360 #ifdef EVT_INFO_EXT_EVT_DIRECT
\r
1361 event_info.eventType = ( CE_EVT_NFC_FIELD_ON ==
\r
1362 (p_device_mgmt_info->rf_status & 0x1FU))?
\r
1363 NFC_EVT_FIELD_ON : NFC_EVT_FIELD_OFF;
\r
1365 event_info.eventType = (TRUE == p_device_mgmt_info->rf_status)?
\r
1366 NFC_EVT_FIELD_ON : NFC_EVT_FIELD_OFF;
\r
1370 case NXP_EVT_INFO_MEM_VIOLATION:
\r
1372 event_info.eventType = NFC_INFO_MEM_VIOLATION;
\r
1373 LOGW("Your NFC controller is kinda hosed, take it to npelly@ to fix");
\r
1376 case NXP_EVT_INFO_TEMP_OVERHEAT:
\r
1378 p_device_mgmt_info->overheat_status = (uint8_t)( length > HCP_HEADER_LEN ) ?
\r
1379 pEvent[HCP_HEADER_LEN]: 0;
\r
1380 event_info.eventType = NFC_INFO_TEMP_OVERHEAT;
\r
1381 event_info.eventInfo.overheat_status =
\r
1382 p_device_mgmt_info->overheat_status;
\r
1385 case NXP_EVT_INFO_LLC_ERROR:
\r
1387 event_info.eventType = NFC_INFO_LLC_ERROR;
\r
1392 status = PHNFCSTVAL(CID_NFC_HCI,
\r
1393 NFCSTATUS_INVALID_HCI_RESPONSE);
\r
1397 if( NFCSTATUS_SUCCESS == status )
\r
1399 if( NULL != p_device_mgmt_info->p_pipe_info)
\r
1401 p_device_mgmt_info->p_pipe_info->prev_status =
\r
1402 NFCSTATUS_SUCCESS;
\r
1404 p_device_mgmt_info->current_seq =
\r
1405 p_device_mgmt_info->next_seq;
\r
1406 phHciNfc_Notify_Event(psHciContext, pHwRef,
\r
1407 NFC_NOTIFY_EVENT, &event_info);
\r
1416 phHciNfc_DevMgmt_InfoUpdate(
\r
1417 phHciNfc_sContext_t *psHciContext,
\r
1418 phHal_sHwReference_t *pHwRef,
\r
1420 uint8_t *reg_value,
\r
1421 uint8_t reg_length
\r
1424 phHciNfc_DevMgmt_Info_t *p_device_mgmt_info=NULL;
\r
1425 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
1428 PHNFC_UNUSED_VARIABLE(pHwRef);
\r
1429 if( (NULL == psHciContext)
\r
1430 || (NULL == reg_value)
\r
1431 || (reg_length == 0)
\r
1434 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
1436 else if ( NULL == psHciContext->p_device_mgmt_info )
\r
1438 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION);
\r
1442 p_device_mgmt_info = (phHciNfc_DevMgmt_Info_t *)
\r
1443 psHciContext->p_device_mgmt_info ;
\r
1447 case DEVICE_INFO_EEPROM_INDEX:
\r
1449 p_device_mgmt_info->eeprom_crc = reg_value[i];
\r
1458 } /* End of Context and the PN544 Device information validity check */
\r
1466 * \brief Sends the RF Settings HCI Additonal Commands to the connected
\r
1469 * This function Sends the RF Settings HCI Command frames in the HCP packet
\r
1470 * format to the connected reader device.
\r
1474 phHciNfc_Send_DevMgmt_Command (
\r
1475 phHciNfc_sContext_t *psHciContext,
\r
1481 phHciNfc_HCP_Packet_t *hcp_packet = NULL;
\r
1482 phHciNfc_HCP_Message_t *hcp_message = NULL;
\r
1483 phHciNfc_Pipe_Info_t *p_pipe_info = NULL;
\r
1486 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
1488 if( (NULL == psHciContext)
\r
1489 || ( pipe_id > PHHCINFC_MAX_PIPE)
\r
1490 ||(NULL == psHciContext->p_pipe_list[pipe_id])
\r
1493 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
1494 HCI_DEBUG("%s: Invalid Arguments passed \n",
\r
1495 "phHciNfc_Send_DevMgmt_Command");
\r
1499 p_pipe_info = (phHciNfc_Pipe_Info_t *)
\r
1500 psHciContext->p_pipe_list[pipe_id];
\r
1501 psHciContext->tx_total = 0 ;
\r
1502 length += HCP_HEADER_LEN ;
\r
1505 /* Self Test Commands */
\r
1506 case NXP_SELF_TEST_ANTENNA:
\r
1507 case NXP_SELF_TEST_SWP:
\r
1508 case NXP_SELF_TEST_NFCWI:
\r
1509 case NXP_SELF_TEST_PRBS:
\r
1510 /* Internal Properietary Commands */
\r
1511 case NXP_DBG_READ:
\r
1512 case NXP_DBG_WRITE:
\r
1515 hcp_packet = (phHciNfc_HCP_Packet_t *) psHciContext->send_buffer;
\r
1516 /* Construct the HCP Frame */
\r
1517 phHciNfc_Build_HCPFrame(hcp_packet,HCP_CHAINBIT_DEFAULT,
\r
1518 (uint8_t) pipe_id, HCP_MSG_TYPE_COMMAND, cmd);
\r
1519 hcp_message = &(hcp_packet->msg.message);
\r
1520 /* Append the RF Setting Parameter also the optional Value */
\r
1521 phHciNfc_Append_HCPFrame((uint8_t *)hcp_message->payload,
\r
1522 i, p_pipe_info->param_info,
\r
1523 p_pipe_info->param_length);
\r
1524 length =(uint8_t)(length + i + p_pipe_info->param_length);
\r
1529 status = PHNFCSTVAL( CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED );
\r
1530 HCI_DEBUG("%s: Statement Should Not Occur \n",
\r
1531 "phHciNfc_Send_DevMgmt_Command");
\r
1535 if( NFCSTATUS_SUCCESS == status )
\r
1537 p_pipe_info->sent_msg_type = HCP_MSG_TYPE_COMMAND;
\r
1538 p_pipe_info->prev_msg = cmd;
\r
1539 psHciContext->tx_total = length;
\r
1540 psHciContext->response_pending = TRUE ;
\r
1542 /* Send the Constructed HCP packet to the lower layer */
\r
1543 status = phHciNfc_Send_HCP( psHciContext, pHwRef );
\r
1544 p_pipe_info->prev_status = NFCSTATUS_PENDING;
\r
1554 * \brief Sends the RF Settings HCI Additonal Events to the connected
\r
1557 * This function Sends the RF Settings HCI Events frames in the HCP packet
\r
1558 * format to the connected reader device.
\r
1563 phHciNfc_Send_DevMgmt_Event (
\r
1564 phHciNfc_sContext_t *psHciContext,
\r
1570 phHciNfc_HCP_Packet_t *hcp_packet = NULL;
\r
1571 phHciNfc_HCP_Message_t *hcp_message = NULL;
\r
1572 phHciNfc_Pipe_Info_t *p_pipe_info = NULL;
\r
1575 NFCSTATUS status = NFCSTATUS_SUCCESS;
\r
1577 if( (NULL == psHciContext)
\r
1578 || ( pipe_id > PHHCINFC_MAX_PIPE)
\r
1579 ||(NULL == psHciContext->p_pipe_list[pipe_id])
\r
1582 status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
\r
1583 HCI_DEBUG("%s: Invalid Arguments passed \n",
\r
1584 "phHciNfc_Send_DevMgmt_Event");
\r
1588 p_pipe_info = (phHciNfc_Pipe_Info_t *)
\r
1589 psHciContext->p_pipe_list[pipe_id];
\r
1590 psHciContext->tx_total = 0 ;
\r
1591 length += HCP_HEADER_LEN ;
\r
1592 if( NXP_EVT_SET_AUTONOMOUS == event )
\r
1595 hcp_packet = (phHciNfc_HCP_Packet_t *) psHciContext->send_buffer;
\r
1596 /* Construct the HCP Frame */
\r
1597 phHciNfc_Build_HCPFrame(hcp_packet,HCP_CHAINBIT_DEFAULT,
\r
1598 (uint8_t) pipe_id, HCP_MSG_TYPE_EVENT, event);
\r
1599 hcp_message = &(hcp_packet->msg.message);
\r
1600 /* Append the RF Setting Parameter also the optional Value */
\r
1601 phHciNfc_Append_HCPFrame((uint8_t *)hcp_message->payload,
\r
1602 i, p_pipe_info->param_info,
\r
1603 p_pipe_info->param_length);
\r
1604 length =(uint8_t)(length + i + p_pipe_info->param_length);
\r
1608 status = PHNFCSTVAL( CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED );
\r
1609 HCI_DEBUG("%s: Statement Should Not Occur \n",
\r
1610 "phHciNfc_Send_DevMgmt_Event");
\r
1612 if( NFCSTATUS_SUCCESS == status )
\r
1614 p_pipe_info->sent_msg_type = HCP_MSG_TYPE_EVENT;
\r
1615 p_pipe_info->prev_msg = event;
\r
1616 psHciContext->tx_total = length;
\r
1618 /* Send the Constructed HCP packet to the lower layer */
\r
1619 status = phHciNfc_Send_HCP( psHciContext, pHwRef );
\r
1620 p_pipe_info->prev_status = NFCSTATUS_PENDING;
\r