The intermediate bootloader binary (located at 0x8000) now uses
USB PID 0x635b and the final bootloader binary (located at 0x0)
uses USB PID 0x635c.
This lets us find out what binary we're talking to depending on
how it registers on the USB.
#[cfg(bootloader_type = "final")]
const APPLICATION_ADDR: u32 = 0x8000;
#[cfg(bootloader_type = "final")]
const APPLICATION_ADDR: u32 = 0x8000;
+#[cfg(bootloader_type = "intermediate")]
+const USB_PID: u16 = 0x635b;
+
+#[cfg(bootloader_type = "final")]
+const USB_PID: u16 = 0x635c;
+
unsafe fn application_missing() -> bool {
let first_app_word = Reg32::new(APPLICATION_ADDR);
unsafe fn application_missing() -> bool {
let first_app_word = Reg32::new(APPLICATION_ADDR);
port::set_pull(port::PORTE, 24, port::Pull::Up);
if application_missing() || bootloader_requested() {
port::set_pull(port::PORTE, 24, port::Pull::Up);
if application_missing() || bootloader_requested() {
- usb_serial::init(0xf055, 0x635c);
+ usb_serial::init(0xf055, USB_PID);
let mut b = bootloader::Bootloader::new();
let mut b = bootloader::Bootloader::new();