 389ff92cc1
			
		
	
	
		389ff92cc1
		
			
		
	
	
	
	
		
			
			* Makefile, Scripts: new linter * About: remove ID from IC * Firmware: remove double define for DIVC/DIVR * Scripts: check folder names too. Docker: replace syntax check with make lint. * Reformat Sources and Migrate to new file naming convention * Docker: symlink clang-format-12 to clang-format * Add coding style guide
		
			
				
	
	
		
			207 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
 | |
| /******************************************************************************
 | |
|   * \attention
 | |
|   *
 | |
|   * <h2><center>© COPYRIGHT 2020 STMicroelectronics</center></h2>
 | |
|   *
 | |
|   * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License");
 | |
|   * You may not use this file except in compliance with the License.
 | |
|   * You may obtain a copy of the License at:
 | |
|   *
 | |
|   *        www.st.com/myliberty
 | |
|   *
 | |
|   * 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,
 | |
|   * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY,
 | |
|   * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
 | |
|   * See the License for the specific language governing permissions and
 | |
|   * limitations under the License.
 | |
|   *
 | |
| ******************************************************************************/
 | |
| 
 | |
| /*
 | |
|  *      PROJECT:   ST25R391x firmware
 | |
|  *      Revision:
 | |
|  *      LANGUAGE:  ISO C99
 | |
|  */
 | |
| 
 | |
| /*! \file rfal_iso15693_2.h
 | |
|  *
 | |
|  *  \author Ulrich Herrmann
 | |
|  *
 | |
|  *  \brief Implementation of ISO-15693-2
 | |
|  *
 | |
|  */
 | |
| /*!
 | |
|  * 
 | |
|  */
 | |
| 
 | |
| #ifndef RFAL_ISO_15693_2_H
 | |
| #define RFAL_ISO_15693_2_H
 | |
| 
 | |
| /*
 | |
| ******************************************************************************
 | |
| * INCLUDES
 | |
| ******************************************************************************
 | |
| */
 | |
| #include "platform.h"
 | |
| #include "st_errno.h"
 | |
| 
 | |
| /*
 | |
| ******************************************************************************
 | |
| * GLOBAL DATATYPES
 | |
| ******************************************************************************
 | |
| */
 | |
| /*! Enum holding possible VCD codings  */
 | |
| typedef enum { ISO15693_VCD_CODING_1_4, ISO15693_VCD_CODING_1_256 } iso15693VcdCoding_t;
 | |
| 
 | |
| /*! Enum holding possible VICC datarates */
 | |
| 
 | |
| /*! Configuration parameter used by #iso15693PhyConfigure  */
 | |
| typedef struct {
 | |
|     iso15693VcdCoding_t coding; /*!< desired VCD coding                                       */
 | |
|     uint32_t
 | |
|         speedMode; /*!< 0: normal mode, 1: 2^1 = x2 Fast mode, 2 : 2^2 = x4 mode, 3 : 2^3 = x8 mode - all rx pulse numbers and times are divided by 1,2,4,8 */
 | |
| } iso15693PhyConfig_t;
 | |
| 
 | |
| /*! Parameters how the stream mode should work */
 | |
| struct iso15693StreamConfig {
 | |
|     uint8_t useBPSK; /*!< 0: subcarrier, 1:BPSK */
 | |
|     uint8_t din; /*!< the divider for the in subcarrier frequency: fc/2^din  */
 | |
|     uint8_t dout; /*!< the divider for the in subcarrier frequency fc/2^dout */
 | |
|     uint8_t report_period_length; /*!< the length of the reporting period 2^report_period_length*/
 | |
| };
 | |
| /*
 | |
| ******************************************************************************
 | |
| * GLOBAL CONSTANTS
 | |
| ******************************************************************************
 | |
| */
 | |
| 
 | |
| #define ISO15693_REQ_FLAG_TWO_SUBCARRIERS \
 | |
|     0x01U /*!< Flag indication that communication uses two subcarriers */
 | |
| #define ISO15693_REQ_FLAG_HIGH_DATARATE \
 | |
|     0x02U /*!< Flag indication that communication uses high bitrate    */
 | |
| #define ISO15693_MASK_FDT_LISTEN \
 | |
|     (65) /*!< t1min = 308,2us = 4192/fc = 65.5 * 64/fc                */
 | |
| 
 | |
| /*! t1max = 323,3us = 4384/fc = 68.5 * 64/fc
 | |
|  *         12 = 768/fc unmodulated time of single subcarrior SoF */
 | |
| #define ISO15693_FWT (69 + 12)
 | |
| 
 | |
| /*
 | |
| ******************************************************************************
 | |
| * GLOBAL FUNCTION PROTOTYPES
 | |
| ******************************************************************************
 | |
| */
 | |
| /*! 
 | |
|  *****************************************************************************
 | |
|  *  \brief  Initialize the ISO15693 phy
 | |
|  *
 | |
|  *  \param[in] config : ISO15693 phy related configuration (See #iso15693PhyConfig_t)
 | |
|  *  \param[out] needed_stream_config : return a pointer to the stream config 
 | |
|  *              needed for this iso15693 config. To be used for configure RF chip.
 | |
|  *
 | |
|  *  \return ERR_IO : Error during communication.
 | |
|  *  \return ERR_NONE : No error.
 | |
|  *
 | |
|  *****************************************************************************
 | |
|  */
 | |
| extern ReturnCode iso15693PhyConfigure(
 | |
|     const iso15693PhyConfig_t* config,
 | |
|     const struct iso15693StreamConfig** needed_stream_config);
 | |
| 
 | |
| /*! 
 | |
|  *****************************************************************************
 | |
|  *  \brief  Return current phy configuration
 | |
|  *
 | |
|  *  This function returns current Phy configuration previously
 | |
|  *  set by #iso15693PhyConfigure
 | |
|  *
 | |
|  *  \param[out] config : ISO15693 phy configuration.
 | |
|  *
 | |
|  *  \return ERR_NONE : No error.
 | |
|  *
 | |
|  *****************************************************************************
 | |
|  */
 | |
| extern ReturnCode iso15693PhyGetConfiguration(iso15693PhyConfig_t* config);
 | |
| 
 | |
| /*! 
 | |
|  *****************************************************************************
 | |
|  *  \brief  Code an ISO15693 compatible frame
 | |
|  *
 | |
|  *  This function takes \a length bytes from \a buffer, perform proper
 | |
|  *  encoding and sends out the frame to the ST25R391x.
 | |
|  *
 | |
|  *  \param[in] buffer : data to send, modified to adapt flags.
 | |
|  *  \param[in] length : number of bytes to send.
 | |
|  *  \param[in] sendCrc : If set to true, CRC is appended to the frame
 | |
|  *  \param[in] sendFlags: If set to true, flag field is sent according to
 | |
|  *                        ISO15693.
 | |
|  *  \param[in] picopassMode :  If set to true, the coding will be according to Picopass
 | |
|  *  \param[out] subbit_total_length : Return the complete bytes which need to 
 | |
|  *                                   be send for the current coding
 | |
|  *  \param[in,out] offset : Set to 0 for first transfer, function will update it to
 | |
|                             point to next byte to be coded
 | |
|  *  \param[out] outbuf : buffer where the function will store the coded subbit stream
 | |
|  *  \param[out] outBufSize : the size of the output buffer
 | |
|  *  \param[out] actOutBufSize : the amount of data stored into the buffer at this call
 | |
|  *
 | |
|  *  \return ERR_IO : Error during communication.
 | |
|  *  \return ERR_AGAIN : Data was not coded all the way. Call function again with a new/emptied buffer
 | |
|  *  \return ERR_NO_MEM : In case outBuf is not big enough. Needs to have at 
 | |
|                          least 5 bytes for 1of4 coding and 65 bytes for 1of256 coding
 | |
|  *  \return ERR_NONE : No error.
 | |
|  *
 | |
|  *****************************************************************************
 | |
|  */
 | |
| extern ReturnCode iso15693VCDCode(
 | |
|     uint8_t* buffer,
 | |
|     uint16_t length,
 | |
|     bool sendCrc,
 | |
|     bool sendFlags,
 | |
|     bool picopassMode,
 | |
|     uint16_t* subbit_total_length,
 | |
|     uint16_t* offset,
 | |
|     uint8_t* outbuf,
 | |
|     uint16_t outBufSize,
 | |
|     uint16_t* actOutBufSize);
 | |
| 
 | |
| /*! 
 | |
|  *****************************************************************************
 | |
|  *  \brief  Receive an ISO15693 compatible frame
 | |
|  *
 | |
|  *  This function receives an ISO15693 frame from the ST25R391x, decodes the frame
 | |
|  *  and writes the raw data to \a buffer.
 | |
|  *  \note Buffer needs to be big enough to hold CRC also (+2 bytes)
 | |
|  *
 | |
|  *  \param[in] inBuf : buffer with the hamming coded stream to be decoded
 | |
|  *  \param[in] inBufLen : number of bytes to decode (=length of buffer).
 | |
|  *  \param[out] outBuf : buffer where received data shall be written to.
 | |
|  *  \param[in] outBufLen : Length of output buffer, should be approx twice the size of inBuf
 | |
|  *  \param[out] outBufPos : The number of decoded bytes. Could be used in 
 | |
|  *                          extended implementation to allow multiple calls
 | |
|  *  \param[out] bitsBeforeCol : in case of ERR_COLLISION this value holds the
 | |
|  *   number of bits in the current byte where the collision happened.
 | |
|  *  \param[in] ignoreBits : number of bits in the beginning where collisions will be ignored
 | |
|  *  \param[in] picopassMode :  if set to true, the decoding will be according to Picopass
 | |
|  *
 | |
|  *  \return ERR_COLLISION : collision occured, data uncorrect
 | |
|  *  \return ERR_CRC : CRC error, data uncorrect
 | |
|  *  \return ERR_TIMEOUT : timeout waiting for data.
 | |
|  *  \return ERR_NONE : No error.
 | |
|  *
 | |
|  *****************************************************************************
 | |
|  */
 | |
| extern ReturnCode iso15693VICCDecode(
 | |
|     const uint8_t* inBuf,
 | |
|     uint16_t inBufLen,
 | |
|     uint8_t* outBuf,
 | |
|     uint16_t outBufLen,
 | |
|     uint16_t* outBufPos,
 | |
|     uint16_t* bitsBeforeCol,
 | |
|     uint16_t ignoreBits,
 | |
|     bool picopassMode);
 | |
| 
 | |
| #endif /* RFAL_ISO_15693_2_H */
 |