Ejemplo n.º 1
0
bool bootloader_update(const void* bootloader_image, unsigned length)
{
    HAL_Bootloader_Lock(false);
    bool result =  (FLASH_CopyMemory(FLASH_INTERNAL, (uint32_t)bootloader_image,
        FLASH_INTERNAL, 0x8000000, length, MODULE_FUNCTION_BOOTLOADER,
        MODULE_VERIFY_DESTINATION_IS_START_ADDRESS|MODULE_VERIFY_CRC|MODULE_VERIFY_FUNCTION));
    HAL_Bootloader_Lock(true);
    return result;
}
void HAL_Core_Setup_finalize(void)
{
    // Now that main() has been executed, we can plug in the original WICED ISR in the
    // ISR chain.)
    uint32_t* isrs = (uint32_t*)&link_ram_interrupt_vectors_location;
    isrs[SysTickIndex] = (uint32_t)SysTickChain;

#ifdef MODULAR_FIRMWARE
    const uint32_t app_backup = 0x800C000;
    // when unpacking from the combined image, we have the default application image stored
    // in the eeprom region.
    const module_info_t* app_info = FLASH_ModuleInfo(FLASH_INTERNAL, app_backup);
    if (app_info->module_start_address==(void*)0x80A0000) {
    		LED_SetRGBColor(RGB_COLOR_GREEN);
    		uint32_t length = app_info->module_end_address-app_info->module_start_address+4;
    		if (length < 80*1024 && FLASH_CopyMemory(FLASH_INTERNAL, app_backup, FLASH_INTERNAL, 0x80E0000, length, MODULE_FUNCTION_USER_PART, MODULE_VERIFY_CRC|MODULE_VERIFY_FUNCTION)) {
        		FLASH_CopyMemory(FLASH_INTERNAL, app_backup, FLASH_INTERNAL, 0x80A0000, length, MODULE_FUNCTION_USER_PART, MODULE_VERIFY_CRC|MODULE_VERIFY_DESTINATION_IS_START_ADDRESS|MODULE_VERIFY_FUNCTION);
    			FLASH_EraseMemory(FLASH_INTERNAL, app_backup, length);
    		}
    		LED_SetRGBColor(RGB_COLOR_WHITE);
    	}
#endif
}