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