From 49e20a57988572156b1df1c73c783c8e5e0dbb49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Mon, 9 Oct 2017 04:13:50 +0200 Subject: [PATCH] Make I2C_SlaveTransferHandleIRQ() call handle->callback() upon every kI2C_SlaveReceiveEvent and pass the received byte as handle->userData. Given the variable-length protocol design of the UHK, this allows for vastly supreme robustness. --- devices/MKL03Z4/drivers/fsl_i2c.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/devices/MKL03Z4/drivers/fsl_i2c.c b/devices/MKL03Z4/drivers/fsl_i2c.c index c7c76f8..c10ed75 100644 --- a/devices/MKL03Z4/drivers/fsl_i2c.c +++ b/devices/MKL03Z4/drivers/fsl_i2c.c @@ -1518,8 +1518,11 @@ void I2C_SlaveTransferHandleIRQ(I2C_Type *base, void *i2cHandle) } else { + /* Slave receive, master writing to slave. */ + uint8_t data = *(uint8_t*)handle->userData = base->D; + /* If we're out of data, invoke callback to get more. */ - if ((!xfer->data) || (!xfer->dataSize)) + if (true || (!xfer->data) || (!xfer->dataSize)) { xfer->event = kI2C_SlaveReceiveEvent; @@ -1532,9 +1535,6 @@ void I2C_SlaveTransferHandleIRQ(I2C_Type *base, void *i2cHandle) xfer->transferredCount = 0; } - /* Slave receive, master writing to slave. */ - uint8_t data = base->D; - if (handle->transfer.dataSize) { /* Receive data. */