Esempio n. 1
0
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);
}