bootloader: Use distinct USB PIDs depending on location in flash.
authorTilman Sauerbeck <tilman@code-monkey.de>
Thu, 7 Nov 2019 21:05:49 +0000 (22:05 +0100)
committerTilman Sauerbeck <tilman@code-monkey.de>
Sun, 5 Jan 2020 19:38:11 +0000 (20:38 +0100)
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.

src/bootloader/main.rs

index 50c32a4e12f5a0b409047fb40d77aa741431dda1..ca459fdc2eccf1c406b52b6423e8d40aab307be9 100644 (file)
@@ -49,6 +49,12 @@ const APPLICATION_ADDR: u32 = 0x0;
 #[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);
 
@@ -79,7 +85,7 @@ pub unsafe extern fn main() {
     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();