1 /* vi: set sw=4 ts=4: */
3 * beep implementation for busybox
5 * Copyright (C) 2009 Bernhard Reutner-Fischer
7 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
10 //config: bool "beep (2.7 kb)"
13 //config: The beep applets beeps in a given freq/Hz.
15 //config:config FEATURE_BEEP_FREQ
16 //config: int "default frequency"
17 //config: range 20 50000 # allowing 0 here breaks the build
18 //config: default 4000
19 //config: depends on BEEP
21 //config: Frequency for default beep.
23 //config:config FEATURE_BEEP_LENGTH_MS
24 //config: int "default length"
25 //config: range 0 2147483647
27 //config: depends on BEEP
29 //config: Length in ms for default beep.
31 //applet:IF_BEEP(APPLET(beep, BB_DIR_USR_BIN, BB_SUID_DROP))
33 //kbuild:lib-$(CONFIG_BEEP) += beep.o
35 //usage:#define beep_trivial_usage
36 //usage: "-f FREQ -l LEN -d DELAY -r COUNT -n"
37 //usage:#define beep_full_usage "\n\n"
38 //usage: " -f Frequency in Hz"
39 //usage: "\n -l Length in ms"
40 //usage: "\n -d Delay in ms"
41 //usage: "\n -r Repetitions"
42 //usage: "\n -n Start new tone"
47 #ifndef CLOCK_TICK_RATE
48 # define CLOCK_TICK_RATE 1193180
52 #ifndef CONFIG_FEATURE_BEEP_FREQ
55 # define FREQ (CONFIG_FEATURE_BEEP_FREQ)
57 #ifndef CONFIG_FEATURE_BEEP_LENGTH_MS
60 # define LENGTH (CONFIG_FEATURE_BEEP_LENGTH_MS)
63 #define REPETITIONS (1)
65 int beep_main(int argc
, char **argv
) MAIN_EXTERNALLY_VISIBLE
;
66 int beep_main(int argc
, char **argv
)
68 int speaker
= get_console_fd_or_die();
69 unsigned tickrate_div_freq
= tickrate_div_freq
; /* for compiler */
70 unsigned length
= length
;
71 unsigned delay
= delay
;
78 tickrate_div_freq
= CLOCK_TICK_RATE
/ FREQ
;
83 c
= getopt(argc
, argv
, "f:l:d:r:n");
85 * pipe stdin to stdout, but also beep after each line (-s) or char (-c)
89 /* TODO: what "-f 0" should do? */
90 tickrate_div_freq
= (unsigned)CLOCK_TICK_RATE
/ xatou(optarg
);
93 length
= xatou(optarg
);
98 * specify a delay of N milliseconds between repetitions.
99 * -d specifies that this delay should only occur between beeps,
100 * that is, it should not occur after the last repetition.
101 * -D indicates that the delay should occur after every repetition
103 delay
= xatou(optarg
);
115 //bb_error_msg("rep[%d] freq=%d, length=%d, delay=%d", rep, freq, length, delay);
116 xioctl(speaker
, KIOCSOUND
, (void*)(uintptr_t)tickrate_div_freq
);
118 ioctl(speaker
, KIOCSOUND
, (void*)0);
124 if (ENABLE_FEATURE_CLEAN_UP
)
129 * so, e.g. Beethoven's 9th symphony "Ode an die Freude" would be
138 #./beep -f$d -l200 -r2 -n -f$e -l100 -d 10 -n -f$c -l400 -f$g -l200
139 ./beep -f$e -l200 -r2 \
140 -n -d 100 -f$f -l200 \