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) */
| 576 | * @return Status of operation (true = success) |
| 577 | */ |
| 578 | bool I2Cdev::writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t* data, void *wireObj) { |
| 579 | #ifdef I2CDEV_SERIAL_DEBUG |
| 580 | Serial.print("I2C (0x"); |
| 581 | Serial.print(devAddr, HEX); |
| 582 | Serial.print(") writing "); |
| 583 | Serial.print(length, DEC); |
| 584 | Serial.print(" bytes to 0x"); |
| 585 | Serial.print(regAddr, HEX); |
| 586 | Serial.print("..."); |
| 587 | #endif |
| 588 | uint8_t status = 0; |
| 589 | |
| 590 | #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE || I2CDEV_IMPLEMENTATION == I2CDEV_TEENSY_3X_WIRE |
| 591 | TwoWire *useWire = &Wire; |
| 592 | if (wireObj) useWire = (TwoWire *)wireObj; |
| 593 | #endif |
| 594 | |
| 595 | #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) |
| 596 | useWire->beginTransmission(devAddr); |
| 597 | useWire->send((uint8_t) regAddr); // send address |
| 598 | #elif ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) \ |
| 599 | || (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE && ARDUINO >= 100) \ |
| 600 | || I2CDEV_IMPLEMENTATION == I2CDEV_TEENSY_3X_WIRE) |
| 601 | useWire->beginTransmission(devAddr); |
| 602 | useWire->write((uint8_t) regAddr); // send address |
| 603 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE) |
| 604 | Fastwire::beginTransmission(devAddr); |
| 605 | Fastwire::write(regAddr); |
| 606 | #endif |
| 607 | for (uint8_t i = 0; i < length; i++) { |
| 608 | #ifdef I2CDEV_SERIAL_DEBUG |
| 609 | Serial.print(data[i], HEX); |
| 610 | if (i + 1 < length) Serial.print(" "); |
| 611 | #endif |
| 612 | #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) |
| 613 | useWire->send((uint8_t) data[i]); |
| 614 | #elif ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) \ |
| 615 | || (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE && ARDUINO >= 100) \ |
| 616 | || I2CDEV_IMPLEMENTATION == I2CDEV_TEENSY_3X_WIRE) |
| 617 | useWire->write((uint8_t) data[i]); |
| 618 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE) |
| 619 | Fastwire::write((uint8_t) data[i]); |
| 620 | #endif |
| 621 | } |
| 622 | #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) |
| 623 | useWire->endTransmission(); |
| 624 | #elif ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) \ |
| 625 | || (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE && ARDUINO >= 100) \ |
| 626 | || I2CDEV_IMPLEMENTATION == I2CDEV_TEENSY_3X_WIRE) |
| 627 | status = useWire->endTransmission(); |
| 628 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE) |
| 629 | Fastwire::stop(); |
| 630 | //status = Fastwire::endTransmission(); |
| 631 | #endif |
| 632 | #ifdef I2CDEV_SERIAL_DEBUG |
| 633 | Serial.println(". Done."); |
| 634 | #endif |
| 635 | return status == 0; |
nothing calls this directly
no test coverage detected