aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/main.rs b/src/main.rs
index 7e364ab..7c9ee9c 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -3,6 +3,7 @@
#![no_std]
#![no_main]
+#![allow(clippy::missing_safety_doc)]
extern crate panic_halt;
@@ -14,12 +15,14 @@ mod crc;
mod device;
mod hid;
+use cortex_m::asm::delay;
use cortex_m_rt::entry;
+use embedded_hal::digital::v2::OutputPin;
use hal::prelude::*;
-use stm32f103xx_usb::UsbBus;
+use hal::usb::{Peripheral, UsbBus};
use usb_device::class::UsbClass;
-use crate::crc::Crc;
+use crate::crc::Stm32Crc;
use crate::device::Nitrokey;
use crate::hid::HidClass;
@@ -28,7 +31,7 @@ fn main() -> ! {
let p = hal::stm32::Peripherals::take().unwrap();
p.RCC.ahbenr.modify(|_, w| w.crcen().set_bit());
- let crc = Crc::new(p.CRC);
+ let crc = Stm32Crc::new(p.CRC);
let mut flash = p.FLASH.constrain();
let mut rcc = p.RCC.constrain();
@@ -44,10 +47,20 @@ fn main() -> ! {
let mut gpioa = p.GPIOA.split(&mut rcc.apb2);
- let usb_bus = UsbBus::usb_with_reset(p.USB, &mut rcc.apb1, &clocks, &mut gpioa.crh, gpioa.pa12);
+ let mut pin_dp = gpioa.pa12.into_push_pull_output(&mut gpioa.crh);
+ pin_dp.set_low().unwrap();
+ delay(clocks.sysclk().0 / 100);
+ let pin_dp = pin_dp.into_floating_input(&mut gpioa.crh);
+ let pin_dm = gpioa.pa11;
+
+ let usb = Peripheral {
+ usb: p.USB,
+ pin_dm,
+ pin_dp,
+ };
+ let usb_bus = UsbBus::new(usb);
let mut usb_class = HidClass::new(Nitrokey::new(crc), &usb_bus);
let mut usb_dev = device::create_usb_device(&usb_bus);
- usb_dev.force_reset().expect("USB reset failed");
loop {
if usb_dev.poll(&mut [&mut usb_class]) {