use crate::laser_diode::current_sources::*; use fugit::RateExtU32; use stm32_eth::EthPins; use stm32f4xx_hal::{ gpio::{Alternate, GpioExt, Speed}, otg_fs::USB, pac::{GPIOA, GPIOB, GPIOC, GPIOD, OTG_FS_DEVICE, OTG_FS_GLOBAL, OTG_FS_PWRCLK, SPI2}, rcc::Clocks, spi, spi::{NoMiso, Spi}, }; use crate::network::network::EthernetPins; pub fn setup( clocks: Clocks, gpioa: GPIOA, gpiob: GPIOB, gpioc: GPIOC, gpiod: GPIOD, spi2: SPI2, otg_fs_global: OTG_FS_GLOBAL, otg_fs_device: OTG_FS_DEVICE, otg_fs_pwrclk: OTG_FS_PWRCLK, ) -> ( EthernetPins, USB, CurrentSourcePhyConstruct, stm32f4xx_hal::gpio::PA2>, stm32f4xx_hal::gpio::PC1>, // photo_diode_phy, // thermostat_phy ) { let gpioa = gpioa.split(); let gpiob = gpiob.split(); let gpioc = gpioc.split(); let gpiod = gpiod.split(); let usb = USB { usb_global: otg_fs_global, usb_device: otg_fs_device, usb_pwrclk: otg_fs_pwrclk, pin_dm: gpioa.pa11.into_alternate(), pin_dp: gpioa.pa12.into_alternate(), hclk: clocks.hclk(), }; let eth_pins = EthPins { ref_clk: gpioa.pa1, crs: gpioa.pa7, tx_en: gpiob.pb11, tx_d0: gpiob.pb12, tx_d1: gpiob.pb13, rx_d0: gpioc.pc4, rx_d1: gpioc.pc5, }; let mut mdio = gpioa.pa2.into_alternate::<11>(); let mut mdc = gpioc.pc1.into_alternate::<11>(); mdio.set_speed(Speed::VeryHigh); mdc.set_speed(Speed::VeryHigh); let current_source_phy = CurrentSourcePhyConstruct { max5719_spi: Spi::new( 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(), current_source_ldo_en: gpiod.pd9.into_push_pull_output(), current_source_short: gpioa.pa4.into_push_pull_output(), }; (eth_pins, usb, current_source_phy, mdio, mdc) }