From owner-freebsd-current Sun Oct 22 7:27:49 2000 Delivered-To: freebsd-current@freebsd.org Received: from lavender.sanpei.org (ppp127.dialup.st.keio.ac.jp [131.113.27.127]) by hub.freebsd.org (Postfix) with ESMTP id 5E75C37B479 for ; Sun, 22 Oct 2000 07:27:03 -0700 (PDT) Received: (from sanpei@localhost) by lavender.sanpei.org (8.11.0/3.7W) id e9MEQp026659; Sun, 22 Oct 2000 23:26:51 +0900 (JST) Message-Id: <200010221426.e9MEQp026659@lavender.sanpei.org> To: current@FreeBSD.org Subject: Please review: PC-Card melody beep code. X-Mailer: Mew version 1.70 on Emacs 19.34.1 / Mule 2.3 Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Date: Sun, 22 Oct 2000 23:26:51 +0900 From: MIHIRA Sanpei Yoshiro Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Hi. FreeBSD developers. This is PC-Card melody beep code for 5-current(/sys/pccard/pccard_beep.c) from PAO3. This patch does not need to change sys/i386/isa/clock.c. Any problems, please let me know. --- MIHIRA, Sanpei Yoshiro Yokohama, Japan. Index: src/sys/pccard/driver.h =================================================================== RCS file: /home/ncvs/src/sys/pccard/driver.h,v retrieving revision 1.12 diff -u -r1.12 driver.h --- src/sys/pccard/driver.h 1999/12/02 19:46:40 1.12 +++ src/sys/pccard/driver.h 2000/10/22 14:25:34 @@ -19,6 +19,6 @@ 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)); +int pccard_beep_select __P((int)); #endif /* !_PCCARD_DRIVER_H_ */ Index: src/sys/pccard/pccard_beep.c =================================================================== RCS file: /home/ncvs/src/sys/pccard/pccard_beep.c,v retrieving revision 1.3 diff -u -r1.3 pccard_beep.c --- src/sys/pccard/pccard_beep.c 1999/12/02 19:46:41 1.3 +++ src/sys/pccard/pccard_beep.c 2000/10/22 14:25:34 @@ -13,67 +13,118 @@ #include -#define PCCARD_BEEP_PITCH0 1600 -#define PCCARD_BEEP_DURATION0 20 -#define PCCARD_BEEP_PITCH1 1200 -#define PCCARD_BEEP_DURATION1 40 -#define PCCARD_BEEP_PITCH2 3200 -#define PCCARD_BEEP_DURATION2 40 - -static struct callout_handle beeptimeout_ch - = CALLOUT_HANDLE_INITIALIZER(&beeptimeout_ch); - static enum beepstate allow_beep = BEEP_OFF; +static int melody_type = 0; -/* - * timeout function to keep lots of noise from - * happening with insertion/removals. - */ -static void enable_beep(void *dummy) -{ - /* Should never be needed */ - untimeout(enable_beep, (void *)NULL, beeptimeout_ch); +#define MAX_TONE_MODE 3 +#define MAX_STATE 4 - allow_beep = BEEP_ON; +struct tone { + int duration; + int pitch; +}; + + +static struct tone silent_beep[] = { + {NULL, NULL} +}; + +static struct tone success_beep[] = { + {1200, 40}, {NULL, NULL} +}; +static struct tone failure_beep[] = { + {3200, 40}, {NULL, NULL} +}; +static struct tone insert_remove_beep[] = { + {1600, 20}, {NULL, NULL} +}; + +static struct tone success_melody_beep[] = { + {1200, 7}, {1000, 7}, { 800, 15}, {NULL, NULL} +}; +static struct tone failure_melody_beep[] = { + {2000, 7}, {2400, 7}, {2800, 15}, {NULL, NULL} +}; +static struct tone insert_melody_beep[] = { + {1600, 10}, {1200, 5}, {NULL, NULL} +}; +static struct tone remove_melody_beep[] = { + {1200, 10}, {1600, 5}, {NULL, NULL} +}; + +static struct tone *melody_table[MAX_TONE_MODE][MAX_STATE] = { + { /* silent mode */ + silent_beep, silent_beep, silent_beep, silent_beep, + }, + { /* simple beep mode */ + success_beep, failure_beep, + insert_remove_beep, insert_remove_beep, + }, + { /* melody beep mode */ + success_melody_beep, failure_melody_beep, + insert_melody_beep, remove_melody_beep, + }, +}; + + +static void +pccard_beep_sub(void *arg) +{ + struct tone *melody; + melody = (struct tone *)arg; + + if (melody->duration != NULL) { + sysbeep(melody->duration, melody->pitch); + timeout(pccard_beep_sub, ++melody, melody->pitch); + } else + allow_beep = BEEP_ON; } -void pccard_insert_beep(void) +static void +pccard_beep_start(void *arg) { - if (allow_beep == BEEP_ON) { - sysbeep(PCCARD_BEEP_PITCH0, PCCARD_BEEP_DURATION0); - allow_beep = BEEP_OFF; - beeptimeout_ch = timeout(enable_beep, (void *)NULL, hz / 5); - } -} + struct tone *melody; + melody = (struct tone *)arg; -void pccard_remove_beep(void) -{ - if (allow_beep == BEEP_ON) { - sysbeep(PCCARD_BEEP_PITCH0, PCCARD_BEEP_DURATION0); + if (allow_beep == BEEP_ON && melody->duration != NULL) { allow_beep = BEEP_OFF; - beeptimeout_ch = timeout(enable_beep, (void *)NULL, hz / 5); + sysbeep(melody->duration, melody->pitch); + timeout(pccard_beep_sub, ++melody, melody->pitch); } } void pccard_success_beep(void) { - if (allow_beep == BEEP_ON) { - sysbeep(PCCARD_BEEP_PITCH1, PCCARD_BEEP_DURATION1); - } + pccard_beep_start(melody_table[melody_type][0]); } void pccard_failure_beep(void) { - if (allow_beep == BEEP_ON) { - sysbeep(PCCARD_BEEP_PITCH2, PCCARD_BEEP_DURATION2); - } + pccard_beep_start(melody_table[melody_type][1]); } -int pccard_beep_select(enum beepstate state) +void pccard_insert_beep(void) +{ + pccard_beep_start(melody_table[melody_type][2]); +} + +void pccard_remove_beep(void) { - if (state == BEEP_ON || state == BEEP_OFF) { - allow_beep = state; - return 0; + pccard_beep_start(melody_table[melody_type][3]); +} + +int pccard_beep_select(int type) +{ + int errcode = 0; + + if (type == 0) { + allow_beep = BEEP_OFF; + melody_type = 0; + } else if (type < 0 || type > MAX_TONE_MODE) + errcode = 1; + else { + allow_beep = BEEP_ON; + melody_type = type; } - return 1; + return errcode; } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message