1 /****************************************************************************** 2 * 3 * Copyright 2018 NXP 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 * \addtogroup spi_libese 21 * \brief ESE Lib layer interface to application 22 * @{ */ 23 24 #ifndef _PHNXPSPILIB_API_H_ 25 #define _PHNXPSPILIB_API_H_ 26 27 #include <phEseStatus.h> 28 29 /** 30 * \ingroup spi_libese 31 * \brief Ese data buffer 32 * 33 */ 34 typedef struct phNxpEse_data { 35 uint32_t len; /*!< length of the buffer */ 36 uint8_t* p_data; /*!< pointer to a buffer */ 37 } phNxpEse_data; 38 39 /** 40 * \ingroup spi_libese 41 * \brief Ese Channel mode 42 * 43 */ 44 typedef enum { 45 ESE_MODE_NORMAL = 0, /*!< All wired transaction other OSU */ 46 ESE_MODE_OSU /*!< Jcop Os update mode */ 47 } phNxpEse_initMode; 48 49 /** 50 * \ingroup spi_libese 51 * \brief Ese library init parameters to be set while calling phNxpEse_init 52 * 53 */ 54 typedef struct phNxpEse_initParams { 55 phNxpEse_initMode initMode; /*!< Ese communication mode */ 56 } phNxpEse_initParams; 57 58 /*! 59 * \brief SEAccess kit MW Android version 60 */ 61 #define NXP_ANDROID_VER (8U) 62 63 /*! 64 * \brief SEAccess kit MW Major version 65 */ 66 #define ESELIB_MW_VERSION_MAJ (0x3) 67 68 /*! 69 * \brief SEAccess kit MW Minor version 70 */ 71 #define ESELIB_MW_VERSION_MIN (0x00) 72 73 /****************************************************************************** 74 * \ingroup spi_libese 75 * 76 * \brief It Initializes protocol stack instance variables 77 * 78 * \retval This function return ESESTATUS_SUCCES (0) in case of success 79 * In case of failure returns other failure value. 80 * 81 ******************************************************************************/ 82 ESESTATUS phNxpEse_init(phNxpEse_initParams initParams); 83 84 /****************************************************************************** 85 * \ingroup spi_libese 86 * 87 * \brief Check if libese has opened 88 * 89 * \retval return false if it is close, otherwise true. 90 * 91 ******************************************************************************/ 92 bool phNxpEse_isOpen(); 93 94 /****************************************************************************** 95 * \ingroup spi_libese 96 * 97 * \brief This function is used to communicate from nfc-hal to ese-hal 98 * 99 * \retval This function return ESESTATUS_SUCCES (0) in case of success 100 * In case of failure returns other failure value. 101 * 102 ******************************************************************************/ 103 ESESTATUS phNxpEse_spiIoctl(uint64_t ioctlType, void* p_data); 104 105 /** 106 * \ingroup spi_libese 107 * \brief This function is called by Jni during the 108 * initialization of the ESE. It opens the physical connection 109 * with ESE () and initializes the protocol stack 110 * 111 * 112 * \retval ESESTATUS_SUCCESS On Success ESESTATUS_SUCCESS else proper error code 113 * 114 */ 115 ESESTATUS phNxpEse_open(phNxpEse_initParams initParams); 116 117 /** 118 * \ingroup spi_libese 119 * \brief It opens the physical connectio with ESE () and creates required 120 * client thread for operation. This will get priority access to ESE 121 * for timeout period. 122 * 123 * \retval ESESTATUS_SUCCESS On Success ESESTATUS_SUCCESS else proper error code 124 * 125 */ 126 ESESTATUS phNxpEse_openPrioSession(phNxpEse_initParams initParams); 127 128 /** 129 * \ingroup spi_libese 130 * \brief This function prepares the C-APDU, send to ESE and then receives the 131 *response from ESE, 132 * decode it and returns data. 133 * 134 * \param[in] phNxpEse_data: Command to ESE 135 * \param[out] phNxpEse_data: Response from ESE (Returned data to be freed 136 *after copying) 137 * 138 * \retval ESESTATUS_SUCCESS On Success ESESTATUS_SUCCESS else proper error code 139 * 140 */ 141 142 ESESTATUS phNxpEse_Transceive(phNxpEse_data* pCmd, phNxpEse_data* pRsp); 143 144 /****************************************************************************** 145 * \ingroup spi_libese 146 * 147 * \brief This function is called by Jni/phNxpEse_close during the 148 * de-initialization of the ESE. It de-initializes protocol stack 149 *instance variables 150 * 151 * \retval This function return ESESTATUS_SUCCES (0) in case of success 152 * In case of failure returns other failure value. 153 * 154 ******************************************************************************/ 155 ESESTATUS phNxpEse_deInit(void); 156 157 /** 158 * \ingroup spi_libese 159 * \brief This function close the ESE interface and free all resources. 160 * 161 * \param[in] void 162 * 163 * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). 164 * 165 */ 166 167 ESESTATUS phNxpEse_close(void); 168 169 /** 170 * \ingroup spi_libese 171 * \brief This function reset the ESE interface and free all 172 * 173 * \param[in] void 174 * 175 * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). 176 * 177 */ 178 ESESTATUS phNxpEse_reset(void); 179 180 /** 181 * \ingroup spi_libese 182 * \brief This function reset the ESE 183 * 184 * \param[in] void 185 * 186 * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). 187 * 188 */ 189 ESESTATUS phNxpEse_resetJcopUpdate(void); 190 191 /** 192 * \ingroup spi_libese 193 * \brief This function reset the P73 through ISO RST pin 194 * 195 * \param[in] void 196 * 197 * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). 198 * 199 */ 200 ESESTATUS phNxpEse_chipReset(void); 201 202 /** 203 * \ingroup spi_libese 204 * \brief This function is used to set IFSC size 205 * 206 * \param[in] uint16_t IFSC_Size 207 * 208 * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). 209 * 210 */ 211 ESESTATUS phNxpEse_setIfsc(uint16_t IFSC_Size); 212 213 /** 214 * \ingroup spi_libese 215 * \brief This function sends the S-frame to indicate END_OF_APDU 216 * 217 * \param[in] void 218 * 219 * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). 220 * 221 */ 222 ESESTATUS phNxpEse_EndOfApdu(void); 223 224 /** 225 * \ingroup spi_libese 226 * \brief This function suspends execution of the calling thread for 227 * (at least) usec microseconds 228 * 229 * \param[in] void 230 * 231 * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). 232 * 233 */ 234 ESESTATUS phNxpEse_Sleep(uint32_t usec); 235 236 /** 237 * \ingroup spi_libese 238 * \brief This function updates destination buffer with val 239 * data in len size 240 * 241 * \param[in] buff - Array to be udpated 242 * \param[in] val - value to be updated 243 * \param[in] len - length of array to be updated 244 * 245 * \retval void 246 * 247 */ 248 void* phNxpEse_memset(void* buff, int val, size_t len); 249 250 /** 251 * \ingroup spi_libese 252 * \brief This function copies source buffer to destination buffer 253 * data in len size 254 * 255 * \param[in] dest - Destination array to be updated 256 * \param[in] src - Source array to be updated 257 * \param[in] len - length of array to be updated 258 * 259 * \retval void 260 * 261 */ 262 void* phNxpEse_memcpy(void* dest, const void* src, size_t len); 263 264 /** 265 * \ingroup spi_libese 266 * \brief This function suspends allocate memory 267 * 268 * \param[in] uint32_t size 269 * 270 * \retval allocated memory. 271 * 272 */ 273 void* phNxpEse_memalloc(uint32_t size); 274 275 /** 276 * \ingroup spi_libese 277 * \brief This is utility function for runtime heap memory allocation 278 * 279 * \param[in] len - number of bytes to be allocated 280 * 281 * \retval void 282 * 283 */ 284 void* phNxpEse_calloc(size_t dataType, size_t size); 285 286 /** 287 * \ingroup spi_libese 288 * \brief This is utility function for freeeing heap memory allocated 289 * 290 * \param[in] ptr - Address pointer to previous allocation 291 * 292 * \retval void 293 * 294 */ 295 void phNxpEse_free(void* ptr); 296 297 /** 298 + * \ingroup spi_libese 299 + * \brief This function perfroms disbale/enable power control 300 + * 301 + * \param[in] void 302 + * 303 + * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). 304 + * 305 +*/ 306 ESESTATUS phNxpEse_DisablePwrCntrl(void); 307 308 /** 309 * \ingroup spi_libese 310 * \brief This function is used to get the ESE timer status 311 * 312 * \param[in] phNxpEse_data timer_buffer 313 * 314 * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). 315 * 316 */ 317 ESESTATUS phNxpEse_GetEseStatus(phNxpEse_data* timer_buffer); 318 /** @} */ 319 #endif /* _PHNXPSPILIB_API_H_ */ 320