Skip to content

Commit 818dd7a

Browse files
author
Daníel Grétarsson
committedFeb 17, 2018
Fix bug in writeBytes method for nRF51
1 parent 35e7ec1 commit 818dd7a

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed
 

‎nRF51/I2CDev/I2Cdev.cpp

+10-3
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ THE SOFTWARE.
3434
extern "C"{
3535
#include "nrf_drv_twi.h"
3636
#include "app_util_platform.h"
37+
#include <string.h> // For memcpy
3738
}
3839
#include "I2Cdev.h"
3940
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) {
212213
* @return Status of operation (true = success)
213214
*/
214215
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,&regAddr,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);
218223
}
224+
219225
/** Write single word to a 16-bit device register.
220226
* @param devAddr I2C slave device address
221227
* @param regAddr Register address to write to
@@ -225,6 +231,7 @@ bool I2Cdev::writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_
225231
bool I2Cdev::writeWord(uint8_t devAddr, uint8_t regAddr, uint16_t data) {
226232
return writeWords(devAddr, regAddr, 1, &data);
227233
}
234+
228235
/** Write multiple words to a 16-bit device register.
229236
* @param devAddr I2C slave device address
230237
* @param regAddr First register address to write to

0 commit comments

Comments
 (0)
Please sign in to comment.