int update_v1() { char str[1024]; int required_build, required_version; uint32_t required_crc32; required_build = detect_firmware_build((uint8_t*)firmware, firmware_length); required_version = detect_bootloader_version((uint8_t*)bootloader, bootloader_length); required_crc32 = bootloader_get_crc32((uint8_t*)bootloader, bootloader_length); //check firmware version if (fdsemu->dev->Version < required_build) { sprintf(str, "Firmware is outdated, the required minimum version is %d\n\nUpgrading will take about 5 seconds.\n\nPress OK to upgrade, press Cancel to quit.", required_build); if (MessageBox(0, str, "FDSemu", MB_OKCANCEL) != IDOK) { delete fdsemu; return(0); } if (upload_firmware(firmware, firmware_length, 0) == false) { MessageBox(0, "Error updating firmware.", "FDSemu", MB_OK); delete fdsemu; return(0); } } //check bootloader version uint32_t bootcrc32 = dev.VerifyBootloader(); if (bootcrc32 != required_crc32) { sprintf(str, "Bootloader is outdated (current version is %08X, required is %08X)\n\nUpgrading will take about 2 seconds.\n\nPress OK to upgrade, press Cancel to quit.", bootcrc32, required_crc32); if (MessageBox(0, str, "FDSemu", MB_OKCANCEL) != IDOK) { delete fdsemu; return(0); } if (upload_bootloader(bootloader, bootloader_length) == false) { MessageBox(0, "Error updating bootloader.", "FDSemu", MB_OK); delete fdsemu; return(0); } } return(1); }