| 27 | 
  27 | 
  
     *  MIT license, all text above must be included in any redistribution
 
   | 
  | 28 | 
  28 | 
  
     */
 
   | 
  | 29 | 
  29 | 
  
    
 
   | 
  | 30 | 
   | 
  
    #if ARDUINO >= 100
 
   | 
  | 31 | 
  30 | 
  
    #include "Arduino.h"
 
   | 
  | 32 | 
   | 
  
    #else
 
   | 
  | 33 | 
   | 
  
    #include "WProgram.h"
 
   | 
  | 34 | 
   | 
  
    #endif
 
   | 
  | 35 | 
  31 | 
  
    
 
   | 
  | 36 | 
  32 | 
  
    #include <limits.h>
 
   | 
  | 37 | 
  33 | 
  
    #include <math.h>
 
   | 
  | ... | ... |  | 
  | 40 | 
  36 | 
  
    
 
   | 
  | 41 | 
  37 | 
  
    /*!
 
   | 
  | 42 | 
  38 | 
  
     *  @brief  Instantiates a new Adafruit_BNO055 class
 
   | 
  | 43 | 
   | 
  
     *  @param  sensorID
 
   | 
  | 44 | 
   | 
  
     *  @param  address
 
   | 
  | 45 | 
  39 | 
  
     */
 
   | 
  | 46 | 
   | 
  
    Adafruit_BNO055::Adafruit_BNO055(int32_t sensorID, uint8_t address) {
   | 
  | 47 | 
   | 
  
      _sensorID = sensorID;
 
   | 
  | 48 | 
   | 
  
      _address = address;
 
   | 
   | 
  40 | 
  
    Adafruit_BNO055::Adafruit_BNO055() {}
   | 
   | 
  41 | 
  
    
 
   | 
   | 
  42 | 
  
    /*!
 
   | 
   | 
  43 | 
  
     *  @brief  Sets up the HW
 
   | 
   | 
  44 | 
  
     *  @param  mode
 
   | 
   | 
  45 | 
  
     *          mode values
 
   | 
   | 
  46 | 
  
     *           [OPERATION_MODE_CONFIG,
 
   | 
   | 
  47 | 
  
     *            OPERATION_MODE_ACCONLY,
 
   | 
   | 
  48 | 
  
     *            OPERATION_MODE_MAGONLY,
 
   | 
   | 
  49 | 
  
     *            OPERATION_MODE_GYRONLY,
 
   | 
   | 
  50 | 
  
     *            OPERATION_MODE_ACCMAG,
 
   | 
   | 
  51 | 
  
     *            OPERATION_MODE_ACCGYRO,
 
   | 
   | 
  52 | 
  
     *            OPERATION_MODE_MAGGYRO,
 
   | 
   | 
  53 | 
  
     *            OPERATION_MODE_AMG,
 
   | 
   | 
  54 | 
  
     *            OPERATION_MODE_IMUPLUS,
 
   | 
   | 
  55 | 
  
     *            OPERATION_MODE_COMPASS,
 
   | 
   | 
  56 | 
  
     *            OPERATION_MODE_M4G,
 
   | 
   | 
  57 | 
  
     *            OPERATION_MODE_NDOF_FMC_OFF,
 
   | 
   | 
  58 | 
  
     *            OPERATION_MODE_NDOF]
 
   | 
   | 
  59 | 
  
     *  @param  *theWire
 
   | 
   | 
  60 | 
  
     *          Wire object
 
   | 
   | 
  61 | 
  
     *  @return true if process is successful
 
   | 
   | 
  62 | 
  
     */
 
   | 
   | 
  63 | 
  
    bool Adafruit_BNO055::begin() {
   | 
   | 
  64 | 
  
      _wire = &Wire;
 
   | 
   | 
  65 | 
  
    #if defined(ARDUINO_SAMD_ZERO) && !(ARDUINO_SAMD_FEATHER_M0)
 
   | 
   | 
  66 | 
  
    #error                                                                         \
 
   | 
   | 
  67 | 
  
        "On an arduino Zero, BNO055's ADR pin must be high. Fix that, then delete this line."
 
   | 
   | 
  68 | 
  
      _address = BNO055_ADDRESS_B;
 
   | 
   | 
  69 | 
  
    #else
 
   | 
   | 
  70 | 
  
      _address = BNO055_ADDRESS_A;
 
   | 
   | 
  71 | 
  
    #endif
 
   | 
   | 
  72 | 
  
    
 
   | 
   | 
  73 | 
  
      return init(OPERATION_MODE_NDOF);
 
   | 
  | 49 | 
  74 | 
  
    }
 
   | 
  | 50 | 
  75 | 
  
    
 
   | 
  | 51 | 
  76 | 
  
    /*!
 
   | 
  | 52 | 
  77 | 
  
     *  @brief  Sets up the HW
 
   | 
  | 53 | 
  78 | 
  
     *  @param  mode
 
   | 
  | 54 | 
   | 
  
     *  @return true if process is sucessfull
 
   | 
   | 
  79 | 
  
     *          mode values
 
   | 
   | 
  80 | 
  
     *           [OPERATION_MODE_CONFIG,
 
   | 
   | 
  81 | 
  
     *            OPERATION_MODE_ACCONLY,
 
   | 
   | 
  82 | 
  
     *            OPERATION_MODE_MAGONLY,
 
   | 
   | 
  83 | 
  
     *            OPERATION_MODE_GYRONLY,
 
   | 
   | 
  84 | 
  
     *            OPERATION_MODE_ACCMAG,
 
   | 
   | 
  85 | 
  
     *            OPERATION_MODE_ACCGYRO,
 
   | 
   | 
  86 | 
  
     *            OPERATION_MODE_MAGGYRO,
 
   | 
   | 
  87 | 
  
     *            OPERATION_MODE_AMG,
 
   | 
   | 
  88 | 
  
     *            OPERATION_MODE_IMUPLUS,
 
   | 
   | 
  89 | 
  
     *            OPERATION_MODE_COMPASS,
 
   | 
   | 
  90 | 
  
     *            OPERATION_MODE_M4G,
 
   | 
   | 
  91 | 
  
     *            OPERATION_MODE_NDOF_FMC_OFF,
 
   | 
   | 
  92 | 
  
     *            OPERATION_MODE_NDOF]
 
   | 
   | 
  93 | 
  
     *  @param  *theWire
 
   | 
   | 
  94 | 
  
     *          Wire object
 
   | 
   | 
  95 | 
  
     *  @return true if process is successful
 
   | 
  | 55 | 
  96 | 
  
     */
 
   | 
  | 56 | 
   | 
  
    bool Adafruit_BNO055::begin(adafruit_bno055_opmode_t mode) {
   | 
   | 
  97 | 
  
    bool Adafruit_BNO055::begin(adafruit_bno055_opmode_t mode, uint8_t address,
 
   | 
   | 
  98 | 
  
                                TwoWire *theWire) {
   | 
   | 
  99 | 
  
      _wire = theWire;
 
   | 
   | 
  100 | 
  
      _address = address;
 
   | 
   | 
  101 | 
  
    
 
   | 
   | 
  102 | 
  
      return init(mode);
 
   | 
   | 
  103 | 
  
    }
 
   | 
   | 
  104 | 
  
    
 
   | 
   | 
  105 | 
  
    bool Adafruit_BNO055::init(adafruit_bno055_opmode_t mode) {
   | 
  | 57 | 
  106 | 
  
      /* Enable I2C */
 
   | 
  | 58 | 
   | 
  
      Wire.begin();
 
   | 
   | 
  107 | 
  
      _wire->begin();
 
   | 
  | 59 | 
  108 | 
  
    
 
   | 
  | 60 | 
  109 | 
  
      /* BNO055 clock stretches for 500us or more! */
 
   | 
  | 61 | 
  110 | 
  
    #ifdef ESP8266
 
   | 
  | 62 | 
  111 | 
  
      /* Allow for 1000us of clock stretching */
 
   | 
   | 
  112 | 
  
    <<<<<<< HEAD
 
   | 
   | 
  113 | 
  
      _wire->setClockStretchLimit(1000);
 
   | 
   | 
  114 | 
  
    =======
 
   | 
  | 63 | 
  115 | 
  
      Wire.setClockStretchLimit(1000);
 
   | 
   | 
  116 | 
  
    >>>>>>> 75f03d2e1fd440e7febc0de8c47a52bab09c51b0
 
   | 
  | 64 | 
  117 | 
  
    #endif
 
   | 
  | 65 | 
  118 | 
  
    
 
   | 
  | 66 | 
  119 | 
  
      /* Make sure we have the right device */
 
   | 
  | ... | ... |  | 
  | 113 | 
  166 | 
  
    /*!
 
   | 
  | 114 | 
  167 | 
  
     *  @brief  Puts the chip in the specified operating mode
 
   | 
  | 115 | 
  168 | 
  
     *  @param  mode
 
   | 
   | 
  169 | 
  
     *          mode values
 
   | 
   | 
  170 | 
  
     *           [OPERATION_MODE_CONFIG,
 
   | 
   | 
  171 | 
  
     *            OPERATION_MODE_ACCONLY,
 
   | 
   | 
  172 | 
  
     *            OPERATION_MODE_MAGONLY,
 
   | 
   | 
  173 | 
  
     *            OPERATION_MODE_GYRONLY,
 
   | 
   | 
  174 | 
  
     *            OPERATION_MODE_ACCMAG,
 
   | 
   | 
  175 | 
  
     *            OPERATION_MODE_ACCGYRO,
 
   | 
   | 
  176 | 
  
     *            OPERATION_MODE_MAGGYRO,
 
   | 
   | 
  177 | 
  
     *            OPERATION_MODE_AMG,
 
   | 
   | 
  178 | 
  
     *            OPERATION_MODE_IMUPLUS,
 
   | 
   | 
  179 | 
  
     *            OPERATION_MODE_COMPASS,
 
   | 
   | 
  180 | 
  
     *            OPERATION_MODE_M4G,
 
   | 
   | 
  181 | 
  
     *            OPERATION_MODE_NDOF_FMC_OFF,
 
   | 
   | 
  182 | 
  
     *            OPERATION_MODE_NDOF]
 
   | 
  | 116 | 
  183 | 
  
     */
 
   | 
  | 117 | 
  184 | 
  
    void Adafruit_BNO055::setMode(adafruit_bno055_opmode_t mode) {
   | 
  | 118 | 
  185 | 
  
      _mode = mode;
 
   | 
  | ... | ... |  | 
  | 123 | 
  190 | 
  
    /*!
 
   | 
  | 124 | 
  191 | 
  
     *  @brief  Changes the chip's axis remap
 
   | 
  | 125 | 
  192 | 
  
     *  @param  remapcode
 
   | 
   | 
  193 | 
  
     *          remap code possible values
 
   | 
   | 
  194 | 
  
     *          [REMAP_CONFIG_P0
 
   | 
   | 
  195 | 
  
     *           REMAP_CONFIG_P1 (default)
 
   | 
   | 
  196 | 
  
     *           REMAP_CONFIG_P2
 
   | 
   | 
  197 | 
  
     *           REMAP_CONFIG_P3
 
   | 
   | 
  198 | 
  
     *           REMAP_CONFIG_P4
 
   | 
   | 
  199 | 
  
     *           REMAP_CONFIG_P5
 
   | 
   | 
  200 | 
  
     *           REMAP_CONFIG_P6
 
   | 
   | 
  201 | 
  
     *           REMAP_CONFIG_P7]
 
   | 
  | 126 | 
  202 | 
  
     */
 
   | 
  | 127 | 
  203 | 
  
    void Adafruit_BNO055::setAxisRemap(
 
   | 
  | 128 | 
  204 | 
  
        adafruit_bno055_axis_remap_config_t remapcode) {
   | 
  | ... | ... |  | 
  | 140 | 
  216 | 
  
    /*!
 
   | 
  | 141 | 
  217 | 
  
     *  @brief  Changes the chip's axis signs
 
   | 
  | 142 | 
  218 | 
  
     *  @param  remapsign
 
   | 
   | 
  219 | 
  
     *          remap sign possible values
 
   | 
   | 
  220 | 
  
     *          [REMAP_SIGN_P0
 
   | 
   | 
  221 | 
  
     *           REMAP_SIGN_P1 (default)
 
   | 
   | 
  222 | 
  
     *           REMAP_SIGN_P2
 
   | 
   | 
  223 | 
  
     *           REMAP_SIGN_P3
 
   | 
   | 
  224 | 
  
     *           REMAP_SIGN_P4
 
   | 
   | 
  225 | 
  
     *           REMAP_SIGN_P5
 
   | 
   | 
  226 | 
  
     *           REMAP_SIGN_P6
 
   | 
   | 
  227 | 
  
     *           REMAP_SIGN_P7]
 
   | 
  | 143 | 
  228 | 
  
     */
 
   | 
  | 144 | 
  229 | 
  
    void Adafruit_BNO055::setAxisSign(adafruit_bno055_axis_remap_sign_t remapsign) {
   | 
  | 145 | 
  230 | 
  
      adafruit_bno055_opmode_t modeback = _mode;
 
   | 
  | ... | ... |  | 
  | 155 | 
  240 | 
  
    
 
   | 
  | 156 | 
  241 | 
  
    /*!
 
   | 
  | 157 | 
  242 | 
  
     *  @brief  Use the external 32.768KHz crystal
 
   | 
  | 158 | 
   | 
  
     *  @param  usextal boolean
 
   | 
   | 
  243 | 
  
     *  @param  usextal
 
   | 
   | 
  244 | 
  
     *          use external crystal boolean
 
   | 
  | 159 | 
  245 | 
  
     */
 
   | 
  | 160 | 
  246 | 
  
    void Adafruit_BNO055::setExtCrystalUse(boolean usextal) {
   | 
  | 161 | 
  247 | 
  
      adafruit_bno055_opmode_t modeback = _mode;
 
   | 
  | ... | ... |  | 
  | 178 | 
  264 | 
  
    /*!
 
   | 
  | 179 | 
  265 | 
  
     *   @brief  Gets the latest system status info
 
   | 
  | 180 | 
  266 | 
  
     *   @param  system_status
 
   | 
   | 
  267 | 
  
     *           system status info
 
   | 
  | 181 | 
  268 | 
  
     *   @param  self_test_result
 
   | 
   | 
  269 | 
  
     *           self test result
 
   | 
  | 182 | 
  270 | 
  
     *   @param  system_error
 
   | 
   | 
  271 | 
  
     *           system error info
 
   | 
  | 183 | 
  272 | 
  
     */
 
   | 
  | 184 | 
  273 | 
  
    void Adafruit_BNO055::getSystemStatus(uint8_t *system_status,
 
   | 
  | 185 | 
  274 | 
  
                                          uint8_t *self_test_result,
 
   | 
  | ... | ... |  | 
  | 235 | 
  324 | 
  
    
 
   | 
  | 236 | 
  325 | 
  
    /*!
 
   | 
  | 237 | 
  326 | 
  
     *  @brief  Gets the chip revision numbers
 
   | 
   | 
  327 | 
  
     *  @param  info
 
   | 
   | 
  328 | 
  
     *          revision info
 
   | 
  | 238 | 
  329 | 
  
     */
 
   | 
  | 239 | 
  330 | 
  
    void Adafruit_BNO055::getRevInfo(adafruit_bno055_rev_info_t *info) {
   | 
  | 240 | 
  331 | 
  
      uint8_t a, b;
 
   | 
  | ... | ... |  | 
  | 262 | 
  353 | 
  
     *  @brief  Gets current calibration state.  Each value should be a uint8_t
 
   | 
  | 263 | 
  354 | 
  
     *          pointer and it will be set to 0 if not calibrated and 3 if
 
   | 
  | 264 | 
  355 | 
  
     *          fully calibrated.
 
   | 
   | 
  356 | 
  
     *          See section 34.3.54
 
   | 
  | 265 | 
  357 | 
  
     *  @param  sys
 
   | 
   | 
  358 | 
  
     *          Current system calibration status, depends on status of all sensors,
 
   | 
   | 
  359 | 
  
     * read-only
 
   | 
  | 266 | 
  360 | 
  
     *  @param  gyro
 
   | 
   | 
  361 | 
  
     *          Current calibration status of Gyroscope, read-only
 
   | 
  | 267 | 
  362 | 
  
     *  @param  accel
 
   | 
   | 
  363 | 
  
     *          Current calibration status of Accelerometer, read-only
 
   | 
  | 268 | 
  364 | 
  
     *  @param  mag
 
   | 
   | 
  365 | 
  
     *          Current calibration status of Magnetometer, read-only
 
   | 
  | 269 | 
  366 | 
  
     */
 
   | 
  | 270 | 
  367 | 
  
    void Adafruit_BNO055::getCalibration(uint8_t *sys, uint8_t *gyro,
 
   | 
  | 271 | 
  368 | 
  
                                         uint8_t *accel, uint8_t *mag) {
   | 
  | ... | ... |  | 
  | 296 | 
  393 | 
  
    /*!
 
   | 
  | 297 | 
  394 | 
  
     *  @brief   Gets a vector reading from the specified source
 
   | 
  | 298 | 
  395 | 
  
     *  @param   vector_type
 
   | 
   | 
  396 | 
  
     *           possible vector type values
 
   | 
   | 
  397 | 
  
     *           [VECTOR_ACCELEROMETER
 
   | 
   | 
  398 | 
  
     *            VECTOR_MAGNETOMETER
 
   | 
   | 
  399 | 
  
     *            VECTOR_GYROSCOPE
 
   | 
   | 
  400 | 
  
     *            VECTOR_EULER
 
   | 
   | 
  401 | 
  
     *            VECTOR_LINEARACCEL
 
   | 
   | 
  402 | 
  
     *            VECTOR_GRAVITY]
 
   | 
  | 299 | 
  403 | 
  
     *  @return  vector from specified source
 
   | 
  | 300 | 
  404 | 
  
     */
 
   | 
  | 301 | 
  405 | 
  
    imu::Vector<3> Adafruit_BNO055::getVector(adafruit_vector_type_t vector_type) {
   | 
  | ... | ... |  | 
  | 501 | 
  605 | 
  
    
 
   | 
  | 502 | 
  606 | 
  
    /*!
 
   | 
  | 503 | 
  607 | 
  
     *  @brief  Writes an array of calibration values to the sensor's offset
 
   | 
   | 
  608 | 
  
    <<<<<<< HEAD
 
   | 
   | 
  609 | 
  
     * registers
 
   | 
   | 
  610 | 
  
    =======
 
   | 
  | 504 | 
  611 | 
  
     *          registers
 
   | 
   | 
  612 | 
  
    >>>>>>> 75f03d2e1fd440e7febc0de8c47a52bab09c51b0
 
   | 
  | 505 | 
  613 | 
  
     *  @param  calibData
 
   | 
   | 
  614 | 
  
     *          calibration data
 
   | 
  | 506 | 
  615 | 
  
     */
 
   | 
  | 507 | 
  616 | 
  
    void Adafruit_BNO055::setSensorOffsets(const uint8_t *calibData) {
   | 
  | 508 | 
  617 | 
  
      adafruit_bno055_opmode_t lastMode = _mode;
 
   | 
  | ... | ... |  | 
  | 548 | 
  657 | 
  
    /*!
 
   | 
  | 549 | 
  658 | 
  
     *  @brief  Writes to the sensor's offset registers from an offset struct
 
   | 
  | 550 | 
  659 | 
  
     *  @param  offsets_type
 
   | 
   | 
  660 | 
  
    <<<<<<< HEAD
 
   | 
   | 
  661 | 
  
     *          accel_offset_x = acceleration offset x
 
   | 
   | 
  662 | 
  
     *          accel_offset_y = acceleration offset y
 
   | 
   | 
  663 | 
  
     *          accel_offset_z = acceleration offset z
 
   | 
   | 
  664 | 
  
     *
 
   | 
   | 
  665 | 
  
     *          mag_offset_x   = magnetometer offset x
 
   | 
   | 
  666 | 
  
     *          mag_offset_y   = magnetometer offset y
 
   | 
   | 
  667 | 
  
     *          mag_offset_z   = magnetometer offset z
 
   | 
   | 
  668 | 
  
     *
 
   | 
   | 
  669 | 
  
     *          gyro_offset_x  = gyroscrope offset x
 
   | 
   | 
  670 | 
  
     *          gyro_offset_y  = gyroscrope offset y
 
   | 
   | 
  671 | 
  
     *          gyro_offset_z  = gyroscrope offset z
 
   | 
   | 
  672 | 
  
     *
 
   | 
   | 
  673 | 
  
     *
 
   | 
   | 
  674 | 
  
    =======
 
   | 
   | 
  675 | 
  
    >>>>>>> 75f03d2e1fd440e7febc0de8c47a52bab09c51b0
 
   | 
  | 551 | 
  676 | 
  
     */
 
   | 
  | 552 | 
  677 | 
  
    void Adafruit_BNO055::setSensorOffsets(
 
   | 
  | 553 | 
  678 | 
  
        const adafruit_bno055_offsets_t &offsets_type) {
   | 
  | ... | ... |  | 
  | 606 | 
  731 | 
  
     *  @brief  Writes an 8 bit value over I2C
 
   | 
  | 607 | 
  732 | 
  
     */
 
   | 
  | 608 | 
  733 | 
  
    bool Adafruit_BNO055::write8(adafruit_bno055_reg_t reg, byte value) {
   | 
  | 609 | 
   | 
  
      Wire.beginTransmission(_address);
 
   | 
   | 
  734 | 
  
      _wire->beginTransmission(_address);
 
   | 
  | 610 | 
  735 | 
  
    #if ARDUINO >= 100
 
   | 
  | 611 | 
   | 
  
      Wire.write((uint8_t)reg);
 
   | 
  | 612 | 
   | 
  
      Wire.write((uint8_t)value);
 
   | 
   | 
  736 | 
  
      _wire->write((uint8_t)reg);
 
   | 
   | 
  737 | 
  
      _wire->write((uint8_t)value);
 
   | 
  | 613 | 
  738 | 
  
    #else
 
   | 
  | 614 | 
   | 
  
      Wire.send(reg);
 
   | 
  | 615 | 
   | 
  
      Wire.send(value);
 
   | 
   | 
  739 | 
  
      _wire->send(reg);
 
   | 
   | 
  740 | 
  
      _wire->send(value);
 
   | 
  | 616 | 
  741 | 
  
    #endif
 
   | 
  | 617 | 
   | 
  
      Wire.endTransmission();
 
   | 
   | 
  742 | 
  
      _wire->endTransmission();
 
   | 
  | 618 | 
  743 | 
  
    
 
   | 
  | 619 | 
  744 | 
  
      /* ToDo: Check for error! */
 
   | 
  | 620 | 
  745 | 
  
      return true;
 
   | 
  | ... | ... |  | 
  | 626 | 
  751 | 
  
    byte Adafruit_BNO055::read8(adafruit_bno055_reg_t reg) {
   | 
  | 627 | 
  752 | 
  
      byte value = 0;
 
   | 
  | 628 | 
  753 | 
  
    
 
   | 
  | 629 | 
   | 
  
      Wire.beginTransmission(_address);
 
   | 
   | 
  754 | 
  
      _wire->beginTransmission(_address);
 
   | 
  | 630 | 
  755 | 
  
    #if ARDUINO >= 100
 
   | 
  | 631 | 
   | 
  
      Wire.write((uint8_t)reg);
 
   | 
   | 
  756 | 
  
      _wire->write((uint8_t)reg);
 
   | 
  | 632 | 
  757 | 
  
    #else
 
   | 
  | 633 | 
   | 
  
      Wire.send(reg);
 
   | 
   | 
  758 | 
  
      _wire->send(reg);
 
   | 
  | 634 | 
  759 | 
  
    #endif
 
   | 
  | 635 | 
   | 
  
      Wire.endTransmission();
 
   | 
  | 636 | 
   | 
  
      Wire.requestFrom(_address, (byte)1);
 
   | 
   | 
  760 | 
  
      _wire->endTransmission();
 
   | 
   | 
  761 | 
  
      _wire->requestFrom(_address, (byte)1);
 
   | 
  | 637 | 
  762 | 
  
    #if ARDUINO >= 100
 
   | 
  | 638 | 
   | 
  
      value = Wire.read();
 
   | 
   | 
  763 | 
  
      value = _wire->read();
 
   | 
  | 639 | 
  764 | 
  
    #else
 
   | 
  | 640 | 
   | 
  
      value = Wire.receive();
 
   | 
   | 
  765 | 
  
      value = _wire->receive();
 
   | 
  | 641 | 
  766 | 
  
    #endif
 
   | 
  | 642 | 
  767 | 
  
    
 
   | 
  | 643 | 
  768 | 
  
      return value;
 
   | 
  | ... | ... |  | 
  | 648 | 
  773 | 
  
     */
 
   | 
  | 649 | 
  774 | 
  
    bool Adafruit_BNO055::readLen(adafruit_bno055_reg_t reg, byte *buffer,
 
   | 
  | 650 | 
  775 | 
  
                                  uint8_t len) {
   | 
  | 651 | 
   | 
  
      Wire.beginTransmission(_address);
 
   | 
   | 
  776 | 
  
      _wire->beginTransmission(_address);
 
   | 
  | 652 | 
  777 | 
  
    #if ARDUINO >= 100
 
   | 
  | 653 | 
   | 
  
      Wire.write((uint8_t)reg);
 
   | 
   | 
  778 | 
  
      _wire->write((uint8_t)reg);
 
   | 
  | 654 | 
  779 | 
  
    #else
 
   | 
  | 655 | 
   | 
  
      Wire.send(reg);
 
   | 
   | 
  780 | 
  
      _wire->send(reg);
 
   | 
  | 656 | 
  781 | 
  
    #endif
 
   | 
  | 657 | 
   | 
  
      Wire.endTransmission();
 
   | 
  | 658 | 
   | 
  
      Wire.requestFrom(_address, (byte)len);
 
   | 
   | 
  782 | 
  
      _wire->endTransmission();
 
   | 
   | 
  783 | 
  
      _wire->requestFrom(_address, (byte)len);
 
   | 
  | 659 | 
  784 | 
  
    
 
   | 
  | 660 | 
  785 | 
  
      for (uint8_t i = 0; i < len; i++) {
   | 
  | 661 | 
  786 | 
  
    #if ARDUINO >= 100
 
   | 
  | 662 | 
   | 
  
        buffer[i] = Wire.read();
 
   | 
   | 
  787 | 
  
        buffer[i] = _wire->read();
 
   | 
  | 663 | 
  788 | 
  
    #else
 
   | 
  | 664 | 
   | 
  
        buffer[i] = Wire.receive();
 
   | 
   | 
  789 | 
  
        buffer[i] = _wire->receive();
 
   | 
  | 665 | 
  790 | 
  
    #endif
 
   | 
  | 666 | 
  791 | 
  
      }
 
   | 
  | 667 | 
  792 | 
  
    
 
   |