diff --git a/radio/src/bootloader/boot.cpp b/radio/src/bootloader/boot.cpp index f5906bf55..6c4516156 100644 --- a/radio/src/bootloader/boot.cpp +++ b/radio/src/bootloader/boot.cpp @@ -361,7 +361,7 @@ FRESULT openBinaryFile(uint32_t index) return f_read(&FlashFile, (BYTE *)Block_buffer, 4096, &BlockCount); } -uint32_t isValidBufferStart(const uint32_t * buffer) +uint32_t isValidBufferStart(const void * buffer) { if (memoryType == MEM_FLASH) return isFirmwareStart(buffer); diff --git a/radio/src/targets/sky9x/flash_driver.cpp b/radio/src/targets/sky9x/flash_driver.cpp index 5d3606395..b7f6d7f2a 100644 --- a/radio/src/targets/sky9x/flash_driver.cpp +++ b/radio/src/targets/sky9x/flash_driver.cpp @@ -56,8 +56,10 @@ void clearLockBits() } } -uint32_t isFirmwareStart(uint32_t *block) +uint32_t isFirmwareStart(const void * buffer) { + const uint32_t * block = (const uint32_t *)buffer; + if ((block[0] & 0xFFFE3000) != 0x20000000 ) { return 0; } diff --git a/radio/src/targets/taranis/board_taranis.h b/radio/src/targets/taranis/board_taranis.h index 06b592c2a..a66004edf 100644 --- a/radio/src/targets/taranis/board_taranis.h +++ b/radio/src/targets/taranis/board_taranis.h @@ -145,8 +145,8 @@ void delay_01us(uint16_t nb); #define FLASH_PAGESIZE 256 void unlockFlash(); void writeFlash(uint32_t * address, uint32_t * buffer); -uint32_t isFirmwareStart(const uint32_t *block); -uint32_t isBootloaderStart(const uint32_t *block); +uint32_t isFirmwareStart(const void * buffer); +uint32_t isBootloaderStart(const void * buffer); // Pulses driver void init_no_pulses(uint32_t port); diff --git a/radio/src/targets/taranis/flash_driver.cpp b/radio/src/targets/taranis/flash_driver.cpp index 001b8e903..a57aac087 100644 --- a/radio/src/targets/taranis/flash_driver.cpp +++ b/radio/src/targets/taranis/flash_driver.cpp @@ -98,8 +98,10 @@ void writeFlash(uint32_t *address, uint32_t *buffer) // page size is 256 bytes } } -uint32_t isFirmwareStart(const uint32_t *block) +uint32_t isFirmwareStart(const void * buffer) { + const uint32_t * block = (const uint32_t *)buffer; + if ((block[0] & 0xFFFC0000) != 0x20000000) { return 0; } @@ -112,8 +114,10 @@ uint32_t isFirmwareStart(const uint32_t *block) return 1; } -uint32_t isBootloaderStart(const uint32_t *block) +uint32_t isBootloaderStart(const void * buffer) { + const uint32_t * block = (const uint32_t *)buffer; + for (int i=0; i<256; i++) { if (block[i] == 0x544F4F42/*BOOT*/) { return 1;