/* \Brief: The function is used as I2C bus read * \Return : Status of the I2C read * \param dev_addr : The device address of the sensor * \param reg_addr : Address of the first register, will data is going to be read * \param reg_data : This data read from the sensor, which is hold in an array * \param cnt : The no of data to be read */ s8 BMG160_I2C_bus_read(u8 dev_addr, u8 reg_addr, u8 *reg_data, u8 cnt) { mico_i2c_message_t bmg160_i2c_msg = {NULL, NULL, 0, 0, 0, false}; s32 iError = BMG160_INIT_VALUE; u8 array[I2C_BUFFER_LEN] = {BMG160_INIT_VALUE}; // u8 stringpos = BMG160_INIT_VALUE; array[BMG160_INIT_VALUE] = reg_addr; /* Please take the below function as your reference * for read the data using I2C communication * add your I2C rad function here. * "IERROR = I2C_WRITE_READ_STRING(DEV_ADDR, ARRAY, ARRAY, 1, CNT)" * iError is an return value of SPI write function * Please select your valid return value * In the driver SUCCESS defined as BMG160_INIT_VALUE * and FAILURE defined as -1 */ iError = MicoI2cBuildCombinedMessage(&bmg160_i2c_msg, array, reg_data, 1, cnt, 3); if(0 != iError){ return (s8)iError; } iError = MicoI2cTransfer(&bmg160_i2c_device, &bmg160_i2c_msg, 1); if(0 != iError){ return (s8)iError; } // for (stringpos = BMG160_INIT_VALUE; stringpos < cnt; stringpos++) { // *(reg_data + stringpos) = array[stringpos]; // } return (s8)iError; }
/* \Brief: The function is used as I2C bus read * \Return : Status of the I2C read * \param dev_addr : The device address of the sensor * \param reg_addr : Address of the first register, will data is going to be read * \param reg_data : This data read from the sensor, which is hold in an array * \param cnt : The no of byte of data to be read */ PRESSURE_StatusTypeDef LPS25HB_IO_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr, uint16_t NumByteToRead) { mico_i2c_message_t lps25hb_i2c_msg = {NULL, NULL, 0, 0, 0, false}; int iError = 0; uint8_t array[8] = {0}; array[0] = RegisterAddr; iError = MicoI2cBuildCombinedMessage(&lps25hb_i2c_msg, array, pBuffer, 1, NumByteToRead, 3); if(0 != iError){ return PRESSURE_ERROR; } iError = MicoI2cTransfer(&lps25hb_i2c_device, &lps25hb_i2c_msg, 1); if(0 != iError){ return PRESSURE_ERROR; } return (PRESSURE_StatusTypeDef)iError; }
/* \Brief: The function is used as I2C bus read * \Return : Status of the I2C read * \param dev_addr : The device address of the sensor * \param reg_addr : Address of the first register, will data is going to be read * \param reg_data : This data read from the sensor, which is hold in an array * \param cnt : The no of byte of data to be read */ HUM_TEMP_StatusTypeDef HTS221_IO_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr, uint16_t NumByteToRead) { mico_i2c_message_t hts221_i2c_msg = {NULL, NULL, 0, 0, 0, false}; int iError = 0; uint8_t array[8] = {0}; array[0] = RegisterAddr; iError = MicoI2cBuildCombinedMessage(&hts221_i2c_msg, array, pBuffer, 1, NumByteToRead, 3); if(0 != iError){ return HUM_TEMP_ERROR; } iError = MicoI2cTransfer(&hts221_i2c_device, &hts221_i2c_msg, 1); if(0 != iError){ return HUM_TEMP_ERROR; } return (HUM_TEMP_StatusTypeDef)iError; }
/* \Brief: The function is used as I2C bus read * \Return : Status of the I2C read * \param dev_addr : The device address of the sensor * \param reg_addr : Address of the first register, will data is going to be read * \param reg_data : This data read from the sensor, which is hold in an array * \param cnt : The no of byte of data to be read */ OSStatus UVIS25_IO_Read(uint8_t* pBuffer, uint8_t RegisterAddr, uint16_t NumByteToRead) { mico_i2c_message_t uvis25_i2c_msg = {NULL, NULL, 0, 0, 0, false}; OSStatus iError = kNoErr; uint8_t array[8] = {0}; array[0] = RegisterAddr; iError = MicoI2cBuildCombinedMessage(&uvis25_i2c_msg, array, pBuffer, 1, NumByteToRead, 3); if(kNoErr != iError){ return kReadErr; } iError = MicoI2cTransfer(&uvis25_i2c_device, &uvis25_i2c_msg, 1); if(kNoErr != iError){ return kReadErr; } return kNoErr; }