MCPcopy Create free account
hub / github.com/SlimeVR/SlimeVR-Tracker-ESP / writeBytes

Method writeBytes

lib/i2cdev/I2Cdev.cpp:578–636  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

576 * @return Status of operation (true = success)
577 */
578bool 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;

Callers

nothing calls this directly

Calls 5

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

Tested by

no test coverage detected