LPC5410x_Wearable_Functiona.../src/sensors_impl.c

55 lines
1.4 KiB
C

#include "imsensors/sensors_common.h"
/* SDK drivers */
#include "fsl_i2c.h"
#include "fsl_pint.h"
/* Utils */
#include "util_systick.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) {
goto xfer_fail;
}
if (I2C_MasterWriteBlocking(I2C0, xfer->tx_data, xfer->tx_size, kI2C_TransferNoStopFlag) != kStatus_Success) {
goto xfer_fail;
}
}
if (xfer->rx_size > 0) {
if (xfer->tx_size > 0) {
if (I2C_MasterRepeatedStart(I2C0, addr, kI2C_Read) != kStatus_Success) {
goto xfer_fail;
}
} else {
if (I2C_MasterStart(I2C0, addr, kI2C_Read) != kStatus_Success) {
goto xfer_fail;
}
}
if (I2C_MasterReadBlocking(I2C0, xfer->rx_data, xfer->rx_size, kI2C_TransferNoStopFlag) != kStatus_Success) {
goto xfer_fail;
}
}
if (I2C_MasterStop(I2C0) != kStatus_Success) {
goto xfer_fail;
}
return IMS_SUCCESS;
xfer_fail:
/* Clean-up */
I2C_MasterReset(I2C0);
return IMS_FAIL;
}
ims_ret_t sensors_impl_delay(void *pdev, uint32_t msec) {
util_systick_delay(msec);
return IMS_SUCCESS;
}
void bmm_drdy_callback(pint_pin_int_t pintr, uint32_t pmatch_status) {}