diff options
| author | Keith Packard <keithp@keithp.com> | 2014-04-12 17:46:34 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2014-04-12 17:46:34 -0700 | 
| commit | 3b5c4d88671e6c511fbfb1ce6b046f558dd6c2bf (patch) | |
| tree | 430065c932391601cc3305a2c9fdf1132108a6f8 /src/kernel/ao_report.c | |
| parent | 8628f7e02834a476d5cb3afa4cbf8d46a4b3c513 (diff) | |
altos: Switch beeping to farnsworth spacing
Use 17wpm/12wpm farnsworth spacing for the state reports. Leave the
numeric reports running slowly as those require counting.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/kernel/ao_report.c')
| -rw-r--r-- | src/kernel/ao_report.c | 62 | 
1 files changed, 58 insertions, 4 deletions
diff --git a/src/kernel/ao_report.c b/src/kernel/ao_report.c index 1a0e9e16..f2263154 100644 --- a/src/kernel/ao_report.c +++ b/src/kernel/ao_report.c @@ -52,6 +52,60 @@ static const uint8_t flight_reports[] = {  static __pdata enum ao_flight_state ao_report_state; +/* + * Farnsworth spacing + * + * From: http://www.arrl.org/files/file/Technology/x9004008.pdf + * + *	c:	character rate in wpm + *	s:	overall rate in wpm + *	u:	unit rate (dit speed) + * + *	dit:			u + *	dah:			3u + *	intra-character-time:	u + * + * 	u = 1.2/c + * + * Because our clock runs at 10ms, we'll round up to 70ms for u, which + * is about 17wpm + * + *	Farnsworth adds space between characters and + *	words: + *           60 c - 37.2 s + *	Ta = ------------- + *                sc + * + *           3 Ta + *	Tc = ---- + *            19 + * + *           7 Ta + *	Tw = ---- + *            19 + * + *	Ta = total delay to add to the characters (31 units) + *           of a standard 50-unit "word", in seconds + * + *      Tc = period between characters, in seconds + * + *	Tw = period between words, in seconds + * + * We'll use Farnsworth spacing with c=18 and s=12: + * + *	u = 1.2/18 = 0.0667 + * + *	Ta = (60 * 17 - 37.2 * 12) / (17 * 12) = 2.812 + * + *	Tc = 3 * Ta / 19 = .444 + * + *	Tw = 1.036 + * + * Note that the values below are all reduced by 10ms; that's because + * the timer always adds a tick to make sure the task actually sleeps + * at least as long as the argument. + */ +  static void  ao_report_beep(void) __reentrant  { @@ -62,13 +116,13 @@ ao_report_beep(void) __reentrant  		return;  	while (l--) {  		if (r & 8) -			mid(AO_MS_TO_TICKS(600)); -		else  			mid(AO_MS_TO_TICKS(200)); -		pause(AO_MS_TO_TICKS(200)); +		else +			mid(AO_MS_TO_TICKS(60)); +		pause(AO_MS_TO_TICKS(60));  		r >>= 1;  	} -	pause(AO_MS_TO_TICKS(400)); +	pause(AO_MS_TO_TICKS(360));  }  static void  | 
