diff --git a/src/device/boot.rs b/src/device/boot.rs
index 0a1c26f..92e1635 100644
--- a/src/device/boot.rs
+++ b/src/device/boot.rs
@@ -1,29 +1,29 @@
-use stm32f4xx_hal::{
- watchdog::IndependentWatchdog,
- rcc::RccExt,
- pac::{CorePeripherals, Peripherals},
- time::MegaHertz
-};
+use super::{gpio, log_setup, sys_timer, usb};
+use crate::laser_diode::current_sources::*;
use fugit::ExtU32;
use log::info;
-use super::{log_setup, sys_timer, usb, gpio};
-use crate::laser_diode::current_sources::*;
+use stm32f4xx_hal::{
+ pac::{CorePeripherals, Peripherals},
+ rcc::RccExt,
+ time::MegaHertz,
+ watchdog::IndependentWatchdog,
+};
#[cfg(not(feature = "semihosting"))]
const WATCHDOG_PERIOD: u32 = 1000;
#[cfg(feature = "semihosting")]
const WATCHDOG_PERIOD: u32 = 30000;
-pub fn bootup (mut core_perif : CorePeripherals, perif : Peripherals) -> IndependentWatchdog {
-
+pub fn bootup(mut core_perif: CorePeripherals, perif: Peripherals) -> IndependentWatchdog {
log_setup::init_log();
info!("Kirdy init");
core_perif.SCB.enable_icache();
core_perif.SCB.enable_dcache(&mut core_perif.CPUID);
-
- let clocks = perif.RCC.constrain()
+ let clocks = perif
+ .RCC
+ .constrain()
.cfgr
.use_hse(MegaHertz::from_raw(8).convert())
.sysclk(MegaHertz::from_raw(168).convert())
@@ -34,29 +34,31 @@ pub fn bootup (mut core_perif : CorePeripherals, perif : Peripherals) -> Indepen
sys_timer::setup(core_perif.SYST, clocks);
- let (
- eth_pins,
- usb,
- current_source_phy) = gpio::setup(
- clocks, perif.TIM4,
- perif.GPIOA, perif.GPIOB, perif.GPIOC, perif.GPIOD, perif.GPIOE, perif.GPIOF, perif.GPIOG,
- perif.SPI1, perif.SPI2, perif.SPI3,
- perif.ADC1,
- perif.OTG_FS_GLOBAL, perif.OTG_FS_DEVICE, perif.OTG_FS_PWRCLK,
+ let (eth_pins, usb, current_source_phy) = gpio::setup(
+ clocks,
+ perif.GPIOA,
+ perif.GPIOB,
+ perif.GPIOC,
+ perif.GPIOD,
+ perif.GPIOG,
+ perif.SPI2,
+ perif.OTG_FS_GLOBAL,
+ perif.OTG_FS_DEVICE,
+ perif.OTG_FS_PWRCLK,
);
usb::State::setup(usb);
- let mut laser = current_source {
+ let mut laser = CurrentSource {
phy: current_source_phy,
- setting: current_source_settings_construct {
- output_current : 0.0
- }
+ setting: CurrentSourceSettingsConstruct {
+ output_current: 0.0,
+ },
};
laser.setup();
laser.set_current(0.1);
-
+
let mut wd = IndependentWatchdog::new(perif.IWDG);
wd.start(WATCHDOG_PERIOD.millis());
wd.feed();
@@ -64,5 +66,4 @@ pub fn bootup (mut core_perif : CorePeripherals, perif : Peripherals) -> Indepen
info!("Kirdy setup complete");
wd
-
-}
\ No newline at end of file
+}
diff --git a/src/device/gpio.rs b/src/device/gpio.rs
index d08f1c2..4fb560f 100644
--- a/src/device/gpio.rs
+++ b/src/device/gpio.rs
@@ -1,70 +1,42 @@
-use stm32f4xx_hal::{
- adc::Adc,
- gpio::{
- AF5, Alternate, Analog, Input,
- gpioa::*,
- gpiob::*,
- gpioc::*,
- gpiod::*,
- gpioe::*,
- gpiof::*,
- gpiog::*,
- GpioExt,
- Output, PushPull,
- },
- hal::{self, blocking::spi::Transfer, digital::v2::OutputPin},
- otg_fs::USB,
- rcc::Clocks,
- spi,
- spi::{Spi, NoMiso, TransferModeNormal},
- pac::{
- ADC1,
- GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG,
- OTG_FS_GLOBAL, OTG_FS_DEVICE, OTG_FS_PWRCLK,
- SPI1, SPI2, SPI3,
- TIM4
- },
- timer::Timer,
- time::U32Ext,
- time::MegaHertz
-};
+use crate::laser_diode::current_sources::*;
use fugit::RateExtU32;
use stm32_eth::EthPins;
-use crate::laser_diode::current_sources::*;
+use stm32f4xx_hal::{
+ gpio::{gpioa::*, gpiob::*, gpioc::*, gpiog::*, GpioExt, Input},
+ otg_fs::USB,
+ pac::{GPIOA, GPIOB, GPIOC, GPIOD, GPIOG, OTG_FS_DEVICE, OTG_FS_GLOBAL, OTG_FS_PWRCLK, SPI2},
+ rcc::Clocks,
+ spi,
+ spi::{NoMiso, Spi},
+};
-pub type EthernetPins = EthPins<
- PA1,
- PA7,
- PB11,
- PG13,
- PB13,
- PC4,
- PC5,
->;
+pub type EthernetPins =
+ EthPins, PA7, PB11, PG13, PB13, PC4, PC5>;
pub fn setup(
clocks: Clocks,
- tim4: TIM4,
- gpioa: GPIOA, gpiob: GPIOB, gpioc: GPIOC, gpiod: GPIOD, gpioe: GPIOE, gpiof: GPIOF, gpiog: GPIOG,
- spi1: SPI1, spi2: SPI2, spi3: SPI3,
- adc1: ADC1,
- otg_fs_global: OTG_FS_GLOBAL, otg_fs_device: OTG_FS_DEVICE, otg_fs_pwrclk: OTG_FS_PWRCLK,
-) -> (
- EthernetPins,
- USB,
- current_source_phy_construct,
- // photo_diode_phy,
- // thermostat_phy
+ gpioa: GPIOA,
+ gpiob: GPIOB,
+ gpioc: GPIOC,
+ gpiod: GPIOD,
+ gpiog: GPIOG,
+ spi2: SPI2,
+ otg_fs_global: OTG_FS_GLOBAL,
+ otg_fs_device: OTG_FS_DEVICE,
+ otg_fs_pwrclk: OTG_FS_PWRCLK,
+) -> (
+ EthernetPins,
+ USB,
+ CurrentSourcePhyConstruct,
+ // photo_diode_phy,
+ // thermostat_phy
) {
-
let gpioa = gpioa.split();
let gpiob = gpiob.split();
let gpioc = gpioc.split();
let gpiod = gpiod.split();
- let gpioe = gpioe.split();
- let gpiof = gpiof.split();
- let gpiog = gpiog.split();
-
+ let gpiog = gpiog.split();
+
let usb = USB {
usb_global: otg_fs_global,
usb_device: otg_fs_device,
@@ -75,32 +47,35 @@ pub fn setup(
};
let eth_pins = EthPins {
- ref_clk: gpioa.pa1,
- crs: gpioa.pa7,
+ ref_clk: gpioa.pa1,
+ crs: gpioa.pa7,
tx_en: gpiob.pb11,
- tx_d0: gpiog.pg13,
+ tx_d0: gpiog.pg13,
tx_d1: gpiob.pb13,
- rx_d0: gpioc.pc4,
+ rx_d0: gpioc.pc4,
rx_d1: gpioc.pc5,
};
-
- let current_source_phy = current_source_phy_construct {
+
+ let current_source_phy = CurrentSourcePhyConstruct {
max5719_spi: Spi::new(
- spi2,
- (gpiob.pb10.into_alternate(), NoMiso {}, gpiob.pb15.into_alternate()),
+ spi2,
+ (
+ gpiob.pb10.into_alternate(),
+ NoMiso {},
+ gpiob.pb15.into_alternate(),
+ ),
spi::Mode {
polarity: spi::Polarity::IdleLow,
phase: spi::Phase::CaptureOnFirstTransition,
- },
- 10_u32.MHz(),
- &clocks),
- max5719_load: gpiob.pb14.into_push_pull_output(),
- max5719_cs: gpiod.pd8.into_push_pull_output(),
+ },
+ 10_u32.MHz(),
+ &clocks,
+ ),
+ max5719_load: gpiob.pb14.into_push_pull_output(),
+ max5719_cs: gpiod.pd8.into_push_pull_output(),
current_source_ldo_en: gpiod.pd9.into_push_pull_output(),
- current_source_short: gpioa.pa4.into_push_pull_output()
+ current_source_short: gpioa.pa4.into_push_pull_output(),
};
-
+
(eth_pins, usb, current_source_phy)
-
}
-
diff --git a/src/device/log_setup.rs b/src/device/log_setup.rs
index f4c2d92..3190506 100644
--- a/src/device/log_setup.rs
+++ b/src/device/log_setup.rs
@@ -10,17 +10,15 @@ pub fn init_log() {
#[cfg(feature = "semihosting")]
pub fn init_log() {
+ use cortex_m_log::log::{init, Logger};
+ use cortex_m_log::printer::semihosting::{hio::HStdout, InterruptOk};
use log::LevelFilter;
- use cortex_m_log::log::{Logger, init};
- use cortex_m_log::printer::semihosting::{InterruptOk, hio::HStdout};
static mut LOGGER: Option>> = None;
let logger = Logger {
inner: InterruptOk::<_>::stdout().expect("semihosting stdout"),
level: LevelFilter::Info,
};
- let logger = unsafe {
- LOGGER.get_or_insert(logger)
- };
+ let logger = unsafe { LOGGER.get_or_insert(logger) };
init(logger).expect("set logger");
}
diff --git a/src/device/mod.rs b/src/device/mod.rs
index c912372..1274e24 100644
--- a/src/device/mod.rs
+++ b/src/device/mod.rs
@@ -1,5 +1,5 @@
-pub mod log_setup;
-pub mod usb;
-pub mod sys_timer;
pub mod boot;
-pub mod gpio;
\ No newline at end of file
+pub mod gpio;
+pub mod log_setup;
+pub mod sys_timer;
+pub mod usb;
diff --git a/src/device/sys_timer.rs b/src/device/sys_timer.rs
index 4bd607f..04abbf3 100644
--- a/src/device/sys_timer.rs
+++ b/src/device/sys_timer.rs
@@ -3,10 +3,7 @@ use core::ops::Deref;
use cortex_m::interrupt::Mutex;
use cortex_m::peripheral::syst::SystClkSource;
use cortex_m_rt::exception;
-use stm32f4xx_hal::{
- rcc::Clocks,
- pac::SYST,
-};
+use stm32f4xx_hal::{pac::SYST, rcc::Clocks};
/// Rate in Hz
const TIMER_RATE: u32 = 1000;
@@ -16,7 +13,7 @@ const TIMER_DELTA: u32 = 1000 / TIMER_RATE;
static TIMER_MS: Mutex> = Mutex::new(RefCell::new(0));
/// Setup SysTick exception
-pub fn setup(mut syst: SYST, clocks: Clocks) {
+pub fn setup(mut syst: SYST, clocks: Clocks) {
syst.set_clock_source(SystClkSource::Core);
syst.set_reload(clocks.hclk().to_Hz() / TIMER_RATE - 1);
syst.enable_counter();
@@ -27,18 +24,13 @@ pub fn setup(mut syst: SYST, clocks: Clocks) {
#[exception]
fn SysTick() {
cortex_m::interrupt::free(|cs| {
- *TIMER_MS.borrow(cs)
- .borrow_mut() += TIMER_DELTA;
+ *TIMER_MS.borrow(cs).borrow_mut() += TIMER_DELTA;
});
}
/// Obtain current time in milliseconds
pub fn now() -> u32 {
- cortex_m::interrupt::free(|cs| {
- *TIMER_MS.borrow(cs)
- .borrow()
- .deref()
- })
+ cortex_m::interrupt::free(|cs| *TIMER_MS.borrow(cs).borrow().deref())
}
/// block for `amount` milliseconds
diff --git a/src/device/usb.rs b/src/device/usb.rs
index 11f18f8..2d27f02 100644
--- a/src/device/usb.rs
+++ b/src/device/usb.rs
@@ -1,15 +1,18 @@
-use core::{fmt::{self, Write}, mem::MaybeUninit};
+use core::{
+ fmt::{self, Write},
+ mem::MaybeUninit,
+};
use cortex_m::interrupt::free;
+use log::{Log, Metadata, Record};
use stm32f4xx_hal::{
- otg_fs::{USB, UsbBus as Bus},
+ otg_fs::{UsbBus as Bus, USB},
pac::{interrupt, Interrupt, NVIC},
};
use usb_device::{
- class_prelude::{UsbBusAllocator},
+ class_prelude::UsbBusAllocator,
prelude::{UsbDevice, UsbDeviceBuilder, UsbVidPid},
};
use usbd_serial::SerialPort;
-use log::{Record, Log, Metadata};
static mut EP_MEMORY: [u32; 1024] = [0; 1024];
@@ -36,8 +39,8 @@ impl State {
.device_class(usbd_serial::USB_CLASS_CDC)
.build();
- free(|_| {
- unsafe { STATE = Some(State { serial, dev }); }
+ free(|_| unsafe {
+ STATE = Some(State { serial, dev });
});
unsafe {
@@ -94,8 +97,7 @@ impl Write for SerialOutput {
fn write_str(&mut self, s: &str) -> core::result::Result<(), core::fmt::Error> {
if let Some(ref mut state) = State::get() {
for chunk in s.as_bytes().chunks(16) {
- free(|_| state.serial.write(chunk))
- .map_err(|_| fmt::Error)?;
+ free(|_| state.serial.write(chunk)).map_err(|_| fmt::Error)?;
}
}
Ok(())
diff --git a/src/laser_diode/current_sources.rs b/src/laser_diode/current_sources.rs
index 12a2117..5db5fc4 100644
--- a/src/laser_diode/current_sources.rs
+++ b/src/laser_diode/current_sources.rs
@@ -1,77 +1,71 @@
use stm32f4xx_hal::{
- adc::Adc,
- gpio::{
- AF5, Alternate,
- gpioa::*,
- gpiob::*,
- gpioe::*,
- gpiod::*,
- Output,
- PushPull, PD9,
- },
- hal::{self, blocking::spi::Write, digital::v2::OutputPin},
- spi::{Spi, NoMiso, TransferModeNormal},
+ gpio::{gpioa::*, gpiob::*, gpiod::*, Alternate, Output, PushPull, PD9},
+ hal::{blocking::spi::Write, digital::v2::OutputPin},
pac::SPI2,
+ spi::{NoMiso, Spi, TransferModeNormal},
};
use crate::device::sys_timer::sleep;
-pub trait current_source_phy {
- type current_source_ldo_en: OutputPin;
- type current_source_short: OutputPin;
- type max5719_load: OutputPin;
- type max5719_cs: OutputPin;
- type max5719_spi: Write;
+pub trait CurrentSourcePhy {
+ type CurrentSourceLdoEn: OutputPin;
+ type CurrentSourceShort: OutputPin;
+ type Max5719Load: OutputPin;
+ type Max5719Cs: OutputPin;
+ type Max5719Spi: Write;
}
-pub struct current_source_phy_construct {
- pub max5719_spi: C::max5719_spi,
- pub max5719_load: C::max5719_load,
- pub max5719_cs: C::max5719_cs,
- pub current_source_ldo_en: C::current_source_ldo_en,
- pub current_source_short: C::current_source_short,
+pub struct CurrentSourcePhyConstruct {
+ pub max5719_spi: C::Max5719Spi,
+ pub max5719_load: C::Max5719Load,
+ pub max5719_cs: C::Max5719Cs,
+ pub current_source_ldo_en: C::CurrentSourceLdoEn,
+ pub current_source_short: C::CurrentSourceShort,
}
-pub struct current_source_settings_construct {
- pub output_current: f32
+pub struct CurrentSourceSettingsConstruct {
+ pub output_current: f32,
}
-pub struct current_source {
- pub phy : current_source_phy_construct,
- pub setting: current_source_settings_construct
+pub struct CurrentSource {
+ pub phy: CurrentSourcePhyConstruct,
+ pub setting: CurrentSourceSettingsConstruct,
}
-pub struct current_source_phy_ch0;
+pub struct CurrentSourcePhyCh0;
-impl current_source_phy for current_source_phy_ch0 {
- type current_source_ldo_en = PD9