bmi160 1.1.0

Platform-agnostic Rust driver for the BMI160 inertial measurement unit (IMU).
Documentation
use bmi160::{AccelerometerRange, GyroscopeRange};
mod common;
use crate::common::{destroy_i2c, new_i2c, Register, DEV_ADDR};
use embedded_hal_mock::eh1::i2c::Transaction as I2cTrans;

macro_rules! set_range_test {
    ($name:ident, $method:ident, $st:ident::$variant:ident, $cmd:expr, $reg:ident) => {
        #[test]
        fn $name() {
            let mut imu = new_i2c(&[I2cTrans::write(DEV_ADDR, vec![Register::$reg, $cmd])]);
            imu.$method($st::$variant).unwrap();
            destroy_i2c(imu);
        }
    };
}

macro_rules! set_accel_range_test {
    ($name:ident, $variant:ident, $cmd:expr) => {
        set_range_test!(
            $name,
            set_accel_range,
            AccelerometerRange::$variant,
            $cmd,
            ACC_RANGE
        );
    };
}
set_accel_range_test!(set_accel_range_g2, G2, 0b0000_0011);
set_accel_range_test!(set_accel_range_g4, G4, 0b0000_0101);
set_accel_range_test!(set_accel_range_g8, G8, 0b0000_1000);

macro_rules! set_gyro_range_test {
    ($name:ident, $variant:ident, $cmd:expr) => {
        set_range_test!(
            $name,
            set_gyro_range,
            GyroscopeRange::$variant,
            $cmd,
            GYR_RANGE
        );
    };
}
set_gyro_range_test!(set_gyro_range_2000, Scale2000, 0b0000_0000);
set_gyro_range_test!(set_gyro_range_1000, Scale1000, 0b0000_0001);
set_gyro_range_test!(set_gyro_range_500, Scale500, 0b0000_0010);
set_gyro_range_test!(set_gyro_range_250, Scale250, 0b0000_0011);
set_gyro_range_test!(set_gyro_range_125, Scale125, 0b0000_0100);