@@ -34,6 +34,7 @@ THE SOFTWARE.
34
34
extern " C" {
35
35
#include " nrf_drv_twi.h"
36
36
#include " app_util_platform.h"
37
+ #include < string.h> // For memcpy
37
38
}
38
39
#include " I2Cdev.h"
39
40
static nrf_drv_twi_t m_twi=NRF_DRV_TWI_INSTANCE(0 );
@@ -212,10 +213,15 @@ bool I2Cdev::writeByte(uint8_t devAddr, uint8_t regAddr, uint8_t data) {
212
213
* @return Status of operation (true = success)
213
214
*/
214
215
bool I2Cdev::writeBytes (uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t * data) {
215
- if (NRF_SUCCESS!=nrf_drv_twi_tx (&m_twi,devAddr,®Addr,1 ,true ))
216
- return false ;
217
- return NRF_SUCCESS==nrf_drv_twi_tx (&m_twi,devAddr,data,length,false );
216
+ const uint8_t buf_len = length+1 ; // Register address + number of bytes
217
+ uint8_t tx_buf[buf_len];
218
+
219
+ tx_buf[0 ] = regAddr;
220
+ memcpy (tx_buf+1 , data, length);
221
+
222
+ return NRF_SUCCESS == nrf_drv_twi_tx (&m_twi, devAddr, tx_buf, buf_len, true );
218
223
}
224
+
219
225
/* * Write single word to a 16-bit device register.
220
226
* @param devAddr I2C slave device address
221
227
* @param regAddr Register address to write to
@@ -225,6 +231,7 @@ bool I2Cdev::writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_
225
231
bool I2Cdev::writeWord (uint8_t devAddr, uint8_t regAddr, uint16_t data) {
226
232
return writeWords (devAddr, regAddr, 1 , &data);
227
233
}
234
+
228
235
/* * Write multiple words to a 16-bit device register.
229
236
* @param devAddr I2C slave device address
230
237
* @param regAddr First register address to write to
0 commit comments