Date: Thu, 15 Oct 2009 16:09:33 +0200 From: "Walter C. Pelissero" <walter@pelissero.de> To: FreeBSD-gnats-submit@FreeBSD.org, freebsd-bugs@FreeBSD.org, miwi@FreeBSD.org Subject: Re: kern/139576: blink screen too noisy Message-ID: <19159.11549.219908.921862@zaphod.home.loc> In-Reply-To: <200910131730.n9DHU0ic056348@freefall.freebsd.org> References: <200910131717.n9DHHcVs007584@zaphod.home.loc> <200910131730.n9DHU0ic056348@freefall.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
I've been reconsidering the modification, and I believe the border blinking can be improved: Index: syscons.c =================================================================== RCS file: /repos/src/sys/dev/syscons/syscons.c,v retrieving revision 1.453.2.4 diff -c -r1.453.2.4 syscons.c *** syscons.c 4 May 2009 21:00:43 -0000 1.453.2.4 --- syscons.c 15 Oct 2009 14:00:32 -0000 *************** *** 3629,3636 **** sc_switch_scr(scp->sc, scp->sc->delayed_next_scr - 1); } else { ! (*scp->rndr->draw)(scp, 0, scp->xsize*scp->ysize, ! scp->sc->blink_in_progress & 1); scp->sc->blink_in_progress--; timeout(blink_screen, scp, hz / 10); } --- 3629,3649 ---- sc_switch_scr(scp->sc, scp->sc->delayed_next_scr - 1); } else { ! int on = scp->sc->blink_in_progress & 1; ! vr_draw_t *draw = scp->rndr->draw; ! ! if (scp->sc->flags & SC_QUIET_BELL) { ! /* blink the screen border only */ ! int i; ! ! (*draw)(scp, 0, scp->xsize + 1, on); ! (*draw)(scp, scp->xsize * (scp->ysize - 1) - 1, ! scp->xsize + 1, on); ! for (i = 2; i < scp->ysize - 1; ++i) ! (*draw)(scp, scp->xsize * i - 1, 2, on); ! } else ! /* blink the entire screen */ ! (*draw)(scp, 0, scp->xsize * scp->ysize, on); scp->sc->blink_in_progress--; timeout(blink_screen, scp, hz / 10); } This version is neater (conforms to FreeBSD indentation standards) and more efficient (it saves some calls to draw()). Thus the proposed patch becomes the following: Index: sys/dev/syscons/syscons.c =================================================================== RCS file: /repos/src/sys/dev/syscons/syscons.c,v retrieving revision 1.453.2.4 diff -u -r1.453.2.4 syscons.c --- sys/dev/syscons/syscons.c 4 May 2009 21:00:43 -0000 1.453.2.4 +++ sys/dev/syscons/syscons.c 15 Oct 2009 13:57:05 -0000 @@ -3629,8 +3629,21 @@ sc_switch_scr(scp->sc, scp->sc->delayed_next_scr - 1); } else { - (*scp->rndr->draw)(scp, 0, scp->xsize*scp->ysize, - scp->sc->blink_in_progress & 1); + int on = scp->sc->blink_in_progress & 1; + vr_draw_t *draw = scp->rndr->draw; + + if (scp->sc->flags & SC_QUIET_BELL) { + /* blink the screen border only */ + int i; + + (*draw)(scp, 0, scp->xsize + 1, on); + (*draw)(scp, scp->xsize * (scp->ysize - 1) - 1, + scp->xsize + 1, on); + for (i = 2; i < scp->ysize - 1; ++i) + (*draw)(scp, scp->xsize * i - 1, 2, on); + } else + /* blink the entire screen */ + (*draw)(scp, 0, scp->xsize * scp->ysize, on); scp->sc->blink_in_progress--; timeout(blink_screen, scp, hz / 10); } Index: sys/sys/consio.h =================================================================== RCS file: /repos/src/sys/sys/consio.h,v retrieving revision 1.18 diff -u -r1.18 consio.h --- sys/sys/consio.h 27 Sep 2006 19:57:01 -0000 1.18 +++ sys/sys/consio.h 15 Oct 2009 13:57:33 -0000 @@ -113,6 +113,7 @@ /* set the bell type to audible or visual */ #define CONS_VISUAL_BELL (1 << 0) #define CONS_QUIET_BELL (1 << 1) +#define CONS_BORDER_BELL (CONS_VISUAL_BELL | CONS_QUIET_BELL) #define CONS_BELLTYPE _IOW('c', 8, int) /* set the history (scroll back) buffer size (in lines) */ Index: usr.sbin/kbdcontrol/kbdcontrol.1 =================================================================== RCS file: /repos/src/usr.sbin/kbdcontrol/kbdcontrol.1,v retrieving revision 1.42 diff -u -r1.42 kbdcontrol.1 --- usr.sbin/kbdcontrol/kbdcontrol.1 16 Nov 2006 13:43:05 -0000 1.42 +++ usr.sbin/kbdcontrol/kbdcontrol.1 15 Oct 2009 13:58:00 -0000 @@ -84,9 +84,11 @@ .Cm normal which sets sound parameters back to normal values, .Cm off -which disables the bell entirely, or +which disables the bell entirely, .Cm visual -which sets the bell to visual mode, i.e., flashes the screen instead. +which sets the bell to visual mode, i.e., flashes the screen instead, or +.Cm border +which flashes just the border instead of the whole screen. If .Ar belltype is preceded by the word Index: usr.sbin/kbdcontrol/kbdcontrol.c =================================================================== RCS file: /repos/src/usr.sbin/kbdcontrol/kbdcontrol.c,v retrieving revision 1.51 diff -u -r1.51 kbdcontrol.c --- usr.sbin/kbdcontrol/kbdcontrol.c 16 Nov 2006 12:27:51 -0000 1.51 +++ usr.sbin/kbdcontrol/kbdcontrol.c 15 Oct 2009 13:58:00 -0000 @@ -912,6 +912,8 @@ } if (!strcmp(opt, "visual")) bell |= CONS_VISUAL_BELL; + else if (!strcmp(opt, "border")) + bell |= CONS_BORDER_BELL; else if (!strcmp(opt, "normal")) duration = 5, pitch = 800; else if (!strcmp(opt, "off")) -- walter pelissero http://www.pelissero.de
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19159.11549.219908.921862>