In the I2C case for readRegisterRegion, the line if( Wire.endTransmission() != 0 ) should be if( Wire.endTransmission(false) != 0 ), as the LSM6DS3TR-C datasheet specifies that a repeated START should be used after writing the register address and before reading the data, rather than a STOP.
In the I2C case for readRegisterRegion, the line if( Wire.endTransmission() != 0 ) should be if( Wire.endTransmission(false) != 0 ), as the LSM6DS3TR-C datasheet specifies that a repeated START should be used after writing the register address and before reading the data, rather than a STOP.