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>