From: Andrew Rodland <arodland@noln.com>
To: linux-kernel@vger.kernel.org
Subject: Re: [PATCH -ac] Panicking in morse code, v2
Date: Fri, 19 Jul 2002 19:02:13 -0400 [thread overview]
Message-ID: <20020719190213.2a2d51f8.arodland@noln.com> (raw)
In-Reply-To: <20020719011300.548d72d5.arodland@noln.com>
Thanks a million to the unnamed linux<AT>horizon.com for some great
suggestions/info. v2 of the morse-panic patch features better
punctuation handling, proper morse-like timings, and something like 1/5
the static data requirement, thanks to the varicode algo that I
couldn't come up with myself. :)
Patch follows.
diff -u -r linux.old/drivers/char/pc_keyb.c linux.new/drivers/char/pc_keyb.c
--- linux.old/drivers/char/pc_keyb.c Fri Jul 19 18:56:36 2002
+++ linux.new/drivers/char/pc_keyb.c Fri Jul 19 18:54:17 2002
@@ -1244,29 +1244,131 @@
#endif /* CONFIG_PSMOUSE */
-static int blink_frequency = HZ/2;
+static int blink_setting = 1;
/* Tell the user who may be running in X and not see the console that we have
panic'ed. This is to distingush panics from "real" lockups.
Could in theory send the panic message as morse, but that is left as an
- exercise for the reader. */
-void panic_blink(void)
-{
- static unsigned long last_jiffie;
- static char led;
- /* Roughly 1/2s frequency. KDB uses about 1s. Make sure it is
- different. */
- if (!blink_frequency)
- return;
- if (jiffies - last_jiffie > blink_frequency) {
- led ^= 0x01 | 0x04;
+ exercise for the reader.
+ And now it's done! LED and speaker morse code by Andrew Rodland
+ <arodland@noln.com>, with improvements based on suggestions from
+ linux@horizon.com.
+*/
+
+static const char morsetable[] = {
+ /* .- -... -.-. -.. . ..-. --. .... .. */
+ 006, 021, 025, 011, 002, 024, 013, 020, 004, /* A-I */
+ /* .--- -.- .-.. -- -.- --- .--. --.- .-. */
+ 036, 015, 022, 007, 005, 017, 026, 033, 012, /* J-R */
+ /* ... - ..- ...- .-- -..- -.-- --.. */
+ 010, 003, 014, 030, 016, 031, 035, 023, /* S-Z */
+
+ 077, 076, 074, 070, 060, 040, 041, 043, 047, 057 /* 0-9 */
+};
+
+
+#define DITLEN (HZ / 5)
+#define DAHLEN 3 * DITLEN
+#define SPACELEN 7 * DITLEN
+
+#define FREQ 844
+
+static __inline__ void do_blink (int led) {
+
+ if (! blink_setting & 0x01)
+ return;
+
+ led = led ? (0x01 | 0x04) : 0x00;
+
while (kbd_read_status() & KBD_STAT_IBF) mdelay(1);
kbd_write_output(KBD_CMD_SET_LEDS);
mdelay(1);
while (kbd_read_status() & KBD_STAT_IBF) mdelay(1);
mdelay(1);
kbd_write_output(led);
- last_jiffie = jiffies;
+}
+
+void panic_blink(char * buf)
+{
+ static unsigned long next_jiffie = 0;
+ static char * bufpos = 0;
+ static char morse = 0;
+ static char state;
+
+ if (!blink_setting)
+ return;
+
+ if (!buf)
+ buf="Panic lost?";
+
+
+ if (jiffies >= next_jiffie || !bufpos) { //messy. fix.
+
+ if (state) {
+ do_blink(0);
+ state = 0;
+ next_jiffie = jiffies + DITLEN;
+ return;
+ }
+
+ if (!bufpos) {
+ bufpos = (char *)buf;
+ return;
+ }
+
+
+ if (morse <=1 ) { /* Many thanks for the clever scheme, horizon! */
+ if (!*bufpos) { /*Repeat the message */
+ bufpos = (char *)buf;
+ next_jiffie = jiffies + 3 * DAHLEN;
+ return;
+ }
+
+ next_jiffie = jiffies + 3*DITLEN;
+
+ if (*bufpos >= 'A' && *bufpos <= 'Z') {
+ morse = morsetable[*bufpos - 'A'];
+ } else if (*bufpos >= 'a' && *bufpos <= 'z') {
+ morse = morsetable[*bufpos - 'a'];
+ } else if (*bufpos >= '0' && *bufpos <= '9') {
+ morse = morsetable[*bufpos - '0' + 26];
+ } else {
+ switch (*bufpos) {
+ case '/': morse = 0051; break; /* -..-. */
+ case '=': morse = 0061; break; /* -...- */
+ case '.': morse = 0152; break; /* .-.-.- */
+ case '?': morse = 0114; break; /* ..--.. */
+ case ',': morse = 0163; break; /* --..-- */
+ case '-': morse = 0141; break; /* -....- */
+ case '\'':morse = 0136; break; /* .----. */
+ case '"': morse = 0122; break; /* .-..-. */
+ case ':': morse = 0107; break; /* ---... */
+ default : /* Space */
+ next_jiffie += 4*DITLEN; /*For a total of 7*/
+ }
+ }
+ bufpos ++;
+ return;
+ }
+
+ if (morse & 001) {
+ if (blink_setting & 0x02)
+ kd_mksound(FREQ, DAHLEN);
+ next_jiffie = jiffies + DAHLEN;
+ do_blink(1);
+ state = 1;
+ morse >>= 1;
+ return;
+ } else {
+ if (blink_setting & 0x02)
+ kd_mksound(FREQ, DITLEN);
+ next_jiffie = jiffies + DITLEN;
+ do_blink(1);
+ state = 1;
+ morse >>= 1;
+ return;
+ }
+ /*impossible*/
}
}
@@ -1274,7 +1376,7 @@
{
int par;
if (get_option(&str,&par))
- blink_frequency = par*(1000/HZ);
+ blink_setting = par;
return 1;
}
diff -u -r linux.old/kernel/panic.c linux.new/kernel/panic.c
--- linux.old/kernel/panic.c Fri Jul 19 18:56:36 2002
+++ linux.new/kernel/panic.c Thu Jul 18 21:45:45 2002
@@ -97,8 +97,8 @@
sti();
for(;;) {
#if defined(__i386__) && defined(CONFIG_VT)
- extern void panic_blink(void);
- panic_blink();
+ extern void panic_blink(char * buf);
+ panic_blink(buf);
#endif
CHECK_EMERGENCY_SYNC
}
next prev parent reply other threads:[~2002-07-19 23:00 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-07-19 5:13 [PATCH -ac] Panicking in morse code Andrew Rodland
2002-07-19 5:29 ` William Lee Irwin III
2002-07-19 16:36 ` Thorsten Kranzkowski
2002-07-19 17:00 ` Andrew Rodland
2002-07-19 17:27 ` Eli Carter
2002-07-19 17:32 ` Andrew Rodland
2002-07-19 23:02 ` Andrew Rodland [this message]
2002-07-20 10:58 ` [PATCH -ac] Panicking in morse code, v2 Daniel Phillips
2002-07-20 11:19 ` Thunder from the hill
2002-07-20 13:22 ` Ville Herva
2002-07-20 14:18 ` Daniel Phillips
2002-07-20 14:55 ` Tomas Szepe
2002-07-20 16:05 ` Daniel Phillips
2002-07-20 19:51 ` Thunder from the hill
2002-07-20 0:35 ` [PATCH -ac] Panicking in morse code Alan Cox
2002-07-20 0:39 ` Andrew Rodland
2002-07-20 0:48 ` Thunder from the hill
2002-07-25 12:51 ` Bill Davidsen
2002-07-26 3:43 ` Daniel Phillips
2002-07-26 4:47 ` Daniel Phillips
2002-07-26 4:52 ` jdow
2002-07-26 5:13 ` Daniel Phillips
2002-07-26 13:50 ` Bill Davidsen
2002-07-26 13:38 ` Bill Davidsen
2002-07-26 14:39 ` Richard B. Johnson
2002-07-26 20:09 ` Bill Davidsen
2002-07-26 23:25 ` Jens Schmidt
2002-07-27 2:05 ` Albert D. Cahalan
2002-07-27 4:00 ` Andrew Rodland
[not found] ` <200207270526.g6R5Qw942780@saturn.cs.uml.edu>
2002-07-27 5:57 ` Speaker twiddling [was: Re: Panicking in morse code] Andrew Rodland
2002-07-27 9:46 ` Daniel Phillips
2002-07-27 12:57 ` David D. Hagood
2002-07-27 15:45 ` Andrew Rodland
2002-07-29 17:47 ` Pavel Machek
2002-07-29 22:02 ` Ray Friess
2002-07-29 17:49 ` Pavel Machek
2002-07-29 20:35 ` Albert D. Cahalan
2002-07-29 21:08 ` Pavel Machek
2002-07-27 18:56 ` Albert D. Cahalan
2002-07-27 19:44 ` Ville Herva
2002-07-27 22:40 ` Alan Cox
2002-07-27 21:35 ` Ville Herva
2002-07-31 15:20 ` Thunder from the hill
2002-07-27 21:40 ` Ryan Anderson
2002-07-28 10:26 ` Lars Magne Ingebrigtsen
2002-07-29 20:03 ` Albert D. Cahalan
2002-08-13 17:20 ` Mark H. Wood
2002-07-27 4:04 ` [PATCH -ac] Panicking in morse code Andrew Rodland
2002-07-29 11:50 ` Bill Davidsen
2002-07-29 12:34 ` Richard B. Johnson
2002-07-29 19:57 ` Albert D. Cahalan
2002-07-31 17:54 ` Bill Davidsen
2002-07-20 21:32 ` [PATCH -ac] Panicking in morse code v3 Andrew Rodland
2002-07-21 8:49 ` Brad Hards
2002-07-21 9:08 ` Russell King
2002-07-21 10:50 ` Zwane Mwaikambo
2002-07-21 15:43 ` Daniel Phillips
2002-07-22 17:18 ` Andrew Rodland
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20020719190213.2a2d51f8.arodland@noln.com \
--to=arodland@noln.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox