1 /****************************************************************************** 2 * 3 * Copyright (C) 2012-2014 Broadcom Corporation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 19 /****************************************************************************** 20 * 21 * NFC Hardware Abstraction Layer API 22 * 23 ******************************************************************************/ 24 #ifndef NFC_HAL_API_H 25 #define NFC_HAL_API_H 26 #include <hardware/nfc.h> 27 #include "data_types.h" 28 #include "nfc_hal_target.h" 29 30 /******************************************************************************* 31 ** tHAL_HCI_NETWK_CMD Definitions 32 *******************************************************************************/ 33 #define HAL_NFC_HCI_NO_UICC_HOST 0x00 34 #define HAL_NFC_HCI_UICC0_HOST 0x01 35 #define HAL_NFC_HCI_UICC1_HOST 0x02 36 #define HAL_NFC_HCI_UICC2_HOST 0x04 37 38 typedef uint8_t tHAL_NFC_STATUS; 39 typedef void(tHAL_NFC_STATUS_CBACK)(tHAL_NFC_STATUS status); 40 typedef void(tHAL_NFC_CBACK)(uint8_t event, tHAL_NFC_STATUS status); 41 typedef void(tHAL_NFC_DATA_CBACK)(uint16_t data_len, uint8_t* p_data); 42 43 /******************************************************************************* 44 ** tHAL_NFC_ENTRY HAL entry-point lookup table 45 *******************************************************************************/ 46 47 typedef void(tHAL_API_INITIALIZE)(void); 48 typedef void(tHAL_API_TERMINATE)(void); 49 typedef void(tHAL_API_OPEN)(tHAL_NFC_CBACK* p_hal_cback, 50 tHAL_NFC_DATA_CBACK* p_data_cback); 51 typedef void(tHAL_API_CLOSE)(void); 52 typedef void(tHAL_API_CORE_INITIALIZED)(uint16_t data_len, 53 uint8_t* p_core_init_rsp_params); 54 typedef void(tHAL_API_WRITE)(uint16_t data_len, uint8_t* p_data); 55 typedef bool(tHAL_API_PREDISCOVER)(void); 56 typedef void(tHAL_API_CONTROL_GRANTED)(void); 57 typedef void(tHAL_API_POWER_CYCLE)(void); 58 typedef uint8_t(tHAL_API_GET_MAX_NFCEE)(void); 59 60 #define NFC_HAL_DM_PRE_SET_MEM_LEN 5 61 typedef struct { 62 uint32_t addr; 63 uint32_t data; 64 } tNFC_HAL_DM_PRE_SET_MEM; 65 66 /* data members for NFC_HAL-HCI */ 67 typedef struct { 68 bool nfc_hal_prm_nvm_required; /* set nfc_hal_prm_nvm_required to TRUE, if the 69 platform wants to abort PRM process without 70 NVM */ 71 uint16_t nfc_hal_nfcc_enable_timeout; /* max time to wait for RESET NTF after 72 setting REG_PU to high */ 73 uint16_t nfc_hal_post_xtal_timeout; /* max time to wait for RESET NTF after 74 setting Xtal frequency */ 75 #if (NFC_HAL_HCI_INCLUDED == TRUE) 76 bool nfc_hal_first_boot; /* set nfc_hal_first_boot to TRUE, if platform 77 enables NFC for the first time after bootup */ 78 uint8_t nfc_hal_hci_uicc_support; /* set nfc_hal_hci_uicc_support to Zero, if 79 no UICC is supported otherwise set 80 corresponding bit(s) for every supported 81 UICC(s) */ 82 #endif 83 } tNFC_HAL_CFG; 84 85 typedef struct { 86 tHAL_API_INITIALIZE* initialize; 87 tHAL_API_TERMINATE* terminate; 88 tHAL_API_OPEN* open; 89 tHAL_API_CLOSE* close; 90 tHAL_API_CORE_INITIALIZED* core_initialized; 91 tHAL_API_WRITE* write; 92 tHAL_API_PREDISCOVER* prediscover; 93 tHAL_API_CONTROL_GRANTED* control_granted; 94 tHAL_API_POWER_CYCLE* power_cycle; 95 tHAL_API_GET_MAX_NFCEE* get_max_ee; 96 97 } tHAL_NFC_ENTRY; 98 99 /******************************************************************************* 100 ** HAL API Function Prototypes 101 *******************************************************************************/ 102 #ifdef __cplusplus 103 extern "C" { 104 #endif 105 106 /******************************************************************************* 107 ** 108 ** Function HAL_NfcInitialize 109 ** 110 ** Description Called when HAL library is loaded. 111 ** 112 ** Initialize GKI and start the HCIT task 113 ** 114 ** Returns void 115 ** 116 *******************************************************************************/ 117 void HAL_NfcInitialize(void); 118 119 /******************************************************************************* 120 ** 121 ** Function HAL_NfcTerminate 122 ** 123 ** Description Called to terminate NFC HAL 124 ** 125 ** Returns void 126 ** 127 *******************************************************************************/ 128 void HAL_NfcTerminate(void); 129 130 /******************************************************************************* 131 ** 132 ** Function HAL_NfcOpen 133 ** 134 ** Description Open transport and intialize the NFCC, and 135 ** Register callback for HAL event notifications, 136 ** 137 ** HAL_OPEN_CPLT_EVT will notify when operation is complete. 138 ** 139 ** Returns void 140 ** 141 *******************************************************************************/ 142 void HAL_NfcOpen(tHAL_NFC_CBACK* p_hal_cback, 143 tHAL_NFC_DATA_CBACK* p_data_cback); 144 145 /******************************************************************************* 146 ** 147 ** Function HAL_NfcClose 148 ** 149 ** Description Prepare for shutdown. A HAL_CLOSE_CPLT_EVT will be 150 ** reported when complete. 151 ** 152 ** Returns void 153 ** 154 *******************************************************************************/ 155 void HAL_NfcClose(void); 156 157 /******************************************************************************* 158 ** 159 ** Function HAL_NfcCoreInitialized 160 ** 161 ** Description Called after the CORE_INIT_RSP is received from the NFCC. 162 ** At this time, the HAL can do any chip-specific 163 ** configuration, and when finished signal the libnfc-nci with 164 ** event HAL_POST_INIT_CPLT_EVT. 165 ** 166 ** Returns void 167 ** 168 *******************************************************************************/ 169 void HAL_NfcCoreInitialized(uint16_t data_len, uint8_t* p_core_init_rsp_params); 170 171 /******************************************************************************* 172 ** 173 ** Function HAL_NfcWrite 174 ** 175 ** Description Send an NCI control message or data packet to the 176 ** transport. If an NCI command message exceeds the transport 177 ** size, HAL is responsible for fragmenting it, Data packets 178 ** must be of the correct size. 179 ** 180 ** Returns void 181 ** 182 *******************************************************************************/ 183 void HAL_NfcWrite(uint16_t data_len, uint8_t* p_data); 184 185 /******************************************************************************* 186 ** 187 ** Function HAL_NfcPreDiscover 188 ** 189 ** Description Perform any vendor-specific pre-discovery actions (if 190 ** needed). If any actions were performed TRUE will be 191 ** returned, and HAL_PRE_DISCOVER_CPLT_EVT will notify when 192 ** actions are completed. 193 ** 194 ** Returns TRUE if vendor-specific pre-discovery actions initialized 195 ** FALSE if no vendor-specific pre-discovery actions are 196 ** needed. 197 ** 198 *******************************************************************************/ 199 bool HAL_NfcPreDiscover(void); 200 201 /******************************************************************************* 202 ** 203 ** Function HAL_NfcControlGranted 204 ** 205 ** Description Grant control to HAL control for sending NCI commands. 206 ** 207 ** Call in response to HAL_REQUEST_CONTROL_EVT. 208 ** 209 ** Must only be called when there are no NCI commands pending. 210 ** 211 ** HAL_RELEASE_CONTROL_EVT will notify when HAL no longer 212 ** needs control of NCI. 213 ** 214 ** 215 ** Returns void 216 ** 217 *******************************************************************************/ 218 void HAL_NfcControlGranted(void); 219 220 /******************************************************************************* 221 ** 222 ** Function HAL_NfcPowerCycle 223 ** 224 ** Description Restart NFCC by power cyle 225 ** 226 ** HAL_OPEN_CPLT_EVT will notify when operation is complete. 227 ** 228 ** Returns void 229 ** 230 *******************************************************************************/ 231 void HAL_NfcPowerCycle(void); 232 233 /******************************************************************************* 234 ** 235 ** Function HAL_NfcGetMaxNfcee 236 ** 237 ** Description Retrieve the maximum number of NFCEEs supported by NFCC 238 ** 239 ** Returns the maximum number of NFCEEs supported by NFCC 240 ** 241 *******************************************************************************/ 242 uint8_t HAL_NfcGetMaxNfcee(void); 243 244 #ifdef __cplusplus 245 } 246 #endif 247 248 #endif /* NFC_HAL_API_H */ 249