Bug 139576 - [syscons] [patch] blink screen too noisy
Summary: [syscons] [patch] blink screen too noisy
Status: Open
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: 7.2-STABLE
Hardware: Any Any
: Normal Affects Only Me
Assignee: freebsd-bugs mailing list
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-10-13 18:30 UTC by Walter C. Pelissero
Modified: 2018-01-03 05:15 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Walter C. Pelissero 2009-10-13 18:30:00 UTC
	Although better than a loud beep, I personally find the visual
	bell a bit too much.  Especially on large LCD screens, it
	feels like having a paparazzi stalking me.  I'd be happy with
	something less obtrusive like, for instance, the blinking of
	the screen border.

	Thus I propose the following patch:

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	13 Oct 2009 01:47:01 -0000
@@ -3629,10 +3629,22 @@
 	    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) {
+	  int i;
+
+	  (*draw)(scp, 0, scp->xsize, on);
+	  (*draw)(scp, scp->xsize * (scp->ysize - 1), scp->xsize, on);
+	  for (i = 1; i < scp->ysize - 1; ++i) {
+	    (*draw)(scp, scp->xsize * i, 1, on);
+	    (*draw)(scp, scp->xsize * (i + 1) - 1, 1, on);
+	  }
+	} else
+	  (*draw)(scp, 0, scp->xsize * scp->ysize, on);
 	scp->sc->blink_in_progress--;
-	timeout(blink_screen, scp, hz / 10);
+	timeout(blink_screen, arg, 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	13 Oct 2009 01:47:25 -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	13 Oct 2009 01:47:54 -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	13 Oct 2009 01:47:55 -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"))
Comment 1 Martin Wilke freebsd_committer 2009-10-13 18:45:14 UTC
Responsible Changed
From-To: freebsd-bugs->miwi

grab.
Comment 2 Martin Wilke freebsd_committer 2009-10-13 18:48:08 UTC
State Changed
From-To: open->feedback



Howdy, 

Thanks for the propose patch it looks good so far.  But I don't 
understand why you change the timeout() call. Maybe you could shot 
explain? 

thx
Comment 3 walter 2009-10-15 15:09:33 UTC
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
Comment 4 Martin Wilke freebsd_committer 2009-12-12 09:48:25 UTC
Responsible Changed
From-To: miwi->ed

over to ed.
Comment 5 Eitan Adler freebsd_committer freebsd_triage 2017-12-31 08:00:29 UTC
For bugs matching the following criteria:

Status: In Progress Changed: (is less than) 2014-06-01

Reset to default assignee and clear in-progress tags.

Mail being skipped