Hi,
I am trying to adapt the read register function that use the TwoWire lib of Arduino in order to read a Sensor Hub Response Byte of a defined Host Command :
uint8_t readByte(uint8_t _familyByte, uint8_t _indexByte,\
uint8_t _writeByte)
{
uint8_t returnByte;
uint8_t statusByte;
_i2cPort->beginTransmission(_address);
_i2cPort->write(_familyByte);
_i2cPort->write(_indexByte);
_i2cPort->write(_writeByte);
_i2cPort->endTransmission();
delay(CMD_DELAY);
_i2cPort->requestFrom(_address, sizeof(returnByte) + sizeof(statusByte));
statusByte = _i2cPort->read();
if (statusByte)// SUCCESS (0x00)
return statusByte; // Return the error, see: READ_STATUS_BYTE_VALUE
returnByte = _i2cPort->read();
return returnByte; // If good then return the actual byte.
}
to have a function that uses the nrf_dr_twi, like this:
uint32_t nrf_drv_read_registers(uint8_t reg, uint8_t* p_data, uint32_t length)
{
uint32_t err_code;
uint32_t timeout = OXI_TWI_TIMEOUT;
err_code = nrf_drv_twi_tx(&m_twi_instance, OXI_ADDRESS, ®, 1, false);
if (err_code != NRF_SUCCESS) return err_code;
while ((!twi_tx_done) && --timeout) ;
if (!timeout) return NRF_ERROR_TIMEOUT;
twi_tx_done = false;
err_code = nrf_drv_twi_rx(&m_twi_instance, OXI_ADDRESS, p_data, length);
if (err_code != NRF_SUCCESS) return err_code;
timeout = OXI_TWI_TIMEOUT;
while ((!twi_rx_done) && --timeout) ;
if (!timeout) return NRF_ERROR_TIMEOUT;
twi_rx_done = false;
return err_code;
}
Have you some ideas on how i can use the family and index byte of the Sensor Hub in order to retrieve the correct byte?
Thank you very much in advance,
Kind regards