aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2009-08-21 13:18:31 +0200
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2009-08-21 13:18:31 +0200
commit45de0746b33b3716101caa5fa08ee601221dce39 (patch)
treed073e0980d8ee319c7c48999fa5e3278aed3b1b3
parente10db56aa3e069388e84f7166e05032ba5b89295 (diff)
downloadbusybox-w32-45de0746b33b3716101caa5fa08ee601221dce39.tar.gz
busybox-w32-45de0746b33b3716101caa5fa08ee601221dce39.tar.bz2
busybox-w32-45de0746b33b3716101caa5fa08ee601221dce39.zip
add simple beep applet
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
-rw-r--r--include/applets.h1
-rw-r--r--include/usage.h10
-rw-r--r--miscutils/Config.in6
-rw-r--r--miscutils/Kbuild1
-rw-r--r--miscutils/beep.c119
5 files changed, 137 insertions, 0 deletions
diff --git a/include/applets.h b/include/applets.h
index d4fbbc95c..9b6b54e63 100644
--- a/include/applets.h
+++ b/include/applets.h
@@ -80,6 +80,7 @@ IF_ASH(APPLET(ash, _BB_DIR_BIN, _BB_SUID_DROP))
80IF_AWK(APPLET_NOEXEC(awk, awk, _BB_DIR_USR_BIN, _BB_SUID_DROP, awk)) 80IF_AWK(APPLET_NOEXEC(awk, awk, _BB_DIR_USR_BIN, _BB_SUID_DROP, awk))
81IF_BASENAME(APPLET_NOFORK(basename, basename, _BB_DIR_USR_BIN, _BB_SUID_DROP, basename)) 81IF_BASENAME(APPLET_NOFORK(basename, basename, _BB_DIR_USR_BIN, _BB_SUID_DROP, basename))
82IF_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_DROP)) 82IF_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_DROP))
83IF_BEEP(APPLET(beep, _BB_DIR_USR_BIN, _BB_SUID_DROP))
83//IF_BBSH(APPLET(bbsh, _BB_DIR_BIN, _BB_SUID_DROP)) 84//IF_BBSH(APPLET(bbsh, _BB_DIR_BIN, _BB_SUID_DROP))
84IF_BLKID(APPLET(blkid, _BB_DIR_SBIN, _BB_SUID_DROP)) 85IF_BLKID(APPLET(blkid, _BB_DIR_SBIN, _BB_SUID_DROP))
85IF_BRCTL(APPLET(brctl, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 86IF_BRCTL(APPLET(brctl, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
diff --git a/include/usage.h b/include/usage.h
index 8a5c7a088..227ed8001 100644
--- a/include/usage.h
+++ b/include/usage.h
@@ -145,6 +145,16 @@
145 "$ basename /foo/bar.txt .txt\n" \ 145 "$ basename /foo/bar.txt .txt\n" \
146 "bar" 146 "bar"
147 147
148#define beep_trivial_usage \
149 "-f freq -l length -d delay -r repetitions -n"
150#define beep_full_usage "\n\n" \
151 "Options:\n" \
152 "\n -f Frequency in Hz" \
153 "\n -l Length in ms" \
154 "\n -d Delay in ms" \
155 "\n -r Repetitions" \
156 "\n -n Start new tone" \
157
148#define fbsplash_trivial_usage \ 158#define fbsplash_trivial_usage \
149 "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD]" 159 "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD]"
150#define fbsplash_full_usage "\n\n" \ 160#define fbsplash_full_usage "\n\n" \
diff --git a/miscutils/Config.in b/miscutils/Config.in
index 689044794..7209d2944 100644
--- a/miscutils/Config.in
+++ b/miscutils/Config.in
@@ -19,6 +19,12 @@ config BBCONFIG
19 The bbconfig applet will print the config file with which 19 The bbconfig applet will print the config file with which
20 busybox was built. 20 busybox was built.
21 21
22config BEEP
23 bool "beep"
24 default n
25 help
26 The beep applets beeps in a given freq/Hz.
27
22config CHAT 28config CHAT
23 bool "chat" 29 bool "chat"
24 default n 30 default n
diff --git a/miscutils/Kbuild b/miscutils/Kbuild
index e378a099f..d88cb39ac 100644
--- a/miscutils/Kbuild
+++ b/miscutils/Kbuild
@@ -7,6 +7,7 @@
7lib-y:= 7lib-y:=
8lib-$(CONFIG_ADJTIMEX) += adjtimex.o 8lib-$(CONFIG_ADJTIMEX) += adjtimex.o
9lib-$(CONFIG_BBCONFIG) += bbconfig.o 9lib-$(CONFIG_BBCONFIG) += bbconfig.o
10lib-$(CONFIG_BEEP) += beep.o
10lib-$(CONFIG_CHAT) += chat.o 11lib-$(CONFIG_CHAT) += chat.o
11lib-$(CONFIG_CHRT) += chrt.o 12lib-$(CONFIG_CHRT) += chrt.o
12lib-$(CONFIG_CROND) += crond.o 13lib-$(CONFIG_CROND) += crond.o
diff --git a/miscutils/beep.c b/miscutils/beep.c
new file mode 100644
index 000000000..d5c353197
--- /dev/null
+++ b/miscutils/beep.c
@@ -0,0 +1,119 @@
1/* vi: set sw=4 ts=4: */
2/*
3 * beep implementation for busybox
4 *
5 * Copyright (C) 2009 Bernhard Reutner-Fischer
6 *
7 * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
8 *
9 */
10#include "libbb.h"
11
12#include <linux/kd.h>
13#ifndef CLOCK_TICK_RATE
14#define CLOCK_TICK_RATE 1193180
15#endif
16
17#define OPT_f (1<<0)
18#define OPT_l (1<<1)
19#define OPT_d (1<<2)
20#define OPT_r (1<<3)
21/* defaults */
22#define FREQ (4440)
23#define LENGTH (50)
24#define DELAY (0)
25#define REPETITIONS (1)
26
27#define GET_ARG do { if (!*++opt) opt = *++argv; if (opt == NULL) bb_show_usage();} while (0)
28#define NEW_BEEP() { \
29 freq = FREQ; \
30 length = LENGTH; \
31 delay = DELAY; \
32 rep = REPETITIONS; \
33 }
34
35int beep_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
36int beep_main(int argc UNUSED_PARAM, char **argv)
37{
38 int speaker = get_console_fd_or_die();
39 unsigned freq, length, delay, rep;
40 unsigned long ioctl_arg;
41 char *opt = NULL;
42 bool do_parse = true;
43
44 NEW_BEEP()
45 while (*argv && *++argv) {
46 opt = *argv;
47
48 while (*opt == '-')
49 ++opt;
50 if (do_parse)
51 switch (*opt) {
52 case 'f':
53 GET_ARG;
54 freq = xatoul(opt);
55 continue;
56 case 'l':
57 GET_ARG;
58 length = xatoul(opt);
59 continue;
60 case 'd':
61 GET_ARG;
62 delay = xatoul(opt);
63 continue;
64 case 'r':
65 GET_ARG;
66 rep = xatoul(opt);
67 continue;
68 case 'n':
69 break;
70 default:
71 bb_show_usage();
72 break;
73 }
74 again:
75 while (rep) {
76//bb_info_msg("rep[%d] freq=%d, length=%d, delay=%d", rep, freq, length, delay);
77 ioctl_arg = (int)(CLOCK_TICK_RATE/freq);
78 xioctl(speaker, KIOCSOUND, (void*)ioctl_arg);
79 usleep(1000 * length);
80 ioctl(speaker, KIOCSOUND, 0);
81 if (rep--)
82 usleep(delay);
83 }
84 if (opt && *opt == 'n')
85 NEW_BEEP()
86 if (!do_parse && *argv == NULL)
87 goto out;
88 }
89 do_parse = false;
90 goto again;
91 out:
92 if (ENABLE_FEATURE_CLEAN_UP)
93 close(speaker);
94 return EXIT_SUCCESS;
95}
96/*
97 * so, e.g. Beethoven's 9th symphony "Ode an die Freude" would be
98 * something like:
99a=$((220*3))
100b=$((247*3))
101c=$((262*3))
102d=$((294*3))
103e=$((329*3))
104f=$((349*3))
105g=$((392*3))
106#./beep -f$d -l200 -r2 -n -f$e -l100 -d 10 -n -f$c -l400 -f$g -l200
107./beep -f$e -l200 -r2 \
108 -n -d 100 -f$f -l200 \
109 -n -f$g -l200 -r2 \
110 -n -f$f -l200 \
111 -n -f$e -l200 \
112 -n -f$d -l200 \
113 -n -f$c -l200 -r2 \
114 -n -f$d -l200 \
115 -n -f$e -l200 \
116 -n -f$e -l400 \
117 -n -f$d -l100 \
118 -n -f$d -l200 \
119*/