Date: Sat, 19 Jul 2014 07:23:15 GMT From: seiya@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r271117 - in soc2014/seiya/bootsplash: etc sys/dev/fb Message-ID: <201407190723.s6J7NFQd057534@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: seiya Date: Sat Jul 19 07:23:14 2014 New Revision: 271117 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=271117 Log: support a progress bar Modified: soc2014/seiya/bootsplash/etc/rc soc2014/seiya/bootsplash/sys/dev/fb/bsplash.c Modified: soc2014/seiya/bootsplash/etc/rc ============================================================================== --- soc2014/seiya/bootsplash/etc/rc Sat Jul 19 06:27:24 2014 (r271116) +++ soc2014/seiya/bootsplash/etc/rc Sat Jul 19 07:23:14 2014 (r271117) @@ -124,7 +124,18 @@ fi files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* ${local_rc} 2>/dev/null` +files_num=`echo "$files" | wc -l` +files_num_per_10=`expr $files_num / 10` # FIXME +i=0 +BOOT_PROGRESS=0 for _rc_elem in ${files}; do + i=`expr $i + 1` + if [ $files_num_per_10 -eq $i ]; then + BOOT_PROGRESS=`expr $BOOT_PROGRESS + 10` + kenv BOOT_PROGRESS=$BOOT_PROGRESS > /dev/null + i=0 + fi + case "$_rc_elem_done" in *" $_rc_elem "*) continue ;; esac Modified: soc2014/seiya/bootsplash/sys/dev/fb/bsplash.c ============================================================================== --- soc2014/seiya/bootsplash/sys/dev/fb/bsplash.c Sat Jul 19 06:27:24 2014 (r271116) +++ soc2014/seiya/bootsplash/sys/dev/fb/bsplash.c Sat Jul 19 07:23:14 2014 (r271117) @@ -59,7 +59,14 @@ static int animation_x = -1; static int animation_width = -1; static int animation_height = -1; -static int animation_enabled = 1; +static int animation_enabled = 1; // 1:enabled, 0:disabled +static int progress_bar_y_origin = -1; +static int progress_bar_y = -1; +static int progress_bar_x = -1; +static int progress_bar_width = -1; +static int progress_bar_height = -1; +static int progress_bar_enabled = 1; // 1:enabled, 0:disabled + int bsplash_early_init(video_adapter_t *_adp) @@ -141,6 +148,56 @@ } freeenv(s); + // load "bsplash_progress_bar_y_origin" + if ((s = getenv("bsplash_progress_bar_y_origin")) == NULL) { + if (bootverbose) + printf("bsplash: cannot load \"bsplash_progress_bar_y_origin\"\n"); + progress_bar_enabled = 0; + } else { + progress_bar_y_origin = strtol(s, NULL, 10); + } + freeenv(s); + + // load "bsplash_progress_bar_y" + if ((s = getenv("bsplash_progress_bar_y")) == NULL) { + if (bootverbose) + printf("bsplash: cannot load \"bsplash_progress_bar_y\"\n"); + progress_bar_enabled = 0; + } else { + progress_bar_y = strtol(s, NULL, 10); + } + freeenv(s); + + // load "bsplash_progress_bar_x" + if ((s = getenv("bsplash_progress_bar_x")) == NULL) { + if (bootverbose) + printf("bsplash: cannot load \"bsplash_progress_bar_x\"\n"); + progress_bar_enabled = 0; + } else { + progress_bar_x = strtol(s, NULL, 10); + } + freeenv(s); + + // load "bsplash_progress_bar_height" + if ((s = getenv("bsplash_progress_bar_height")) == NULL) { + if (bootverbose) + printf("bsplash: cannot load \"bsplash_progress_bar_height\"\n"); + progress_bar_enabled = 0; + } else { + progress_bar_height = strtol(s, NULL, 10); + } + freeenv(s); + + // load "bsplash_progress_bar_width" + if ((s = getenv("bsplash_progress_bar_width")) == NULL) { + if (bootverbose) + printf("bsplash: cannot load \"bsplash_progress_bar_width\"\n"); + progress_bar_enabled = 0; + } else { + progress_bar_width = strtol(s, NULL, 10); + } + freeenv(s); + /* * for debugging */ @@ -155,6 +212,13 @@ animation_y_origin, animation_height, animation_width); + printf("bsplash: progress bar is %s (y,x)=(%d,%d), img_y=%d, height=%d, width=%d\n", + (progress_bar_enabled)? "enabled" : "disabled", + progress_bar_y, + progress_bar_x, + progress_bar_y_origin, + progress_bar_height, + progress_bar_width); } /* @@ -223,8 +287,11 @@ freeenv(s); } - // boot takes too long - if (progress >= 100 || count > 50 /* FXIME */){ + // update the progress bar + draw_bmp(progress_bar_y_origin + ((progress / 10) * progress_bar_height), + progress_bar_y, progress_bar_x, progress_bar_width, progress_bar_height); + + if (progress >= 100 /* boot has finished */ || count > 50 /* FIX<E */){ /* terminate boot splash */ vidd_set_mode(adp, M_TEXT_80x25); kthread_exit();
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201407190723.s6J7NFQd057534>