Write multiple words to a 16-bit device register. * @param devAddr I2C slave device address * @param regAddr First register address to write to * @param length Number of words to write * @param data Buffer to copy new data from * @return Status of operation (true = success) */
| 638 | * @return Status of operation (true = success) |
| 639 | */ |
| 640 | bool I2Cdev::writeWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t* data) { |
| 641 | #ifdef I2CDEV_SERIAL_DEBUG |
| 642 | Serial.print("I2C (0x"); |
| 643 | Serial.print(devAddr, HEX); |
| 644 | Serial.print(") writing "); |
| 645 | Serial.print(length, DEC); |
| 646 | Serial.print(" words to 0x"); |
| 647 | Serial.print(regAddr, HEX); |
| 648 | Serial.print("..."); |
| 649 | #endif |
| 650 | uint8_t status = 0; |
| 651 | #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) |
| 652 | Wire.beginTransmission(devAddr); |
| 653 | Wire.send(regAddr); // send address |
| 654 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) |
| 655 | Wire.beginTransmission(devAddr); |
| 656 | Wire.write(regAddr); // send address |
| 657 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE) |
| 658 | Fastwire::beginTransmission(devAddr); |
| 659 | Fastwire::write(regAddr); |
| 660 | #endif |
| 661 | for (uint8_t i = 0; i < length * 2; i++) { |
| 662 | #ifdef I2CDEV_SERIAL_DEBUG |
| 663 | Serial.print(data[i], HEX); |
| 664 | if (i + 1 < length) Serial.print(" "); |
| 665 | #endif |
| 666 | #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) |
| 667 | Wire.send((uint8_t)(data[i] >> 8)); // send MSB |
| 668 | Wire.send((uint8_t)data[i++]); // send LSB |
| 669 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) |
| 670 | Wire.write((uint8_t)(data[i] >> 8)); // send MSB |
| 671 | Wire.write((uint8_t)data[i++]); // send LSB |
| 672 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE) |
| 673 | Fastwire::write((uint8_t)(data[i] >> 8)); // send MSB |
| 674 | status = Fastwire::write((uint8_t)data[i++]); // send LSB |
| 675 | if (status != 0) break; |
| 676 | #endif |
| 677 | } |
| 678 | #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) |
| 679 | Wire.endTransmission(); |
| 680 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) |
| 681 | status = Wire.endTransmission(); |
| 682 | #elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE) |
| 683 | Fastwire::stop(); |
| 684 | //status = Fastwire::endTransmission(); |
| 685 | #endif |
| 686 | #ifdef I2CDEV_SERIAL_DEBUG |
| 687 | Serial.println(". Done."); |
| 688 | #endif |
| 689 | return status == 0; |
| 690 | } |
| 691 | |
| 692 | /** Default timeout value for read operations. |
| 693 | * Set this to 0 to disable timeout detection. |
nothing calls this directly
no test coverage detected