Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 03 Jan 2000 22:20:01 +0900
From:      MIHIRA Sanpei Yoshiro <sanpei@sanpei.org>
To:        FreeBSD-mobile@FreeBSD.org
Subject:   Re: [Patch:pccard melody beep] experimental patch for pccard
Message-ID:  <200001031320.WAA21504@lavender.yy.cs.keio.ac.jp>
In-Reply-To: Your message of "Sat, 1 Jan 2000 00:08:37 JST". <199912311508.AAA13872@lavender.yy.cs.keio.ac.jp>

next in thread | previous in thread | raw e-mail | index | archive | help
>  I ported pccard **melody** beep routine to 4-current from PAO3.

  Oops, sorry, I send broken patch, I re-create patch.  

  If it will be commit into 4-current, I will create patch for
/etc/defaults/rc.conf and pccardc.8

Enjoy it.

MIHIRA Yoshiro
Yokohama, Japan.

--- sys/pccard/driver.h.orig	Mon Jan  3 00:50:18 2000
+++ sys/pccard/driver.h	Mon Jan  3 10:40:56 2000
@@ -13,12 +13,23 @@
 
 void	pccard_add_driver __P((struct pccard_device *));
 
+#undef PCCARD_BEEP
+#ifndef PCCARD_BEEP
+#define PCCARD_BEEP     2
+#endif  /* !PCCARD_BEEP */
+
+#ifndef PCCARD_BEEP
 enum beepstate { BEEP_OFF, BEEP_ON };
+#endif
 
 void	pccard_insert_beep __P((void));
 void	pccard_remove_beep __P((void));
 void	pccard_success_beep __P((void));
 void	pccard_failure_beep __P((void));
-int	pccard_beep_select __P((enum beepstate));
+#ifdef PCCARD_BEEP
+int     pccard_beep_select __P((int));
+#else
+int     pccard_beep_select __P((enum beepstate));
+#endif
 
 #endif /* !_PCCARD_DRIVER_H_ */
--- sys/i386/isa/clock.c.org	Mon Jan  3 10:46:36 2000
+++ sys/i386/isa/clock.c	Mon Jan  3 10:47:52 2000
@@ -188,6 +188,9 @@
 SYSCTL_OPAQUE(_debug, OID_AUTO, tsc_timecounter, CTLFLAG_RD, 
 	&tsc_timecounter, sizeof(tsc_timecounter), "S,timecounter", "");
 
+static struct callout_handle sysbeep_ch
+	= CALLOUT_HANDLE_INITIALIZER(&sysbeep_ch);
+
 static struct timecounter i8254_timecounter = {
 	i8254_get_timecount,	/* get_timecount */
 	0,			/* no poll_pps */
@@ -536,10 +539,21 @@
 		/* enable counter2 output to speaker */
 		outb(IO_PPI, inb(IO_PPI) | 3);
 		beeping = period;
-		timeout(sysbeepstop, (void *)NULL, period);
+		sysbeep_ch = timeout(sysbeepstop, (void *)NULL, period);
 	}
 	splx(x);
 	return (0);
+}    
+
+int
+sysbeep_cancel(void)
+{
+	if (beeping) {
+		untimeout(sysbeepstop, (void *)NULL, sysbeep_ch);
+		sysbeepstop((void *)NULL);
+		return 0;
+	}
+	return -1;
 }
 
 /*
--- sys/i386/include/clock.h.org	Mon Jan  3 10:58:30 2000
+++ sys/i386/include/clock.h	Mon Jan  3 10:59:13 2000
@@ -44,6 +44,7 @@
 int	release_timer1 __P((void));
 #endif
 int	sysbeep __P((int pitch, int period));
+int	sysbeep_cancel __P((void));
 void	i8254_restore __P((void));
 
 #endif /* _KERNEL */
--- sys/pccard/pccard_beep.c.orig	Mon Jan  3 16:26:24 2000
+++ sys/pccard/pccard_beep.c	Mon Jan  3 16:27:06 2000
@@ -20,6 +20,166 @@
 #define	PCCARD_BEEP_PITCH2	3200
 #define	PCCARD_BEEP_DURATION2	40
 
+#ifdef PCCARD_BEEP
+static void pccard_insert_beep_type0(void)
+{
+	/* dummy */
+}
+
+static void pccard_remove_beep_type0(void)
+{
+	/* dummy */
+}
+
+static void pccard_success_beep_type0(void)
+{
+	/* dummy */
+}
+
+static void pccard_failure_beep_type0(void)
+{
+	/* dummy */
+}
+
+
+static void pccard_insert_beep_type1(void)
+{
+	sysbeep(PCCARD_BEEP_PITCH0, PCCARD_BEEP_DURATION0);
+}
+
+static void pccard_remove_beep_type1(void)
+{
+	sysbeep(PCCARD_BEEP_PITCH0, PCCARD_BEEP_DURATION0);
+}
+
+static void pccard_success_beep_type1(void)
+{
+	sysbeep(PCCARD_BEEP_PITCH1, PCCARD_BEEP_DURATION1);
+}
+
+static void pccard_failure_beep_type1(void)
+{
+	sysbeep(PCCARD_BEEP_PITCH2, PCCARD_BEEP_DURATION2);
+}
+
+static void pccard_insert_beep0_type2(void *dummy)
+{
+	sysbeep_cancel();
+	sysbeep(1200, 5);
+}
+
+static void pccard_insert_beep_type2(void)
+{
+	sysbeep(1600, 20);
+	timeout(pccard_insert_beep0_type2, NULL, hz / 10);
+}
+
+static void pccard_remove_beep0_type2(void *dummy)
+{
+	sysbeep_cancel();
+	sysbeep(1600, 5);
+}
+
+static void pccard_remove_beep_type2(void)
+{
+	sysbeep(1200, 20);
+	timeout(pccard_remove_beep0_type2, NULL, hz / 10);
+}
+
+static void pccard_success_beep1_type2(void *dummy)
+{
+	sysbeep_cancel();
+	sysbeep(800, 15);
+}
+
+static void pccard_success_beep0_type2(void *dummy)
+{
+	sysbeep_cancel();
+	sysbeep(1000, 20);
+	timeout(pccard_success_beep1_type2, NULL, hz / 15);
+}
+
+static void pccard_success_beep_type2(void)
+{
+	sysbeep(1200, 20);
+	timeout(pccard_success_beep0_type2, NULL, hz / 15);
+}
+
+static void pccard_failure_beep1_type2(void *dummy)
+{
+	sysbeep_cancel();
+	sysbeep(2800, 15);
+}
+
+static void pccard_failure_beep0_type2(void *dummy)
+{
+	sysbeep_cancel();
+	sysbeep(2400, 20);
+	timeout(pccard_failure_beep1_type2, NULL, hz / 15);
+}
+static void pccard_failure_beep_type2(void)
+{
+	sysbeep(2000, 20);
+	timeout(pccard_failure_beep0_type2, NULL, hz / 15);
+}
+
+static void (*insert)(void) = pccard_insert_beep_type0;
+static void (*remove)(void) = pccard_remove_beep_type0;
+static void (*success)(void) = pccard_success_beep_type0;
+static void (*failure)(void) = pccard_failure_beep_type0;
+
+int pccard_beep_select(int type)
+{
+	int	errcode = 0;
+
+	switch (type) {
+	case 0:
+		insert = pccard_insert_beep_type0;
+		remove = pccard_remove_beep_type0;
+		success = pccard_success_beep_type0;
+		failure = pccard_failure_beep_type0;
+		break;
+	case 1:
+		insert = pccard_insert_beep_type1;
+		remove = pccard_remove_beep_type1;
+		success = pccard_success_beep_type1;
+		failure = pccard_failure_beep_type1;
+		break;
+	case 2:
+		insert = pccard_insert_beep_type2;
+		remove = pccard_remove_beep_type2;
+		success = pccard_success_beep_type2;
+		failure = pccard_failure_beep_type2;
+		break;
+	default:
+		errcode = 1;
+		break;
+	}
+	return errcode;
+}
+
+void pccard_insert_beep(void)
+{
+	insert();
+}
+
+void pccard_remove_beep(void)
+{
+	remove();
+}
+
+
+void pccard_success_beep(void)
+{
+	success();
+}
+
+void pccard_failure_beep(void)
+{
+	failure();
+}
+
+#else
 static struct callout_handle beeptimeout_ch
     = CALLOUT_HANDLE_INITIALIZER(&beeptimeout_ch);
 
@@ -77,3 +237,4 @@
 	}
 	return 1;
 }
+#endif /* PCCARD_BEEP */


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-mobile" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200001031320.WAA21504>