| /****************************************************************************** |
| * |
| * Copyright 2018-2021 NXP |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| ******************************************************************************/ |
| |
| /** |
| * \addtogroup spi_libese |
| * \brief ESE Lib layer interface to application |
| * @{ */ |
| |
| #ifndef _PHNXPSPILIB_API_H_ |
| #define _PHNXPSPILIB_API_H_ |
| |
| #include <phEseStatus.h> |
| #include <phNxpEsePal.h> |
| |
| /** |
| * \ingroup spi_libese |
| * \brief Ese data buffer |
| * |
| */ |
| typedef struct phNxpEse_data { |
| uint32_t len; /*!< length of the buffer */ |
| uint8_t* p_data; /*!< pointer to a buffer */ |
| } phNxpEse_data; |
| |
| /** |
| * \ingroup spi_libese |
| * \brief Ese Channel mode |
| * |
| */ |
| typedef enum { |
| ESE_MODE_NORMAL = 0, /*!< All wired transaction other OSU */ |
| ESE_MODE_OSU /*!< Jcop Os update mode */ |
| } phNxpEse_initMode; |
| |
| /** |
| * \ingroup spi_libese |
| * \brief Ese logical interface i.e. MediaType |
| * |
| */ |
| typedef enum { |
| ESE_PROTOCOL_MEDIA_SPI = 0x08, /*!< Media Type - SPI legacy */ |
| ESE_PROTOCOL_MEDIA_SPI_APDU_GATE = 0xD0 /*!Media Type - APDU Gate */ |
| } phNxpEse_mediaType; |
| |
| typedef enum { |
| WTX_ONGOING = 1, |
| WTX_END = 2, |
| } phNxpEse_wtxState; |
| |
| typedef enum phNxpEseProto7816_OsType { |
| UNKNOWN_MODE = 0, |
| JCOP_MODE = 0x1, |
| OSU_MODE = 0x2, |
| } phNxpEseProto7816_OsType_t; |
| |
| #define MODE_JCOP 0x01 |
| #define MODE_OSU 0x02 |
| #define RESET_APP_WTX_COUNT 0 |
| |
| typedef void(NotifyWtxReq)(phNxpEse_wtxState); |
| /** |
| * \ingroup spi_libese |
| * \brief Ese library init parameters to be set while calling phNxpEse_init |
| * |
| */ |
| typedef struct phNxpEse_initParams { |
| phNxpEse_initMode initMode; /*!< Ese communication mode */ |
| phNxpEse_mediaType mediaType; /*!< Logical channel for Ese communication */ |
| NotifyWtxReq* fPtr_WtxNtf; /*!< Wait extension callback notification*/ |
| } phNxpEse_initParams; |
| |
| /*! |
| * \brief SEAccess kit MW Android version |
| */ |
| #define NXP_ANDROID_VER (9U) |
| |
| /*! |
| * \brief SEAccess kit MW Major version |
| */ |
| #define ESELIB_MW_VERSION_MAJ (0x0U) |
| |
| /*! |
| * \brief SEAccess kit MW Minor version |
| */ |
| #define ESELIB_MW_VERSION_MIN (0x04) |
| |
| /*! |
| * \brief eSE debugging log Level |
| */ |
| extern bool ese_debug_enabled; |
| |
| /** |
| * \ingroup spi_libese |
| * |
| * \brief This function is called by Jni/phNxpEse_open during the |
| * initialization of the ESE. It initializes protocol stack instance |
| * variables. |
| * |
| * \param[in] initParams - init parameters to be set while calling |
| * phNxpEse_init |
| * |
| * \retval This function return ESESTATUS_SUCCESS (0) in case of success |
| * In case of failure returns other failure value. |
| * |
| */ |
| ESESTATUS phNxpEse_init(phNxpEse_initParams initParams); |
| |
| /** |
| * \ingroup spi_libese |
| * |
| * \brief Check if libese has opened |
| * |
| * \retval return false if it is close, otherwise true. |
| * |
| */ |
| bool phNxpEse_isOpen(); |
| |
| /** |
| * \ingroup spi_libese |
| * |
| * \brief This function is used to communicate from nfc-hal to ese-hal |
| * |
| * \param[in] ioctlType - ioctl cmd |
| *\param[out] p_data - value read out |
| * |
| * \retval This function return ESESTATUS_SUCCESS (0) in case of success |
| * In case of failure returns other failure value. |
| * |
| */ |
| ESESTATUS phNxpEse_spiIoctl(uint64_t ioctlType, void* p_data); |
| /** |
| * \ingroup spi_libese |
| * |
| * \brief This function is called by hal interface api before any |
| * communication. It sets the end point variables |
| * |
| * \param[in] uEndPoint - select the end point type ( END_POINT_ESE = 0, |
| * END_POINT_eUICC =1 ). |
| * |
| * \retval This function return ESESTATUS_SUCCESS (0) in case of success |
| * In case of failure returns other failure value. |
| * |
| */ |
| ESESTATUS phNxpEse_SetEndPoint_Cntxt(uint8_t uEndPoint); |
| |
| /** |
| * \ingroup spi_libese |
| * |
| * \brief This function is called by hal interface api before any |
| * communication. It resets the end point variables |
| * |
| * \param[in] uEndPoint - select the end point type ( END_POINT_ESE = 0, |
| * END_POINT_eUICC =1 ). |
| * |
| * \retval This function return ESESTATUS_SUCCESS (0) in case of success |
| * In case of failure returns other failure value. |
| * |
| */ |
| ESESTATUS phNxpEse_ResetEndPoint_Cntxt(uint8_t uEndPoint); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function is called by Jni during the |
| * initialization of the ESE. It opens the physical connection |
| * with ESE () and initializes the protocol stack |
| * |
| * \param[in] initParams - Initialize with init mode ( normal/osu) and media |
| * type(SPI- legacy/ APDU type). |
| * |
| * \retval ESESTATUS_SUCCESS On Success ESESTATUS_SUCCESS else proper error code |
| * |
| */ |
| ESESTATUS phNxpEse_open(phNxpEse_initParams initParams); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function is called by Jni during the |
| * initialization of the ESE. It opens the physical connection |
| * with ESE () and creates required client thread for |
| * operation. This will get priority access to ESE for timeout period. |
| * |
| * \param[in] initParams - Initialize with init mode ( normal/osu) and media |
| * type(SPI- legacy/ APDU type). |
| * |
| * \retval ESESTATUS_SUCCESS On Success ESESTATUS_SUCCESS else proper error code |
| * |
| */ |
| ESESTATUS phNxpEse_openPrioSession(phNxpEse_initParams initParams); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function prepares the C-APDU, send to ESE and then receives the |
| *response from ESE, |
| * decode it and returns data. |
| * |
| * \param[in] pCmd: Command to ESE |
| * \param[out] pRsp: Response from ESE (Returned data to be freed |
| *after copying) |
| * |
| * \retval ESESTATUS_SUCCESS On Success ESESTATUS_SUCCESS else proper error code |
| * |
| */ |
| |
| ESESTATUS phNxpEse_Transceive(phNxpEse_data* pCmd, phNxpEse_data* pRsp); |
| |
| /** |
| * \ingroup spi_libese |
| * |
| * \brief This function is called by Jni/phNxpEse_close during the |
| * de-initialization of the ESE. It de-initializes protocol stack |
| *instance variables |
| * |
| * \retval This function return ESESTATUS_SUCCESS (0) in case of success |
| * In case of failure returns other failure value. |
| * |
| */ |
| ESESTATUS phNxpEse_deInit(void); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function close the ESE interface and free all resources. |
| * |
| * |
| * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). |
| * |
| */ |
| |
| ESESTATUS phNxpEse_close(ESESTATUS deInitStatus = ESESTATUS_SUCCESS); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function reset the ESE interface and free all |
| * |
| * |
| * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). |
| * |
| */ |
| ESESTATUS phNxpEse_reset(void); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function reset the ESE |
| * |
| * |
| * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). |
| * |
| */ |
| ESESTATUS phNxpEse_resetJcopUpdate(void); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function reset the P73 through ISO RST pin |
| * |
| * |
| * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). |
| * |
| */ |
| ESESTATUS phNxpEse_chipReset(void); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function is used to set IFSC size |
| * |
| * \param[in] IFS_Size |
| * |
| * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). |
| * |
| */ |
| ESESTATUS phNxpEse_setIfs(uint16_t IFS_Size); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function is used to get the ATR data from ESE |
| * |
| * \param[out] pATR |
| * |
| * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). |
| * |
| */ |
| ESESTATUS phNxpEse_getAtr(phNxpEse_data* pATR); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function sends the S-frame to indicate END_OF_APDU |
| * |
| * |
| * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). |
| * |
| */ |
| ESESTATUS phNxpEse_EndOfApdu(void); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function suspends execution of the calling thread for |
| * (at least) usec microseconds |
| * |
| * \param[in] usec |
| * |
| * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). |
| * |
| */ |
| ESESTATUS phNxpEse_Sleep(uint32_t usec); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function updates destination buffer with val |
| * data in len size |
| * |
| * \param[in] buff - Array to be updated |
| * \param[in] val - value to be updated |
| * \param[in] len - length of array to be updated |
| * |
| * \retval void |
| * |
| */ |
| void* phNxpEse_memset(void* buff, int val, size_t len); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function copies source buffer to destination buffer |
| * data in len size |
| * |
| * \param[in] dest - Destination array to be updated |
| * \param[in] src - Source array to be updated |
| * \param[in] len - length of array to be updated |
| * |
| * \retval void |
| * |
| */ |
| void* phNxpEse_memcpy(void* dest, const void* src, size_t len); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function suspends allocate memory |
| * |
| * \param[in] size |
| * |
| * \retval allocated memory. |
| * |
| */ |
| void* phNxpEse_memalloc(uint32_t size); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This is utility function for runtime heap memory allocation |
| * |
| *\param[in] dataType - data type |
| * \param[in] size - number of bytes to be allocated |
| * |
| * \retval void |
| * |
| */ |
| void* phNxpEse_calloc(size_t dataType, size_t size); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This is utility function for freeeing heap memory allocated |
| * |
| * \param[in] ptr - Address pointer to previous allocation |
| * |
| * \retval void |
| * |
| */ |
| void phNxpEse_free(void* ptr); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function performs disable/enable power control |
| * |
| * |
| * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). |
| * |
| */ |
| ESESTATUS phNxpEse_DisablePwrCntrl(void); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function is used to get the ESE timer status |
| * |
| * \param[out] timer_buffer |
| * |
| * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). |
| * |
| */ |
| ESESTATUS phNxpEse_GetEseStatus(phNxpEse_data* timer_buffer); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function power recycles the ESE |
| * (using prop. FW command) by talking to NFC HAL |
| * |
| * Note: |
| * After cold reset, phNxpEse_init need to be called to |
| * reset the host AP T=1 stack parameters |
| * |
| * |
| * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). |
| * |
| */ |
| ESESTATUS phNxpEse_coldReset(void); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function notifies SE hal service if it registers |
| * |
| * \param[out] state - WTX_ONGOIGN/WTX_END |
| * |
| * \retval void. |
| * |
| */ |
| void phNxpEse_NotifySEWtxRequest(phNxpEse_wtxState state); |
| |
| /** |
| * \ingroup ISO7816-3_protocol_lib |
| * \brief This function is used to get OS mode(JCOP/OSU) |
| * |
| * \retval OS mode(JCOP/OSU). |
| * |
| */ |
| phNxpEseProto7816_OsType_t phNxpEse_GetOsMode(void); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function enable/disable resetprotection |
| * |
| * \param[in] flag - indicated enable or disable resetprotection. |
| * |
| * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0). |
| * |
| */ |
| ESESTATUS phNxpEse_doResetProtection(bool flag); |
| |
| /** |
| * \ingroup spi_libese |
| * \brief This function is used to set the wtx count limit |
| * |
| * \param[in] wtxCount - value to set for wtx count limit |
| * |
| * \retval void. |
| * |
| */ |
| void phNxpEse_setWtxCountLimit(unsigned long int wtxCount); |
| /** @} */ |
| #endif /* _PHNXPSPILIB_API_H_ */ |