aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/nRF5_SDK_15.0.0_a53641a/external/infineon/include/ifx_i2c_config.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/nRF5_SDK_15.0.0_a53641a/external/infineon/include/ifx_i2c_config.h')
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/external/infineon/include/ifx_i2c_config.h296
1 files changed, 296 insertions, 0 deletions
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/external/infineon/include/ifx_i2c_config.h b/thirdparty/nRF5_SDK_15.0.0_a53641a/external/infineon/include/ifx_i2c_config.h
new file mode 100644
index 0000000..bf1fa2f
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/external/infineon/include/ifx_i2c_config.h
@@ -0,0 +1,296 @@
+/**
+* \copyright
+* Copyright (c) 2018, Infineon Technologies AG
+* All rights reserved.
+*
+* This software is provided with terms and conditions as specified in OPTIGA(TM) Trust X Evaluation Kit License Agreement.
+* \endcopyright
+*
+* \author Infineon AG
+*
+* \file ifx_i2c_config.h
+*
+* \brief This file defines the structures and macros for the Infineon I2C Protocol.
+*
+* \addtogroup grIFXI2C
+* @{
+*/
+
+#ifndef _IFX_I2C_CONFIG_H_
+#define _IFX_I2C_CONFIG_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***********************************************************************************************************************
+* HEADER FILES
+**********************************************************************************************************************/
+// Protocol Stack Includes
+#include <stdint.h>
+#include "pal_i2c.h"
+#include "pal_gpio.h"
+#include "pal_os_timer.h"
+
+/***********************************************************************************************************************
+* MACROS
+**********************************************************************************************************************/
+
+/** @brief I2C slave address of the Infineon device */
+#define IFX_I2C_BASE_ADDR (0x30)
+
+/** @brief Physical Layer: polling interval in microseconds */
+#define PL_POLLING_INVERVAL_US (1000)
+/** @brief Physical layer: maximal attempts */
+#define PL_POLLING_MAX_CNT (200)
+/** @brief Physical Layer: data register polling interval in microseconds */
+#define PL_DATA_POLLING_INVERVAL_US (5000)
+/** @brief Physical Layer: guard time interval in microseconds */
+#define PL_GUARD_TIME_INTERVAL_US (50)
+
+/** @brief Data link layer: maximum frame size */
+#define DL_MAX_FRAME_SIZE (300)
+/** @brief Data link layer: header size */
+#define DL_HEADER_SIZE (5)
+/** @brief Data link layer: maximum number of retries in case of transmission error */
+#define DL_TRANS_REPEAT (3)
+/** @brief Data link layer: Trans timeout in milliseconds*/
+#define PL_TRANS_TIMEOUT_MS (10)
+
+/** @brief Transport layer: Maximum exit timeout in seconds */
+#define TL_MAX_EXIT_TIMEOUT (6)
+
+/** @brief Reset low time for GPIO pin toggling */
+#define RESET_LOW_TIME_MSEC (2000)
+/** @brief Start up time */
+#define STARTUP_TIME_MSEC (12000)
+
+/** @brief Protocol Stack: Status codes for success */
+#define IFX_I2C_STACK_SUCCESS (0x00)
+/** @brief Protocol Stack: Status codes for error */
+#define IFX_I2C_STACK_ERROR (0x01)
+/** @brief Protocol Stack: Status codes busy */
+#define IFX_I2C_STACK_BUSY (0x02)
+/** @brief Protocol Stack: Memory insufficient */
+#define IFX_I2C_STACK_MEM_ERROR (0x03)
+/** @brief Protocol Stack: Fatal error. Used internal to IFX I2C Stack */
+#define IFX_I2C_FATAL_ERROR (0x04)
+
+/** @brief Offset of Datalink header in tx_frame_buffer */
+#define IFX_I2C_DL_HEADER_OFFSET (0)
+/** @brief Offset of Transport header in tx_frame_buffer */
+#define IFX_I2C_TL_HEADER_OFFSET (IFX_I2C_DL_HEADER_OFFSET+3)
+
+/** @brief Protocol Stack debug switch for physical layer (set to 0 or 1) */
+#define IFX_I2C_LOG_PL 0
+/** @brief Protocol Stack debug switch for data link layer (set to 0 or 1) */
+#define IFX_I2C_LOG_DL 0
+/** @brief Protocol Stack debug switch for transport layer (set to 0 or 1) */
+#define IFX_I2C_LOG_TL 0
+
+/** @brief Log ID number for physical layer */
+#define IFX_I2C_LOG_ID_PL 0x00
+/** @brief Log ID number for data link layer */
+#define IFX_I2C_LOG_ID_DL 0x01
+/** @brief Log ID number for transport layer */
+#define IFX_I2C_LOG_ID_TL 0x02
+/** @brief Log ID number for platform abstraction layer */
+#define IFX_I2C_LOG_ID_PAL 0x04
+
+/***********************************************************************************************************************
+* ENUMS
+***********************************************************************************************************************/
+
+
+/***********************************************************************************************************************
+* DATA STRUCTURES
+***********************************************************************************************************************/
+typedef struct ifx_i2c_context ifx_i2c_context_t;
+
+/** @brief Event handler function prototype */
+typedef void (*ifx_i2c_event_handler_t)(struct ifx_i2c_context* ctx, host_lib_status_t event, const uint8_t* data, uint16_t data_len);
+
+/** @brief Physical layer structure */
+typedef struct ifx_i2c_pl
+{
+ // Physical Layer low level interface variables
+
+ /// Physical layer buffer
+ uint8_t buffer[DL_MAX_FRAME_SIZE+1];
+ /// Tx length
+ uint16_t buffer_tx_len;
+ /// Rx length
+ uint16_t buffer_rx_len;
+ /// Action on register, read/write
+ uint8_t register_action;
+ /// i2c read/i2c write
+ uint8_t i2c_cmd;
+ /// Retry counter
+ uint16_t retry_counter;
+
+ // Physical Layer high level interface variables
+
+ /// Action of frame. Tx/Rx
+ uint8_t frame_action;
+ /// Frame state
+ uint8_t frame_state ;
+ /// Pointer to data to be sent
+ uint8_t * p_tx_frame;
+ /// Length of data to be sent
+ uint16_t tx_frame_len;
+ // Upper layer handler
+ ifx_i2c_event_handler_t upper_layer_event_handler;
+
+ // Physical Layer negotiation/soft reset variables
+
+ /// Negotiation state
+ uint8_t negotiate_state;
+ /// Soft reset requested
+ uint8_t request_soft_reset;
+} ifx_i2c_pl_t;
+
+/** @brief Datalink layer structure */
+typedef struct ifx_i2c_dl
+{
+ // Data Link layer internal state variables
+
+ /// Datalink layer state
+ uint8_t state;
+ /// Tx sequence number
+ uint8_t tx_seq_nr;
+ // Rx sequence number
+ uint8_t rx_seq_nr;
+ /// Indicate only Rx required
+ uint8_t action_rx_only;
+ /// Retransmit counter
+ uint8_t retransmit_counter;
+ /// Error occured
+ uint8_t error;
+ /// Resynced
+ uint8_t resynced;
+ /// Timeout value
+ uint32_t data_poll_timeout;
+ /// Transmit buffer size
+ uint16_t tx_buffer_size;
+ /// Receive buffer size
+ uint16_t rx_buffer_size;
+ /// Pointer to main transmit buffers
+ uint8_t* p_tx_frame_buffer;
+ /// Pointer to main receive buffers
+ uint8_t* p_rx_frame_buffer;
+ ///Start time of sending frame
+ uint32_t frame_start_time;
+ // Upper layer Event handler
+ ifx_i2c_event_handler_t upper_layer_event_handler;
+} ifx_i2c_dl_t;
+
+/** @brief Transport layer structure */
+typedef struct ifx_i2c_tl
+{
+ // Transport Layer state and buffer
+
+ /// Transport layer state
+ uint8_t state;
+ /// Pointer to packet provided by user
+ uint8_t* p_actual_packet;
+ /// Total received data
+ uint16_t total_recv_length;
+ /// Actual length of user provided packet
+ uint16_t actual_packet_length;
+ /// Offset till which data is sent from p_actual_packet
+ uint16_t packet_offset;
+ /// Maximum length of packet at transport layer
+ uint16_t max_packet_length;
+ /// Pointer to user provided receive buffer
+ uint8_t* p_recv_packet_buffer;
+ /// Length of receive buffer
+ uint16_t* p_recv_packet_buffer_length;
+ /// Start time of the transport layer API
+ uint32_t api_start_time;
+ ///Chaining error coutn from slave
+ uint8_t chaining_error_count;
+ ///Chaining error count for master
+ uint8_t master_chaining_error_count;
+ ///State to check last chaining state
+ uint8_t previous_chaining;
+ /// transmission done
+ uint8_t transmission_completed;
+ /// Error event state
+ uint8_t error_event;
+
+ /// Upper layer event handler
+ ifx_i2c_event_handler_t upper_layer_event_handler;
+} ifx_i2c_tl_t;
+
+/** @brief IFX I2C context structure */
+struct ifx_i2c_context
+{
+ /// I2C Slave address
+ uint8_t slave_address;
+ /// Frequency of i2c master
+ uint16_t frequency;
+ /// Data link layer frame size
+ uint16_t frame_size;
+ /// Pointer to pal gpio context for vdd
+ pal_gpio_t* p_slave_vdd_pin;
+ /// Pointer to pal gpio context for reset
+ pal_gpio_t* p_slave_reset_pin;
+ /// Pointer to pal i2c context
+ pal_i2c_t* p_pal_i2c_ctx;
+
+ /// Upper layer event handler
+ app_event_handler_t upper_layer_event_handler;
+ /// Upper layer context
+ void* p_upper_layer_ctx;
+ /// Pointer to upper layer rx buffer
+ uint8_t* p_upper_layer_rx_buffer;
+ /// Pointer to length of upper layer rx buffer
+ uint16_t* p_upper_layer_rx_buffer_len;
+
+ /// Protocol variables
+ /// ifx i2c wrapper apis state
+ uint8_t state;
+ /// ifx i2c wrapper api status
+ uint8_t status;
+ /// reset states
+ uint8_t reset_state;
+ /// type of reset
+ uint8_t reset_type;
+ /// init pal
+ uint8_t do_pal_init;
+
+ /// Transport layer context
+ ifx_i2c_tl_t tl;
+ /// Datalink layer context
+ ifx_i2c_dl_t dl;
+ /// Physical layer context
+ ifx_i2c_pl_t pl;
+
+ /// IFX I2C tx frame of max length
+ uint8_t tx_frame_buffer[DL_MAX_FRAME_SIZE];
+ /// IFX I2C rx frame of max length
+ uint8_t rx_frame_buffer[DL_MAX_FRAME_SIZE];
+
+};
+
+/***********************************************************************************************************************
+* GLOBAL
+***********************************************************************************************************************/
+
+/** @brief IFX I2C Instance */
+extern ifx_i2c_context_t ifx_i2c_context_0;
+
+/***********************************************************************************************************************
+* LOCAL ROUTINES
+***********************************************************************************************************************/
+
+/***********************************************************************************************************************
+* API PROTOTYPES
+**********************************************************************************************************************/
+
+/**
+ * @}
+ **/
+#ifdef __cplusplus
+}
+#endif
+#endif /* _IFX_I2C_CONFIG_H_ */