Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 01 Jan 2000 00:08:37 +0900
From:      MIHIRA Sanpei Yoshiro <sanpei@sanpei.org>
To:        FreeBSD-mobile@FreeBSD.org
Subject:   [Patch:pccard melody beep] experimental patch for pccard
Message-ID:  <199912311508.AAA13872@lavender.yy.cs.keio.ac.jp>

next in thread | raw e-mail | index | archive | help
----Next_Part(Sat_Jan__1_00:08:36_2000)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hi.

  I ported pccard **melody** beep routine to 4-current from PAO3.

  Main changes are sys/pccard/pccard_beep.c, but it needs to add
sysbeep_cancel function into sys/i386/isa/clock.c.

Thank you and a happy new year!!
MIHIRA Yoshiro
Yokohama, Japan.

----Next_Part(Sat_Jan__1_00:08:36_2000)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

--- sys/pccard/pccard_beep.c.org	Fri Dec 31 22:13:02 1999
+++ sys/pccard/pccard_beep.c	Fri Dec 31 23:18:13 1999
@@ -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);
 
@@ -81,3 +241,4 @@
 {
 	printf("pccard_beep_state: %d\n", allow_beep);
 }
+#endif /* PCCARD_BEEP */
--- sys/pccard/driver.h.orig	Tue Nov 23 22:35:05 1999
+++ sys/pccard/driver.h	Fri Dec 31 22:59:07 1999
@@ -3,7 +3,7 @@
  * Bruce Evans, November 1995.
  * This file is in the public domain.
  *
- * $FreeBSD: src/sys/pccard/driver.h,v 1.11 1999/10/25 02:41:53 imp Exp $
+ * $FreeBSD: src/sys/pccard/driver.h,v 1.12 1999/12/02 19:46:40 imp Exp $
  */
 
 #ifndef _PCCARD_DRIVER_H_
@@ -13,12 +13,23 @@
 
 void	pccard_add_driver __P((struct pccard_device *));
 
-enum beepstate { BEEP_ON, BEEP_OFF };
+#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	Fri Dec 31 23:06:50 1999
+++ sys/i386/isa/clock.c	Fri Dec 31 23:37:04 1999
@@ -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;
 }
 
 /*

----Next_Part(Sat_Jan__1_00:08:36_2000)----


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?199912311508.AAA13872>