Home | History | Annotate | Download | only in spi
      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 eSe_PAL_Spi
     21  * \brief PAL SPI port implementation for linux
     22  * @{ */
     23 #ifndef _PHNXPESE_PAL_SPI_H
     24 #define _PHNXPESE_PAL_SPI_H
     25 
     26 /* Basic type definitions */
     27 #include <phNxpEsePal.h>
     28 
     29 /*!
     30  * \brief Start of frame marker
     31  */
     32 #define SEND_PACKET_SOF 0x5A
     33 /*!
     34  * \brief ESE Poll timeout (max 2 seconds)
     35  */
     36 #define ESE_POLL_TIMEOUT (2 * 1000)
     37 /*!
     38  * \brief ESE Poll timeout (max 2 seconds)
     39  */
     40 #define ESE_NAD_POLLING_MAX (2 * 1000)
     41 
     42 /*!
     43  * \brief ESE wakeup delay in case of write error retry
     44  */
     45 #define WRITE_WAKE_UP_DELAY 1000
     46 
     47 /*!
     48  * \brief ESE SOF polling delay
     49  */
     50 #define READ_WAKE_UP_DELAY 100
     51 
     52 /*!
     53  * \brief ESE wakeup delay in case of write error retry
     54  */
     55 #define NAD_POLLING_SCALER 10
     56 
     57 /* Function declarations */
     58 /**
     59  * \ingroup eSe_PAL_Spi
     60  * \brief This function is used to close the ESE device
     61  *
     62  * \retval None
     63  *
     64  */
     65 
     66 void phPalEse_spi_close(void* pDevHandle);
     67 
     68 /**
     69  * \ingroup eSe_PAL_Spi
     70  * \brief Open and configure ESE device
     71  *
     72  * \param[in]       pphPalEse_Config_t: Config to open the device
     73  *
     74  * \retval  ESESTATUS On Success ESESTATUS_SUCCESS else proper error code
     75  *
     76  */
     77 ESESTATUS phPalEse_spi_open_and_configure(pphPalEse_Config_t pConfig);
     78 
     79 /**
     80  * \ingroup eSe_PAL_Spi
     81  * \brief Reads requested number of bytes from ESE into given buffer
     82  *
     83  * \param[in]    pDevHandle       - valid device handle
     84  **\param[in]    pBuffer          - buffer for read data
     85  **\param[in]    nNbBytesToRead   - number of bytes requested to be read
     86  *
     87  * \retval   numRead      - number of successfully read bytes.
     88  * \retval      -1             - read operation failure
     89  *
     90  */
     91 int phPalEse_spi_read(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToRead);
     92 
     93 /**
     94  * \ingroup eSe_PAL_Spi
     95  * \brief Writes requested number of bytes from given buffer into pn547 device
     96  *
     97  * \param[in]    pDevHandle               - valid device handle
     98  * \param[in]    pBuffer                     - buffer to write
     99  * \param[in]    nNbBytesToWrite       - number of bytes to write
    100  *
    101  * \retval  numWrote   - number of successfully written bytes
    102  * \retval      -1         - write operation failure
    103  *
    104  */
    105 int phPalEse_spi_write(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToWrite);
    106 
    107 /**
    108  * \ingroup eSe_PAL_Spi
    109  * \brief Exposed ioctl by ESE driver
    110  *
    111  * \param[in]    eControlCode       - phPalEse_ControlCode_t for the respective
    112  *configs
    113  * \param[in]    pDevHandle           - valid device handle
    114  * \param[in]    pBuffer              - buffer for read data
    115  * \param[in]    level                  - reset level
    116  *
    117  * \retval    0   - ioctl operation success
    118  * \retval   -1  - ioctl operation failure
    119  *
    120  */
    121 ESESTATUS phPalEse_spi_ioctl(phPalEse_ControlCode_t eControlCode,
    122                              void* pDevHandle, long level);
    123 
    124 /**
    125  * \ingroup eSe_PAL_Spi
    126  * \brief Print packet data
    127  *
    128  * \param[in]    pString           - String to be printed
    129  * \param[in]    p_data               - data to be printed
    130  * \param[in]    len                  - Length of data to be printed
    131  *
    132  * \retval   void
    133  *
    134  */
    135 void phPalEse_spi_print_packet(const char* pString, const uint8_t* p_data,
    136                                uint16_t len);
    137 /**
    138  * \ingroup eSe_PAL_Spi
    139  * \brief This function  suspends execution of the calling thread for
    140  *                  (at least) usec microseconds
    141  *
    142  * \param[in]    usec           - number of micro seconds to sleep
    143  *
    144  * \retval   void
    145  *
    146  */
    147 void phPalEse_spi_sleep(uint32_t usec);
    148 /** @} */
    149 #endif /*  _PHNXPESE_PAL_SPI_H    */
    150