@@ -26,6 +26,8 @@ using namespace erpc;
2626#error "Please define the ERPC_BOARD_I2C_INT_GPIO used to notify when the I2C Slave is ready to transmit"
2727#endif
2828
29+ #define I2C_SLAVE_TRANSPORT_ADDR_7BIT (0x7EU )
30+
2931// //////////////////////////////////////////////////////////////////////////////
3032// Variables
3133// //////////////////////////////////////////////////////////////////////////////
@@ -41,7 +43,7 @@ typedef struct i2c_clb_user_data
4143 uint8_t *rx_buffer;
4244 uint32_t rx_size;
4345} I2C_CLB_USER_DATA, *I2C_CLB_USER_DATA_PTR;
44- static I2C_CLB_USER_DATA volatile s_callback_user_data = { NULL , 0 };
46+ static volatile I2C_CLB_USER_DATA s_callback_user_data = { NULL , 0 , NULL , 0 };
4547
4648// //////////////////////////////////////////////////////////////////////////////
4749// Code
@@ -112,18 +114,26 @@ static void I2C_SlaveUserCallback(I2C_Type *base, volatile i2c_slave_transfer_t
112114 /* Update information for transmit process */
113115 transfer->txData = ((I2C_CLB_USER_DATA *)userData)->tx_buffer ;
114116 transfer->txSize = ((I2C_CLB_USER_DATA *)userData)->tx_size ;
117+ transfer->rxData = NULL ;
118+ transfer->rxSize = 0 ;
115119 break ;
116120
117121 /* Setup the slave receive buffer */
118122 case kI2C_SlaveReceiveEvent :
119123 /* Update information for received process */
120124 transfer->rxData = ((I2C_CLB_USER_DATA *)userData)->rx_buffer ;
121125 transfer->rxSize = ((I2C_CLB_USER_DATA *)userData)->rx_size ;
126+ transfer->txData = NULL ;
127+ transfer->txSize = 0 ;
122128 break ;
123129
124130 /* The master has sent a stop transition on the bus */
125131 case kI2C_SlaveCompletionEvent :
126132 transport->transfer_cb ();
133+ transfer->rxData = NULL ;
134+ transfer->rxSize = 0 ;
135+ transfer->txData = NULL ;
136+ transfer->txSize = 0 ;
127137 break ;
128138
129139 default :
@@ -159,7 +169,7 @@ erpc_status_t I2cSlaveTransport::init(void)
159169 i2c_slave_config_t i2cConfig;
160170
161171 I2C_SlaveGetDefaultConfig (&i2cConfig);
162- i2cConfig.address0 .address = (0x7EU ); // I2C_MASTER_SLAVE_ADDR_7BIT
172+ i2cConfig.address0 .address = (I2C_SLAVE_TRANSPORT_ADDR_7BIT);
163173
164174 I2C_SlaveInit (m_i2cBaseAddr, &i2cConfig, m_srcClock_Hz);
165175 I2C_SlaveTransferCreateHandle (m_i2cBaseAddr, &s_handle, I2C_SlaveUserCallback, (void *)&s_callback_user_data);
@@ -177,6 +187,8 @@ erpc_status_t I2cSlaveTransport::underlyingReceive(uint8_t *data, uint32_t size)
177187
178188 s_callback_user_data.rx_buffer = data;
179189 s_callback_user_data.rx_size = size;
190+ s_callback_user_data.tx_buffer = NULL ;
191+ s_callback_user_data.tx_size = 0 ;
180192
181193 status =
182194 I2C_SlaveTransferNonBlocking (m_i2cBaseAddr, &s_handle, kI2C_SlaveAddressMatchEvent | kI2C_SlaveCompletionEvent );
@@ -205,6 +217,8 @@ erpc_status_t I2cSlaveTransport::underlyingSend(const uint8_t *data, uint32_t si
205217 status_t status;
206218 s_isTransferCompleted = false ;
207219
220+ s_callback_user_data.rx_buffer = NULL ;
221+ s_callback_user_data.rx_size = 0 ;
208222 s_callback_user_data.tx_buffer = (uint8_t *)data;
209223 s_callback_user_data.tx_size = size;
210224
0 commit comments