use atsamd_hal::adc::Adc;
use atsamd_hal::clock::GenericClockController;
use atsamd_hal::pac::gclk::pchctrl::Genselect::Gclk11;
use atsamd_hal::pac::{Adc1, Mclk};
use atsamd_hal::prelude::*;
use atsamd_hal::sercom::{i2c, IoSet3, Sercom4};
use lis3dh::{Lis3dh, SlaveAddr};
use super::pins::aliases::*;
pub struct Accelerometer {
pub scl: I2c0SclReset,
pub sda: I2c0SdaReset,
}
pub type I2cPads = i2c::Pads<Sercom4, IoSet3, I2c0Sda, I2c0Scl>;
impl Accelerometer {
pub fn init(
self,
clocks: &mut GenericClockController,
sercom4: Sercom4,
mclk: &mut Mclk,
) -> Lis3dh<i2c::I2c<i2c::Config<I2cPads>>> {
let gclk0 = clocks.gclk0();
let clock = &clocks.sercom4_core(&gclk0).unwrap();
let freq = clock.freq();
let (sda, scl): (I2c0Sda, I2c0Scl) = (self.sda.into(), self.scl.into());
let pads: I2cPads = i2c::Pads::new(sda, scl);
let i2c = i2c::Config::new(mclk, sercom4, pads, freq)
.baud(400.kHz())
.enable();
Lis3dh::new(i2c, SlaveAddr::Default).unwrap()
}
}
pub struct LightSensor {
pub pd1: LightSensorAdcReset,
}
impl LightSensor {
pub fn init(
self,
adc: Adc1,
clocks: &mut GenericClockController,
mclk: &mut Mclk,
) -> (Adc<Adc1>, LightSensorAdc) {
let adc1 = Adc::adc1(adc, mclk, clocks, Gclk11);
(adc1, self.pd1.into())
}
}