X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fbootloader%2Fmain.rs;h=d81da1532baa5b0b41f3a05f5f1adc7e1cf3d084;hb=819a110096caba3d31533649fc9e007bd93af302;hp=88a9a0bcf263c1cef50b517310bbd2fdbf8f6b88;hpb=1364963a63e0f2ed2c46eebbb7afcd3997258c78;p=gps-watch.git diff --git a/src/bootloader/main.rs b/src/bootloader/main.rs index 88a9a0b..d81da15 100644 --- a/src/bootloader/main.rs +++ b/src/bootloader/main.rs @@ -31,6 +31,9 @@ mod flash; mod bootloader; use common::clock; +use common::systick; +use common::port; +use common::gpio; use common::usb_serial; extern { @@ -39,12 +42,30 @@ extern { const APPLICATION_ADDR: u32 = 0x0; +fn bootloader_requested() -> bool { + let start_ticks = systick::now(); + + while !systick::has_timeout_ms(start_ticks, 3000) { + if (gpio::get(gpio::GPIOE) & (1 << 24)) == 0 { + return true; + } + } + + false +} + #[no_mangle] pub unsafe extern fn main() { clock::configure(); + systick::init(); + + // Configure lower left push button. + gpio::set_direction(gpio::GPIOE, 1 << 24, gpio::Direction::Input); + port::set_af(port::PORTE, 24, 1); + port::set_pull(port::PORTE, 24, port::Pull::Up); - if true { - usb_serial::init(0x1fc9, 0x0094); + if bootloader_requested() { + usb_serial::init(0xf055, 0x635c); let mut b = bootloader::Bootloader::new(); @@ -52,5 +73,5 @@ pub unsafe extern fn main() { } } - jump_to_application(__application_addr); + jump_to_application(APPLICATION_ADDR); }