opt300x 1.0.0

Platform-agnostic Rust driver for the OPT300x ambient light sensors. Compatible with OPT3001, OPT3002, OPT3004, OPT3006 and OPT3007
Documentation
extern crate embedded_hal_mock as hal;
#[macro_use]
extern crate nb;
extern crate opt300x;
use hal::eh1::i2c::Transaction as I2cTrans;
use opt300x::Status;

mod common;
use self::common::{destroy, new_opt3001, BitFlags as BF, Register as Reg, CFG_DEFAULT, DEV_ADDR};

#[test]
fn read_measurement() {
    let value = 0x789A;
    let transactions = [
        I2cTrans::write(
            DEV_ADDR,
            vec![
                Reg::CONFIG,
                ((CFG_DEFAULT | BF::MODE0) >> 8) as u8,
                CFG_DEFAULT as u8,
            ],
        ),
        I2cTrans::write_read(
            DEV_ADDR,
            vec![Reg::CONFIG],
            vec![((CFG_DEFAULT) >> 8) as u8, CFG_DEFAULT as u8],
        ),
        I2cTrans::write_read(
            DEV_ADDR,
            vec![Reg::CONFIG],
            vec![
                ((CFG_DEFAULT | BF::OVF) >> 8) as u8,
                (CFG_DEFAULT | BF::CRF | BF::FH) as u8,
            ],
        ),
        I2cTrans::write_read(
            DEV_ADDR,
            vec![Reg::RESULT],
            vec![(value >> 8) as u8, (value & 0xFF) as u8],
        ),
    ];
    let mut sensor = new_opt3001(&transactions);
    let measurement = block!(sensor.read_lux()).unwrap();

    assert!(measurement.result > 2818.56 - 0.5);
    assert!(measurement.result < 2818.56 + 0.5);
    assert_eq!(
        Status {
            has_overflown: true,
            conversion_ready: true,
            was_too_high: true,
            was_too_low: false,
        },
        measurement.status
    );
    destroy(sensor);
}