MCPcopy Create free account
hub / github.com/SmingHub/Sming / writeWords

Method writeWords

Sming/Libraries/I2Cdev/I2Cdev.cpp:640–690  ·  view source on GitHub ↗

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) */

Source from the content-addressed store, hash-verified

638 * @return Status of operation (true = success)
639 */
640bool 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.

Callers

nothing calls this directly

Calls 6

printlnMethod · 0.80
printMethod · 0.45
beginTransmissionMethod · 0.45
sendMethod · 0.45
writeMethod · 0.45
endTransmissionMethod · 0.45

Tested by

no test coverage detected