LPC5410x_Wearable_Functiona.../src/sensors_impl.c

44 lines
1.2 KiB
C

#include "imsensors/sensors_common.h"
/* SDK drivers */
#include "fsl_i2c.h"
ims_ret_t sensors_impl_i2c_xfer(void *pdev, uint16_t addr, ims_i2c_xfer_desc_t *xfer) {
if (xfer->tx_size > 0) {
if (I2C_MasterStart(I2C0, addr, kI2C_Write) != kStatus_Success) {
return IMS_FAIL;
}
if (I2C_MasterWriteBlocking(I2C0, xfer->tx_data, xfer->tx_size, kI2C_TransferNoStopFlag) != kStatus_Success) {
return IMS_FAIL;
}
}
if (xfer->rx_size > 0) {
if (xfer->tx_size > 0) {
if (I2C_MasterRepeatedStart(I2C0, addr, kI2C_Read) != kStatus_Success) {
return IMS_FAIL;
}
} else {
if (I2C_MasterStart(I2C0, addr, kI2C_Read) != kStatus_Success) {
return IMS_FAIL;
}
}
if (I2C_MasterReadBlocking(I2C0, xfer->rx_data, xfer->rx_size, kI2C_TransferNoStopFlag) != kStatus_Success) {
return IMS_FAIL;
}
}
if (I2C_MasterStop(I2C0) != kStatus_Success) {
return IMS_FAIL;
}
return IMS_SUCCESS;
}
ims_ret_t sensors_impl_delay(void *pdev, uint32_t msec) {
SDK_DelayAtLeastUs(msec * 20);
return IMS_SUCCESS;
}