1 /* 2 * Copyright (C) 2010-2014 NXP Semiconductors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 #ifndef _PHNXPNCIHAL_H_ 17 #define _PHNXPNCIHAL_H_ 18 19 #include <hardware/nfc.h> 20 #include <phNxpNciHal_utils.h> 21 22 /********************* Definitions and structures *****************************/ 23 #define MAX_RETRY_COUNT 5 24 #define NCI_MAX_DATA_LEN 300 25 #define NCI_POLL_DURATION 500 26 #define HAL_NFC_ENABLE_I2C_FRAGMENTATION_EVT 0x07 27 #undef P2P_PRIO_LOGIC_HAL_IMP 28 29 typedef void (phNxpNciHal_control_granted_callback_t)(); 30 31 /* NCI Data */ 32 typedef struct nci_data 33 { 34 uint16_t len; 35 uint8_t p_data[NCI_MAX_DATA_LEN]; 36 } nci_data_t; 37 38 typedef enum 39 { 40 HAL_STATUS_OPEN = 0, 41 HAL_STATUS_CLOSE 42 } phNxpNci_HalStatus; 43 44 /* Macros to enable and disable extensions */ 45 #define HAL_ENABLE_EXT() (nxpncihal_ctrl.hal_ext_enabled = 1) 46 #define HAL_DISABLE_EXT() (nxpncihal_ctrl.hal_ext_enabled = 0) 47 48 /* NCI Control structure */ 49 typedef struct phNxpNciHal_Control 50 { 51 phNxpNci_HalStatus halStatus; /* Indicate if hal is open or closed */ 52 pthread_t client_thread; /* Integration thread handle */ 53 uint8_t thread_running; /* Thread running if set to 1, else set to 0 */ 54 phLibNfc_sConfig_t gDrvCfg; /* Driver config data */ 55 56 /* Rx data */ 57 uint8_t *p_rx_data; 58 uint16_t rx_data_len; 59 60 /* libnfc-nci callbacks */ 61 nfc_stack_callback_t *p_nfc_stack_cback; 62 nfc_stack_data_callback_t *p_nfc_stack_data_cback; 63 64 /* control granted callback */ 65 phNxpNciHal_control_granted_callback_t *p_control_granted_cback; 66 67 /* HAL open status */ 68 bool_t hal_open_status; 69 70 /* HAL extensions */ 71 uint8_t hal_ext_enabled; 72 73 /* Waiting semaphore */ 74 phNxpNciHal_Sem_t ext_cb_data; 75 76 uint16_t cmd_len; 77 uint8_t p_cmd_data[NCI_MAX_DATA_LEN]; 78 uint16_t rsp_len; 79 uint8_t p_rsp_data[NCI_MAX_DATA_LEN]; 80 81 /* retry count used to force download */ 82 uint16_t retry_cnt; 83 uint8_t read_retry_cnt; 84 } phNxpNciHal_Control_t; 85 86 typedef struct phNxpNciClock{ 87 bool_t isClockSet; 88 uint8_t p_rx_data[20]; 89 bool_t issetConfig; 90 }phNxpNciClock_t; 91 92 typedef struct phNxpNciRfSetting{ 93 bool_t isGetRfSetting; 94 uint8_t p_rx_data[20]; 95 }phNxpNciRfSetting_t; 96 97 typedef struct phNxpNciMwEepromArea { 98 bool_t isGetEepromArea; 99 uint8_t p_rx_data[32]; 100 } phNxpNciMwEepromArea_t; 101 102 typedef enum { 103 NFC_FORUM_PROFILE, 104 EMV_CO_PROFILE, 105 INVALID_PROFILe 106 }phNxpNciProfile_t; 107 /* NXP Poll Profile control structure */ 108 typedef struct phNxpNciProfile_Control 109 { 110 phNxpNciProfile_t profile_type; 111 uint8_t bClkSrcVal; /* Holds the System clock source read from config file */ 112 uint8_t bClkFreqVal; /* Holds the System clock frequency read from config file */ 113 uint8_t bTimeout; /* Holds the Timeout Value */ 114 } phNxpNciProfile_Control_t; 115 116 /* Internal messages to handle callbacks */ 117 #define NCI_HAL_OPEN_CPLT_MSG 0x411 118 #define NCI_HAL_CLOSE_CPLT_MSG 0x412 119 #define NCI_HAL_POST_INIT_CPLT_MSG 0x413 120 #define NCI_HAL_PRE_DISCOVER_CPLT_MSG 0x414 121 #define NCI_HAL_ERROR_MSG 0x415 122 #define NCI_HAL_RX_MSG 0xF01 123 124 #define NCIHAL_CMD_CODE_LEN_BYTE_OFFSET (2U) 125 #define NCIHAL_CMD_CODE_BYTE_LEN (3U) 126 127 /******************** NCI HAL exposed functions *******************************/ 128 129 void phNxpNciHal_request_control (void); 130 void phNxpNciHal_release_control (void); 131 int phNxpNciHal_write_unlocked (uint16_t data_len, const uint8_t *p_data); 132 NFCSTATUS phNxpNciHal_core_reset_recovery (); 133 void phNxpNciHal_discovery_cmd_ext (uint8_t *p_cmd_data, uint16_t cmd_len); 134 135 #endif /* _PHNXPNCIHAL_H_ */ 136