void TextBlitter::update() { Image * image; if (draw_image == NULL) image = this->image; else image = draw_image; if (!replacer.empty()) draw_image = replacer.apply(image, this->image); update_flash(flash_interval, flash_time); if (anim_type != BLITTER_ANIMATION_SINWAVE) return; anim_frame++; }
int update_tftp(ulong addr, char *interface, char *devstring) { char *filename, *env_addr, *fit_image_name; ulong update_addr, update_fladdr, update_size; int images_noffset, ndepth, noffset; bool update_tftp_dfu; int ret = 0; void *fit; if (interface == NULL && devstring == NULL) { update_tftp_dfu = false; } else if (interface && devstring) { update_tftp_dfu = true; } else { error("Interface: %s and devstring: %s not supported!\n", interface, devstring); return -EINVAL; } /* use already present image */ if (addr) goto got_update_file; printf("Auto-update from TFTP: "); /* get the file name of the update file */ filename = getenv(UPDATE_FILE_ENV); if (filename == NULL) { printf("failed, env. variable '%s' not found\n", UPDATE_FILE_ENV); return 1; } printf("trying update file '%s'\n", filename); /* get load address of downloaded update file */ if ((env_addr = getenv("loadaddr")) != NULL) addr = simple_strtoul(env_addr, NULL, 16); else addr = CONFIG_UPDATE_LOAD_ADDR; if (update_load(filename, CONFIG_UPDATE_TFTP_MSEC_MAX, CONFIG_UPDATE_TFTP_CNT_MAX, addr)) { printf("Can't load update file, aborting auto-update\n"); return 1; } got_update_file: fit = (void *)addr; if (!fit_check_format((void *)fit)) { printf("Bad FIT format of the update file, aborting " "auto-update\n"); return 1; } /* process updates */ images_noffset = fdt_path_offset(fit, FIT_IMAGES_PATH); ndepth = 0; noffset = fdt_next_node(fit, images_noffset, &ndepth); while (noffset >= 0 && ndepth > 0) { if (ndepth != 1) goto next_node; fit_image_name = (char *)fit_get_name(fit, noffset, NULL); printf("Processing update '%s' :", fit_image_name); if (!fit_image_verify(fit, noffset)) { printf("Error: invalid update hash, aborting\n"); ret = 1; goto next_node; } printf("\n"); if (update_fit_getparams(fit, noffset, &update_addr, &update_fladdr, &update_size)) { printf("Error: can't get update parameteres, " "aborting\n"); ret = 1; goto next_node; } if (!update_tftp_dfu) { if (update_flash(update_addr, update_fladdr, update_size)) { printf("Error: can't flash update, aborting\n"); ret = 1; goto next_node; } } else if (fit_image_check_type(fit, noffset, IH_TYPE_FIRMWARE)) { ret = dfu_tftp_write(fit_image_name, update_addr, update_size, interface, devstring); if (ret) return ret; } next_node: noffset = fdt_next_node(fit, noffset, &ndepth); } return ret; }
void Active::update() { #ifdef CHOWDREN_DEFER_COLLISIONS flags |= DEFER_COLLISIONS; memcpy(old_aabb, sprite_col.aabb, sizeof(old_aabb)); #endif if (flags & FADEOUT) { if (fade_time > 0.0f) { fade_time -= manager.dt; if (fade_time <= 0.0f) { FrameObject::destroy(); } float p = fade_time / fade_duration; blend_color.set_alpha(p * 255.0f); return; } if (animation_finished == DISAPPEARING) { FrameObject::destroy(); return; } } update_flash(flash_interval, flash_time); animation_finished = -1; if (forced_animation == -1 && animation != current_animation) { current_animation = animation; animation_frame = 0; update_direction(); } if (forced_frame != -1 || (active_flags & ANIMATION_STOPPED) || loop_count == 0) { return; } int anim_speed; if (forced_speed != -1) anim_speed = forced_speed; else anim_speed = direction_data->max_speed; int counter = this->counter + int(anim_speed * frame->timer_mul); int old_frame = animation_frame; while (counter > 100) { counter -= 100; animation_frame++; if (animation_frame < direction_data->frame_count) continue; if (loop_count > 0) loop_count--; if (loop_count != 0) { animation_frame = direction_data->back_to; continue; } animation_finished = current_animation; animation_frame--; if (forced_animation != -1) { forced_animation = -1; forced_speed = -1; forced_direction = -1; } return; } this->counter = counter; if (animation_frame != old_frame) update_frame(); }
int update_tftp(ulong addr) { char *filename, *env_addr; int images_noffset, ndepth, noffset; ulong update_addr, update_fladdr, update_size; void *fit; int ret = 0; /* use already present image */ if (addr) goto got_update_file; printf("Auto-update from TFTP: "); /* get the file name of the update file */ filename = getenv(UPDATE_FILE_ENV); if (filename == NULL) { printf("failed, env. variable '%s' not found\n", UPDATE_FILE_ENV); return 1; } printf("trying update file '%s'\n", filename); /* get load address of downloaded update file */ if ((env_addr = getenv("loadaddr")) != NULL) addr = simple_strtoul(env_addr, NULL, 16); else addr = CONFIG_UPDATE_LOAD_ADDR; if (update_load(filename, CONFIG_UPDATE_TFTP_MSEC_MAX, CONFIG_UPDATE_TFTP_CNT_MAX, addr)) { printf("Can't load update file, aborting auto-update\n"); return 1; } got_update_file: fit = (void *)addr; if (!fit_check_format((void *)fit)) { printf("Bad FIT format of the update file, aborting " "auto-update\n"); return 1; } /* process updates */ images_noffset = fdt_path_offset(fit, FIT_IMAGES_PATH); ndepth = 0; noffset = fdt_next_node(fit, images_noffset, &ndepth); while (noffset >= 0 && ndepth > 0) { if (ndepth != 1) goto next_node; printf("Processing update '%s' :", fit_get_name(fit, noffset, NULL)); if (!fit_image_verify(fit, noffset)) { printf("Error: invalid update hash, aborting\n"); ret = 1; goto next_node; } printf("\n"); if (update_fit_getparams(fit, noffset, &update_addr, &update_fladdr, &update_size)) { printf("Error: can't get update parameteres, " "aborting\n"); ret = 1; goto next_node; } if (update_flash(update_addr, update_fladdr, update_size)) { printf("Error: can't flash update, aborting\n"); ret = 1; goto next_node; } next_node: noffset = fdt_next_node(fit, noffset, &ndepth); } return ret; }