Write multiple bytes to an 8-bit device register. * @param devAddr I2C slave device address * @param regAddr First register address to write to * @param length Number of bytes to write * @param data Buffer to copy new data from * @return Status of operation (true = success) */
| 583 | * @return Status of operation (true = success) |
| 584 | */ |
| 585 | bool I2Cdev::writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t* data) { |
| 586 | #ifdef I2CDEV_SERIAL_DEBUG |
| 587 | Serial.print("I2C (0x"); |
| 588 | Serial.print(devAddr, HEX); |
| 589 | Serial.print(") writing "); |
| 590 | Serial.print(length, DEC); |
| 591 | Serial.print(" bytes to 0x"); |
| 592 | Serial.print(regAddr, HEX); |
| 593 | Serial.print("..."); |
| 594 | #endif |
| 595 | uint8_t status = 0; |
| 596 | #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) |
| 597 | Wire.beginTransmission(devAddr); |
| 598 | Wire.send((uint8_t) regAddr); // send address |
| 599 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) |
| 600 | Wire.beginTransmission(devAddr); |
| 601 | Wire.write((uint8_t) regAddr); // send address |
| 602 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE) |
| 603 | Fastwire::beginTransmission(devAddr); |
| 604 | Fastwire::write(regAddr); |
| 605 | #endif |
| 606 | for (uint8_t i = 0; i < length; i++) { |
| 607 | #ifdef I2CDEV_SERIAL_DEBUG |
| 608 | Serial.print(data[i], HEX); |
| 609 | if (i + 1 < length) Serial.print(" "); |
| 610 | #endif |
| 611 | #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) |
| 612 | Wire.send((uint8_t) data[i]); |
| 613 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) |
| 614 | Wire.write((uint8_t) data[i]); |
| 615 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE) |
| 616 | Fastwire::write((uint8_t) data[i]); |
| 617 | #endif |
| 618 | } |
| 619 | #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) |
| 620 | Wire.endTransmission(); |
| 621 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) |
| 622 | status = Wire.endTransmission(); |
| 623 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE) |
| 624 | Fastwire::stop(); |
| 625 | //status = Fastwire::endTransmission(); |
| 626 | #endif |
| 627 | #ifdef I2CDEV_SERIAL_DEBUG |
| 628 | Serial.println(". Done."); |
| 629 | #endif |
| 630 | return status == 0; |
| 631 | } |
| 632 | |
| 633 | /** Write multiple words to a 16-bit device register. |
| 634 | * @param devAddr I2C slave device address |
no test coverage detected