LPC5410x_Wearable_Template/src/pah8001_impl.c

55 lines
1.5 KiB
C

#include "fsl_i2c.h"
#include "pixart_pah8001ei.h"
#define PAH8001_SLAVE_ADDRESS 0x33
#define PAH8001_I2C_INSTANCE I2C0
pah_ret_t pah8001_impl_init(void *pdev) {
/* I2C initialization by tool. */
return PAH_RET_OK;
}
pah_ret_t pah8001_impl_write(void *pdev, uint8_t reg, uint8_t *value, uint16_t len) {
i2c_master_transfer_t xfer = {
.slaveAddress = PAH8001_SLAVE_ADDRESS,
.subaddress = reg,
.subaddressSize = 1U,
.direction = kI2C_Write,
.data = value,
.dataSize = len,
.flags = kI2C_TransferDefaultFlag,
};
if (I2C_MasterTransferBlocking(PAH8001_I2C_INSTANCE, &xfer) != kStatus_Success) {
return PAH_RET_FAIL;
}
if(I2C_MasterStop(PAH8001_I2C_INSTANCE) != kStatus_Success) {
return PAH_RET_FAIL;
}
return PAH_RET_OK;
}
pah_ret_t pah8001_impl_read(void *pdev, uint8_t reg, uint8_t *value, uint16_t len) {
i2c_master_transfer_t xfer = {
.slaveAddress = PAH8001_SLAVE_ADDRESS,
.subaddress = reg,
.subaddressSize = 1U,
.direction = kI2C_Read,
.data = value,
.dataSize = len,
.flags = kI2C_TransferDefaultFlag,
};
if (I2C_MasterTransferBlocking(I2C0, &xfer) != kStatus_Success) {
return PAH_RET_FAIL;
}
if(I2C_MasterStop(PAH8001_I2C_INSTANCE) != kStatus_Success) {
return PAH_RET_FAIL;
}
return PAH_RET_OK;
}