diff options
| author | Drashna Jaelre | 2025-11-11 13:02:35 +0100 |
|---|---|---|
| committer | GitHub | 2025-11-11 13:02:35 +0100 |
| commit | 28eeb92f8eec5b8268d2a74ad0561670d14e189a (patch) | |
| tree | 55e9a33aa1bd678116118da48a103f7ef4365061 /drivers | |
| parent | efc5d63383b64291f25c8377bcfae8178dd63302 (diff) | |
Add I2C Transmit and Receive function (#25637)
* feat: adds a transmit and receive i2c method
* fix: address the i2c transmit and receive length on u16
* Add AVR/LUFA implementation
Didn't add a progmem version, since that would only apply to receive.
Figured it wasn't worth it, but can add.
* Rearrange order of functions
* Add docs
* Fix doc gen error
* Fix lint issues
* fix more lint issues
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/i2c_master.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/i2c_master.h b/drivers/i2c_master.h index dbe1cd42fa..5f6094bc81 100644 --- a/drivers/i2c_master.h +++ b/drivers/i2c_master.h @@ -73,6 +73,21 @@ i2c_status_t i2c_transmit_P(uint8_t address, const uint8_t* data, uint16_t lengt i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout); /** + * \brief Send multiple bytes and then receive multiple bytes from the selected I2C device. + * + * \param address The 7-bit I2C address of the device. + * \param tx_data A pointer to the data to transmit. + * \param tx_length The number of bytes to write. Take care not to overrun the length of `tx_data`. + * \param rx_data A pointer to a buffer to read into. + * \param rx_length The number of bytes to read. Take care not to overrun the length of `rx_data`. + * \param timeout The time in milliseconds to wait for a response from the target device. + * + * \return `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`. + */ + +i2c_status_t i2c_transmit_and_receive(uint8_t address, const uint8_t* tx_data, uint16_t tx_length, uint8_t* rx_data, uint16_t rx_length, uint16_t timeout); + +/** * \brief Write to a register with an 8-bit address on the I2C device. * * \param devaddr The 7-bit I2C address of the device. |