Annotation of /trunk/mkinitrd-magellan/busybox/miscutils/beep.c
Parent Directory | Revision Log
Revision 984 -
(hide annotations)
(download)
Sun May 30 11:32:42 2010 UTC (14 years ago) by niro
File MIME type: text/plain
File size: 2716 byte(s)
Sun May 30 11:32:42 2010 UTC (14 years ago) by niro
File MIME type: text/plain
File size: 2716 byte(s)
-updated to busybox-1.16.1 and enabled blkid/uuid support in default config
1 | niro | 984 | /* 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 | /* defaults */ | ||
18 | #ifndef CONFIG_FEATURE_BEEP_FREQ | ||
19 | # define FREQ (4000) | ||
20 | #else | ||
21 | # define FREQ (CONFIG_FEATURE_BEEP_FREQ) | ||
22 | #endif | ||
23 | #ifndef CONFIG_FEATURE_BEEP_LENGTH_MS | ||
24 | # define LENGTH (30) | ||
25 | #else | ||
26 | # define LENGTH (CONFIG_FEATURE_BEEP_LENGTH_MS) | ||
27 | #endif | ||
28 | #define DELAY (0) | ||
29 | #define REPETITIONS (1) | ||
30 | |||
31 | int beep_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | ||
32 | int beep_main(int argc, char **argv) | ||
33 | { | ||
34 | int speaker = get_console_fd_or_die(); | ||
35 | unsigned tickrate_div_freq = tickrate_div_freq; /* for compiler */ | ||
36 | unsigned length = length; | ||
37 | unsigned delay = delay; | ||
38 | unsigned rep = rep; | ||
39 | int c; | ||
40 | |||
41 | c = 'n'; | ||
42 | while (c != -1) { | ||
43 | if (c == 'n') { | ||
44 | tickrate_div_freq = CLOCK_TICK_RATE / FREQ; | ||
45 | length = LENGTH; | ||
46 | delay = DELAY; | ||
47 | rep = REPETITIONS; | ||
48 | } | ||
49 | c = getopt(argc, argv, "f:l:d:r:n"); | ||
50 | /* TODO: -s, -c: | ||
51 | * pipe stdin to stdout, but also beep after each line (-s) or char (-c) | ||
52 | */ | ||
53 | switch (c) { | ||
54 | case 'f': | ||
55 | /* TODO: what "-f 0" should do? */ | ||
56 | tickrate_div_freq = (unsigned)CLOCK_TICK_RATE / xatou(optarg); | ||
57 | continue; | ||
58 | case 'l': | ||
59 | length = xatou(optarg); | ||
60 | continue; | ||
61 | case 'd': | ||
62 | /* TODO: | ||
63 | * -d N, -D N | ||
64 | * specify a delay of N milliseconds between repetitions. | ||
65 | * -d specifies that this delay should only occur between beeps, | ||
66 | * that is, it should not occur after the last repetition. | ||
67 | * -D indicates that the delay should occur after every repetition | ||
68 | */ | ||
69 | delay = xatou(optarg); | ||
70 | continue; | ||
71 | case 'r': | ||
72 | rep = xatou(optarg); | ||
73 | continue; | ||
74 | case 'n': | ||
75 | case -1: | ||
76 | break; | ||
77 | default: | ||
78 | bb_show_usage(); | ||
79 | } | ||
80 | while (rep) { | ||
81 | //bb_info_msg("rep[%d] freq=%d, length=%d, delay=%d", rep, freq, length, delay); | ||
82 | xioctl(speaker, KIOCSOUND, (void*)(uintptr_t)tickrate_div_freq); | ||
83 | usleep(1000 * length); | ||
84 | ioctl(speaker, KIOCSOUND, (void*)0); | ||
85 | if (--rep) | ||
86 | usleep(1000 * delay); | ||
87 | } | ||
88 | } | ||
89 | |||
90 | if (ENABLE_FEATURE_CLEAN_UP) | ||
91 | close(speaker); | ||
92 | return EXIT_SUCCESS; | ||
93 | } | ||
94 | /* | ||
95 | * so, e.g. Beethoven's 9th symphony "Ode an die Freude" would be | ||
96 | * something like: | ||
97 | a=$((220*3)) | ||
98 | b=$((247*3)) | ||
99 | c=$((262*3)) | ||
100 | d=$((294*3)) | ||
101 | e=$((329*3)) | ||
102 | f=$((349*3)) | ||
103 | g=$((392*3)) | ||
104 | #./beep -f$d -l200 -r2 -n -f$e -l100 -d 10 -n -f$c -l400 -f$g -l200 | ||
105 | ./beep -f$e -l200 -r2 \ | ||
106 | -n -d 100 -f$f -l200 \ | ||
107 | -n -f$g -l200 -r2 \ | ||
108 | -n -f$f -l200 \ | ||
109 | -n -f$e -l200 \ | ||
110 | -n -f$d -l200 \ | ||
111 | -n -f$c -l200 -r2 \ | ||
112 | -n -f$d -l200 \ | ||
113 | -n -f$e -l200 \ | ||
114 | -n -f$e -l400 \ | ||
115 | -n -f$d -l100 \ | ||
116 | -n -f$d -l200 \ | ||
117 | */ |