Index: usr.sbin/pccard/pccardc/pccardc.8 =================================================================== RCS file: /home/ncvs/src/usr.sbin/pccard/pccardc/pccardc.8,v retrieving revision 1.7.2.1 diff -u -r1.7.2.1 pccardc.8 --- usr.sbin/pccard/pccardc/pccardc.8 2000/10/20 12:57:55 1.7.2.1 +++ usr.sbin/pccard/pccardc/pccardc.8 2000/11/29 14:31:39 @@ -85,6 +85,8 @@ silent mode .It Li 1 simple beep mode +.It Li 2 +melody mode .El .It .Ic dumpcis Index: share/man/man5/rc.conf.5 =================================================================== RCS file: /home/ncvs/src/share/man/man5/rc.conf.5,v retrieving revision 1.64.2.9 diff -u -r1.64.2.9 rc.conf.5 --- share/man/man5/rc.conf.5 2000/11/11 20:34:25 1.64.2.9 +++ share/man/man5/rc.conf.5 2000/11/29 14:31:44 @@ -114,6 +114,8 @@ set the PCCARD controller to silent mode. If 1, set it to beep mode. +If 2, +set it to melody mode. .It Ar pccard_conf (str) Path to the configuration file for the .Xr pccardd 8 Index: etc/defaults/rc.conf =================================================================== RCS file: /home/ncvs/src/etc/defaults/rc.conf,v retrieving revision 1.53.2.13 diff -u -r1.53.2.13 rc.conf --- etc/defaults/rc.conf 2000/11/11 20:33:40 1.53.2.13 +++ etc/defaults/rc.conf 2000/11/29 14:31:46 @@ -25,7 +25,7 @@ apmd_flags="" # Flags to apmd (if enabled). pccard_enable="NO" # Set to YES if you want to configure PCCARD devices. pccard_mem="DEFAULT" # If pccard_enable=YES, this is card memory address. -pccard_beep="1" # pccard beep type. +pccard_beep="2" # pccard beep type. pccard_ifconfig="NO" # Specialized pccard ethernet configuration (or NO). pccardd_flags="" # Additional flags for pccardd. pccard_conf="/etc/defaults/pccard.conf" # pccardd(8) config file Index: release/sysinstall/pccard.c =================================================================== RCS file: /home/ncvs/src/release/sysinstall/pccard.c,v retrieving revision 1.10.2.3 diff -u -r1.10.2.3 pccard.c --- release/sysinstall/pccard.c 2000/10/13 11:47:09 1.10.2.3 +++ release/sysinstall/pccard.c 2000/11/29 14:31:47 @@ -223,7 +223,7 @@ restorescr(w); return; } - beep_newstat = 1; + beep_newstat = 2; if (ioctl(fd, PIOCSBEEP, &beep_newstat) < 0) { msgNotify("Warning: unable to set pccard insertion beep type for %s", card_device); Index: sys/pccard/driver.h =================================================================== RCS file: /home/ncvs/src/sys/pccard/driver.h,v retrieving revision 1.12 diff -u -r1.12 driver.h --- sys/pccard/driver.h 1999/12/02 19:46:40 1.12 +++ sys/pccard/driver.h 2000/11/29 14:31:47 @@ -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: 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 --- sys/pccard/pccard_beep.c 1999/12/02 19:46:41 1.3 +++ sys/pccard/pccard_beep.c 2000/11/29 14:31:47 @@ -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 pitch; + int duration; +}; + + +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->pitch != NULL) { + sysbeep(melody->pitch, melody->duration); + timeout(pccard_beep_sub, ++melody, melody->duration); + } 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->pitch != NULL) { allow_beep = BEEP_OFF; - beeptimeout_ch = timeout(enable_beep, (void *)NULL, hz / 5); + sysbeep(melody->pitch, melody->duration); + timeout(pccard_beep_sub, ++melody, melody->duration); } } 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 || MAX_TONE_MODE - 1 < type) + errcode = 1; + else { + allow_beep = BEEP_ON; + melody_type = type; } - return 1; + return errcode; }