update docs
authorBdale Garbee <bdale@gag.com>
Thu, 19 Dec 2013 09:50:46 +0000 (02:50 -0700)
committerBdale Garbee <bdale@gag.com>
Thu, 19 Dec 2013 09:50:46 +0000 (02:50 -0700)
44 files changed:
AltOS/doc/altos.html
AltOS/doc/altos.pdf
AltOS/doc/altosui.png [new file with mode: 0644]
AltOS/doc/altusmetrum.html
AltOS/doc/altusmetrum.pdf
AltOS/doc/ascent.png [new file with mode: 0644]
AltOS/doc/companion.html
AltOS/doc/companion.pdf
AltOS/doc/configure-altimeter.png [new file with mode: 0644]
AltOS/doc/configure-altosui.png [new file with mode: 0644]
AltOS/doc/configure-groundstation.png [new file with mode: 0644]
AltOS/doc/configure-pyro.png [new file with mode: 0644]
AltOS/doc/descent.png [new file with mode: 0644]
AltOS/doc/device-selection.png [new file with mode: 0644]
AltOS/doc/easymini-top.jpg [new file with mode: 0644]
AltOS/doc/fire-igniter.png [new file with mode: 0644]
AltOS/doc/graph-configure.png [new file with mode: 0644]
AltOS/doc/graph-map.png [new file with mode: 0644]
AltOS/doc/graph-stats.png [new file with mode: 0644]
AltOS/doc/graph.png [new file with mode: 0644]
AltOS/doc/landed.png [new file with mode: 0644]
AltOS/doc/launch-pad.png [new file with mode: 0644]
AltOS/doc/load-maps.png [new file with mode: 0644]
AltOS/doc/micropeak.html
AltOS/doc/micropeak.pdf
AltOS/doc/release-notes-0.7.1.html
AltOS/doc/release-notes-0.8.html
AltOS/doc/release-notes-0.9.2.html
AltOS/doc/release-notes-0.9.html
AltOS/doc/release-notes-1.0.1.html
AltOS/doc/release-notes-1.1.1.html
AltOS/doc/release-notes-1.1.html
AltOS/doc/release-notes-1.2.1.html
AltOS/doc/release-notes-1.2.html
AltOS/doc/release-notes-1.3.html [new file with mode: 0644]
AltOS/doc/scan-channels.png [new file with mode: 0644]
AltOS/doc/site-map.png [new file with mode: 0644]
AltOS/doc/table.png [new file with mode: 0644]
AltOS/doc/telemega-v1.0-top.jpg [new file with mode: 0644]
AltOS/doc/telemetrum-v1.1-thside.jpg [new file with mode: 0644]
AltOS/doc/telemetry.html
AltOS/doc/telemetry.pdf
AltOS/doc/telemini-v1-top.jpg [new file with mode: 0644]
AltOS/doc/telemini-v2-top.jpg [new file with mode: 0644]

index 616c7dd11ecf00180a7815edfda5926812d6f26c..e61b06191e3d8a2b190bb704871bd79090d09e0d 100644 (file)
@@ -1,17 +1,41 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>AltOS</title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book" title="AltOS"><div class="titlepage"><div><div><h1 class="title"><a name="idm14845520"></a>AltOS</h1></div><div><h2 class="subtitle">Altos Metrum Operating System</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Keith</span> <span class="surname">Packard</span></h3></div></div><div><p class="copyright">Copyright © 2010 Keith Packard</p></div><div><div class="legalnotice" title="Legal Notice"><a name="idp109448"></a><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>AltOS</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book"><div class="titlepage"><div><div><h1 class="title"><a name="idm6244192"></a>AltOS</h1></div><div><h2 class="subtitle">Altos Metrum Operating System</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Keith</span> <span class="surname">Packard</span></h3></div></div><div><p class="copyright">Copyright © 2010 Keith Packard</p></div><div><div class="legalnotice"><a name="idp48059856"></a><p>
         This document is released under the terms of the
         <a class="ulink" href="http://creativecommons.org/licenses/by-sa/3.0/" target="_top">
           Creative Commons ShareAlike 3.0
         </a>
         license.
-      </p></div></div><div><div class="revhistory"><table border="1" width="100%" summary="Revision history"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 0.1</td><td align="left">22 November 2010</td></tr><tr><td align="left" colspan="2">Initial content</td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="#idp111432">1. Overview</a></span></dt><dt><span class="chapter"><a href="#idp1427552">2. Programming the 8051 with SDCC</a></span></dt><dd><dl><dt><span class="section"><a href="#idp1932896">1. 8051 memory spaces</a></span></dt><dd><dl><dt><span class="section"><a href="#idp1539448">1.1. __data</a></span></dt><dt><span class="section"><a href="#idp3243048">1.2. __idata</a></span></dt><dt><span class="section"><a href="#idp905104">1.3. __xdata</a></span></dt><dt><span class="section"><a href="#idp2815944">1.4. __pdata</a></span></dt><dt><span class="section"><a href="#idp2085816">1.5. __code</a></span></dt><dt><span class="section"><a href="#idp1611720">1.6. __bit</a></span></dt><dt><span class="section"><a href="#idp2143464">1.7. __sfr, __sfr16, __sfr32, __sbit</a></span></dt></dl></dd><dt><span class="section"><a href="#idp2034368">2. Function calls on the 8051</a></span></dt><dd><dl><dt><span class="section"><a href="#idp2827648">2.1. __reentrant functions</a></span></dt><dt><span class="section"><a href="#idp3350176">2.2. Non __reentrant functions</a></span></dt><dt><span class="section"><a href="#idp1644208">2.3. __interrupt functions</a></span></dt><dt><span class="section"><a href="#idp1931128">2.4. __critical functions and statements</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#idp2235720">3. Task functions</a></span></dt><dd><dl><dt><span class="section"><a href="#idp2145232">1. ao_add_task</a></span></dt><dt><span class="section"><a href="#idp49456">2. ao_exit</a></span></dt><dt><span class="section"><a href="#idp50328">3. ao_sleep</a></span></dt><dt><span class="section"><a href="#idp52064">4. ao_wakeup</a></span></dt><dt><span class="section"><a href="#idp5464">5. ao_alarm</a></span></dt><dt><span class="section"><a href="#idp7304">6. ao_start_scheduler</a></span></dt><dt><span class="section"><a href="#idp8360">7. ao_clock_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp9632">4. Timer Functions</a></span></dt><dd><dl><dt><span class="section"><a href="#idp10624">1. ao_time</a></span></dt><dt><span class="section"><a href="#idp11688">2. ao_delay</a></span></dt><dt><span class="section"><a href="#idp12688">3. ao_timer_set_adc_interval</a></span></dt><dt><span class="section"><a href="#idp748296">4. ao_timer_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp749488">5. AltOS Mutexes</a></span></dt><dd><dl><dt><span class="section"><a href="#idp750840">1. ao_mutex_get</a></span></dt><dt><span class="section"><a href="#idp751936">2. ao_mutex_put</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp753080">6. CC1111 DMA engine</a></span></dt><dd><dl><dt><span class="section"><a href="#idp754920">1. ao_dma_alloc</a></span></dt><dt><span class="section"><a href="#idp756296">2. ao_dma_set_transfer</a></span></dt><dt><span class="section"><a href="#idp757744">3. ao_dma_start</a></span></dt><dt><span class="section"><a href="#idp758808">4. ao_dma_trigger</a></span></dt><dt><span class="section"><a href="#idp759864">5. ao_dma_abort</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp761032">7. SDCC Stdio interface</a></span></dt><dd><dl><dt><span class="section"><a href="#idp761992">1. putchar</a></span></dt><dt><span class="section"><a href="#idp763040">2. getchar</a></span></dt><dt><span class="section"><a href="#idp54808">3. flush</a></span></dt><dt><span class="section"><a href="#idp55872">4. ao_add_stdio</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp58336">8. Command line interface</a></span></dt><dd><dl><dt><span class="section"><a href="#idp59184">1. ao_cmd_register</a></span></dt><dt><span class="section"><a href="#idp64112">2. ao_cmd_lex</a></span></dt><dt><span class="section"><a href="#idp65264">3. ao_cmd_put16</a></span></dt><dt><span class="section"><a href="#idp66304">4. ao_cmd_put8</a></span></dt><dt><span class="section"><a href="#idp67336">5. ao_cmd_white</a></span></dt><dt><span class="section"><a href="#idp68488">6. ao_cmd_hex</a></span></dt><dt><span class="section"><a href="#idp69616">7. ao_cmd_decimal</a></span></dt><dt><span class="section"><a href="#idp70800">8. ao_match_word</a></span></dt><dt><span class="section"><a href="#idp72032">9. ao_cmd_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp73256">9. CC1111 USB target device</a></span></dt><dd><dl><dt><span class="section"><a href="#idp74736">1. ao_usb_flush</a></span></dt><dt><span class="section"><a href="#idp75960">2. ao_usb_putchar</a></span></dt><dt><span class="section"><a href="#idp77216">3. ao_usb_pollchar</a></span></dt><dt><span class="section"><a href="#idp3450240">4. ao_usb_getchar</a></span></dt><dt><span class="section"><a href="#idp3451248">5. ao_usb_disable</a></span></dt><dt><span class="section"><a href="#idp3452920">6. ao_usb_enable</a></span></dt><dt><span class="section"><a href="#idp3454056">7. ao_usb_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp3455248">10. CC1111 Serial peripheral</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3456504">1. ao_serial_getchar</a></span></dt><dt><span class="section"><a href="#idp3457568">2. ao_serial_putchar</a></span></dt><dt><span class="section"><a href="#idp3458624">3. ao_serial_drain</a></span></dt><dt><span class="section"><a href="#idp3459664">4. ao_serial_set_speed</a></span></dt><dt><span class="section"><a href="#idp3460792">5. ao_serial_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp3461952">11. CC1111 Radio peripheral</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3466304">1. ao_radio_set_telemetry</a></span></dt><dt><span class="section"><a href="#idp3467552">2. ao_radio_set_packet</a></span></dt><dt><span class="section"><a href="#idp3468800">3. ao_radio_set_rdf</a></span></dt><dt><span class="section"><a href="#idp3470080">4. ao_radio_idle</a></span></dt><dt><span class="section"><a href="#idp3471168">5. ao_radio_get</a></span></dt><dt><span class="section"><a href="#idp3472232">6. ao_radio_put</a></span></dt><dt><span class="section"><a href="#idp3473200">7. ao_radio_abort</a></span></dt><dt><span class="section"><a href="#idp3474720">8. ao_radio_send</a></span></dt><dt><span class="section"><a href="#idp3475976">9. ao_radio_recv</a></span></dt><dt><span class="section"><a href="#idp3477624">10. ao_radio_rdf</a></span></dt><dt><span class="section"><a href="#idp3479128">11. ao_packet_putchar</a></span></dt><dt><span class="section"><a href="#idp3480400">12. ao_packet_pollchar</a></span></dt><dt><span class="section"><a href="#idp3481520">13. ao_packet_slave_start</a></span></dt><dt><span class="section"><a href="#idp3482560">14. ao_packet_slave_stop</a></span></dt><dt><span class="section"><a href="#idp3483568">15. ao_packet_slave_init</a></span></dt><dt><span class="section"><a href="#idp3484688">16. ao_packet_master_init</a></span></dt></dl></dd></dl></div><div class="chapter" title="Chapter 1. Overview"><div class="titlepage"><div><div><h2 class="title"><a name="idp111432"></a>Chapter 1. Overview</h2></div></div></div><p>
-      AltOS is a operating system built for the 8051-compatible
-      processor found in the TI cc1111 microcontroller. It's designed
-      to be small and easy to program with. The main features are:
-      </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Multi-tasking. While the 8051 doesn't provide separate
-         address spaces, it's often easier to write code that operates
-         in separate threads instead of tying everything into one giant
-         event loop.
+      </p></div></div><div><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 1.1</td><td align="left">05 November 2012</td></tr><tr><td align="left" colspan="2">Portable version</td></tr><tr><td align="left">Revision 0.1</td><td align="left">22 November 2010</td></tr><tr><td align="left" colspan="2">Initial content</td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="chapter"><a href="#idp47884288">1. Overview</a></span></dt><dt><span class="chapter"><a href="#idp48916512">2. AltOS Porting Layer</a></span></dt><dd><dl><dt><span class="section"><a href="#idp48918016">1. Low-level CPU operations</a></span></dt><dd><dl><dt><span class="section"><a href="#idp48919248">1.1. ao_arch_block_interrupts/ao_arch_release_interrupts</a></span></dt><dt><span class="section"><a href="#idp48921296">1.2. ao_arch_save_regs, ao_arch_save_stack,
+       ao_arch_restore_stack</a></span></dt><dt><span class="section"><a href="#idp49830960">1.3. ao_arch_wait_interupt</a></span></dt></dl></dd><dt><span class="section"><a href="#idp49833504">2. GPIO operations</a></span></dt><dd><dl><dt><span class="section"><a href="#idp49834672">2.1. GPIO setup</a></span></dt><dt><span class="section"><a href="#idp49843888">2.2. Reading and writing GPIO pins</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#idp47890928">3. Programming the 8051 with SDCC</a></span></dt><dd><dl><dt><span class="section"><a href="#idp47893024">1. 8051 memory spaces</a></span></dt><dd><dl><dt><span class="section"><a href="#idp47894960">1.1. __data</a></span></dt><dt><span class="section"><a href="#idp47897136">1.2. __idata</a></span></dt><dt><span class="section"><a href="#idp47898576">1.3. __xdata</a></span></dt><dt><span class="section"><a href="#idp47899984">1.4. __pdata</a></span></dt><dt><span class="section"><a href="#idp47901488">1.5. __code</a></span></dt><dt><span class="section"><a href="#idp47902928">1.6. __bit</a></span></dt><dt><span class="section"><a href="#idp47904432">1.7. __sfr, __sfr16, __sfr32, __sbit</a></span></dt></dl></dd><dt><span class="section"><a href="#idp47905968">2. Function calls on the 8051</a></span></dt><dd><dl><dt><span class="section"><a href="#idp47907440">2.1. __reentrant functions</a></span></dt><dt><span class="section"><a href="#idp47909632">2.2. Non __reentrant functions</a></span></dt><dt><span class="section"><a href="#idp47911776">2.3. __interrupt functions</a></span></dt><dt><span class="section"><a href="#idp47913344">2.4. __critical functions and statements</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#idp47915408">4. Task functions</a></span></dt><dd><dl><dt><span class="section"><a href="#idp47916464">1. ao_add_task</a></span></dt><dt><span class="section"><a href="#idp47918720">2. ao_exit</a></span></dt><dt><span class="section"><a href="#idp53787440">3. ao_sleep</a></span></dt><dt><span class="section"><a href="#idp53791040">4. ao_wakeup</a></span></dt><dt><span class="section"><a href="#idp53794032">5. ao_alarm</a></span></dt><dt><span class="section"><a href="#idp53797312">6. ao_start_scheduler</a></span></dt><dt><span class="section"><a href="#idp53799280">7. ao_clock_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp53801248">5. Timer Functions</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53802752">1. ao_time</a></span></dt><dt><span class="section"><a href="#idp53804736">2. ao_delay</a></span></dt><dt><span class="section"><a href="#idp53806576">3. ao_timer_set_adc_interval</a></span></dt><dt><span class="section"><a href="#idp53808624">4. ao_timer_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp53810816">6. AltOS Mutexes</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53812688">1. ao_mutex_get</a></span></dt><dt><span class="section"><a href="#idp53814528">2. ao_mutex_put</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp53816496">7. DMA engine</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53819936">1. CC1111 DMA Engine</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53820608">1.1. ao_dma_alloc</a></span></dt><dt><span class="section"><a href="#idp53822784">1.2. ao_dma_set_transfer</a></span></dt><dt><span class="section"><a href="#idp53825056">1.3. ao_dma_start</a></span></dt><dt><span class="section"><a href="#idp53827072">1.4. ao_dma_trigger</a></span></dt><dt><span class="section"><a href="#idp53828912">1.5. ao_dma_abort</a></span></dt></dl></dd><dt><span class="section"><a href="#idp53831056">2. STM32L DMA Engine</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53831728">2.1. ao_dma_alloc</a></span></dt><dt><span class="section"><a href="#idp53833568">2.2. ao_dma_set_transfer</a></span></dt><dt><span class="section"><a href="#idp53835824">2.3. ao_dma_set_isr</a></span></dt><dt><span class="section"><a href="#idp53837904">2.4. ao_dma_start</a></span></dt><dt><span class="section"><a href="#idp53840208">2.5. ao_dma_done_transfer</a></span></dt><dt><span class="section"><a href="#idp53842192">2.6. ao_dma_abort</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#idp53844464">8. Stdio interface</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53845968">1. putchar</a></span></dt><dt><span class="section"><a href="#idp53847856">2. getchar</a></span></dt><dt><span class="section"><a href="#idp53849952">3. flush</a></span></dt><dt><span class="section"><a href="#idp53851984">4. ao_add_stdio</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp53856016">9. Command line interface</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53857424">1. ao_cmd_register</a></span></dt><dt><span class="section"><a href="#idp53866064">2. ao_cmd_lex</a></span></dt><dt><span class="section"><a href="#idp53868144">3. ao_cmd_put16</a></span></dt><dt><span class="section"><a href="#idp53869984">4. ao_cmd_put8</a></span></dt><dt><span class="section"><a href="#idp53871872">5. ao_cmd_white</a></span></dt><dt><span class="section"><a href="#idp53873936">6. ao_cmd_hex</a></span></dt><dt><span class="section"><a href="#idp53875984">7. ao_cmd_decimal</a></span></dt><dt><span class="section"><a href="#idp53878080">8. ao_match_word</a></span></dt><dt><span class="section"><a href="#idp53880160">9. ao_cmd_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp53882384">10. USB target device</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53884608">1. ao_usb_flush</a></span></dt><dt><span class="section"><a href="#idp53886752">2. ao_usb_putchar</a></span></dt><dt><span class="section"><a href="#idp53888928">3. ao_usb_pollchar</a></span></dt><dt><span class="section"><a href="#idp53891072">4. ao_usb_getchar</a></span></dt><dt><span class="section"><a href="#idp53893088">5. ao_usb_disable</a></span></dt><dt><span class="section"><a href="#idp53895920">6. ao_usb_enable</a></span></dt><dt><span class="section"><a href="#idp53898032">7. ao_usb_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp53900256">11. Serial peripherals</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53902272">1. ao_serial_getchar</a></span></dt><dt><span class="section"><a href="#idp53904304">2. ao_serial_putchar</a></span></dt><dt><span class="section"><a href="#idp53906272">3. ao_serial_drain</a></span></dt><dt><span class="section"><a href="#idp53908272">4. ao_serial_set_speed</a></span></dt><dt><span class="section"><a href="#idp53910304">5. ao_serial_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp53912496">12. CC1111 Radio peripheral</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53913168">1. Radio Introduction</a></span></dt><dt><span class="section"><a href="#idp53920288">2. ao_radio_set_telemetry</a></span></dt><dt><span class="section"><a href="#idp53922448">3. ao_radio_set_packet</a></span></dt><dt><span class="section"><a href="#idp53924608">4. ao_radio_set_rdf</a></span></dt><dt><span class="section"><a href="#idp53926848">5. ao_radio_idle</a></span></dt><dt><span class="section"><a href="#idp53928896">6. ao_radio_get</a></span></dt><dt><span class="section"><a href="#idp53930928">7. ao_radio_put</a></span></dt><dt><span class="section"><a href="#idp53932864">8. ao_radio_abort</a></span></dt><dt><span class="section"><a href="#idp53934928">9. Radio Telemetry</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53936224">9.1. ao_radio_send</a></span></dt><dt><span class="section"><a href="#idp53938448">9.2. ao_radio_recv</a></span></dt></dl></dd><dt><span class="section"><a href="#idp53940912">10. Radio Direction Finding</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53942064">10.1. ao_radio_rdf</a></span></dt></dl></dd><dt><span class="section"><a href="#idp53944208">11. Radio Packet Mode</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53945520">11.1. ao_packet_putchar</a></span></dt><dt><span class="section"><a href="#idp53947696">11.2. ao_packet_pollchar</a></span></dt><dt><span class="section"><a href="#idp53949776">11.3. ao_packet_slave_start</a></span></dt><dt><span class="section"><a href="#idp53951728">11.4. ao_packet_slave_stop</a></span></dt><dt><span class="section"><a href="#idp53953648">11.5. ao_packet_slave_init</a></span></dt><dt><span class="section"><a href="#idp53955680">11.6. ao_packet_master_init</a></span></dt></dl></dd></dl></dd></dl></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp47884288"></a>Chapter 1. Overview</h1></div></div></div><p>
+      AltOS is a operating system built for a variety of
+      microcontrollers used in Altus Metrum devices. It has a simple
+      porting layer for each CPU while providing a convenient
+      operating enviroment for the developer. AltOS currently
+      supports three different CPUs:
+      </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+           STM32L series from ST Microelectronics. This ARM Cortex-M3
+           based microcontroller offers low power consumption and a
+           wide variety of built-in peripherals. Altus Metrum uses
+           this in the TeleMega, MegaDongle and TeleLCO projects.
+         </p></li><li class="listitem"><p>
+           CC1111 from Texas Instruments. This device includes a
+           fabulous 10mW digital RF transceiver along with an
+           8051-compatible processor core and a range of
+           peripherals. This is used in the TeleMetrum, TeleMini,
+           TeleDongle and TeleFire projects which share the need for
+           a small microcontroller and an RF interface.
+         </p></li><li class="listitem"><p>
+           ATmega32U4 from Atmel. This 8-bit AVR microcontroller is
+           one of the many used to create Arduino boards. The 32U4
+           includes a USB interface, making it easy to connect to
+           other computers. Altus Metrum used this in prototypes of
+           the TeleScience and TelePyro boards; those have been
+           switched to the STM32L which is more capable and cheaper.
+         </p></li></ul></div><p>
+      Among the features of AltOS are:
+      </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Multi-tasking. While microcontrollers often don't
+         provide separate address spaces, it's often easier to write
+         code that operates in separate threads instead of tying
+         everything into one giant event loop.
          </p></li><li class="listitem"><p>Non-preemptive. This increases latency for thread
          switching but reduces the number of places where context
          switching can occur. It also simplifies the operating system
       </pre><p>
       As you can see, a long sequence of subsystems are initialized
       and then the scheduler is started.
-    </p></div><div class="chapter" title="Chapter 2. Programming the 8051 with SDCC"><div class="titlepage"><div><div><h2 class="title"><a name="idp1427552"></a>Chapter 2. Programming the 8051 with SDCC</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp1932896">1. 8051 memory spaces</a></span></dt><dd><dl><dt><span class="section"><a href="#idp1539448">1.1. __data</a></span></dt><dt><span class="section"><a href="#idp3243048">1.2. __idata</a></span></dt><dt><span class="section"><a href="#idp905104">1.3. __xdata</a></span></dt><dt><span class="section"><a href="#idp2815944">1.4. __pdata</a></span></dt><dt><span class="section"><a href="#idp2085816">1.5. __code</a></span></dt><dt><span class="section"><a href="#idp1611720">1.6. __bit</a></span></dt><dt><span class="section"><a href="#idp2143464">1.7. __sfr, __sfr16, __sfr32, __sbit</a></span></dt></dl></dd><dt><span class="section"><a href="#idp2034368">2. Function calls on the 8051</a></span></dt><dd><dl><dt><span class="section"><a href="#idp2827648">2.1. __reentrant functions</a></span></dt><dt><span class="section"><a href="#idp3350176">2.2. Non __reentrant functions</a></span></dt><dt><span class="section"><a href="#idp1644208">2.3. __interrupt functions</a></span></dt><dt><span class="section"><a href="#idp1931128">2.4. __critical functions and statements</a></span></dt></dl></dd></dl></div><p>
+    </p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp48916512"></a>Chapter 2. AltOS Porting Layer</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp48918016">1. Low-level CPU operations</a></span></dt><dd><dl><dt><span class="section"><a href="#idp48919248">1.1. ao_arch_block_interrupts/ao_arch_release_interrupts</a></span></dt><dt><span class="section"><a href="#idp48921296">1.2. ao_arch_save_regs, ao_arch_save_stack,
+       ao_arch_restore_stack</a></span></dt><dt><span class="section"><a href="#idp49830960">1.3. ao_arch_wait_interupt</a></span></dt></dl></dd><dt><span class="section"><a href="#idp49833504">2. GPIO operations</a></span></dt><dd><dl><dt><span class="section"><a href="#idp49834672">2.1. GPIO setup</a></span></dt><dt><span class="section"><a href="#idp49843888">2.2. Reading and writing GPIO pins</a></span></dt></dl></dd></dl></div><p>
+      AltOS provides a CPU-independent interface to various common
+      microcontroller subsystems, including GPIO pins, interrupts,
+      SPI, I2C, USB and asynchronous serial interfaces. By making
+      these CPU-independent, device drivers, generic OS and
+      application code can all be written that work on any supported
+      CPU. Many of the architecture abstraction interfaces are
+      prefixed with ao_arch.
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp48918016"></a>1. Low-level CPU operations</h2></div></div></div><p>
+       These primitive operations provide the abstraction needed to
+       run the multi-tasking framework while providing reliable
+       interrupt delivery.
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp48919248"></a>1.1. ao_arch_block_interrupts/ao_arch_release_interrupts</h3></div></div></div><pre class="programlisting">
+         static inline void
+         ao_arch_block_interrupts(void);
+         
+         static inline void
+         ao_arch_release_interrupts(void);
+       </pre><p>
+         These disable/enable interrupt delivery, they may not
+         discard any interrupts. Use these for sections of code that
+         must be atomic with respect to any code run from an
+         interrupt handler.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp48921296"></a>1.2. ao_arch_save_regs, ao_arch_save_stack,
+       ao_arch_restore_stack</h3></div></div></div><pre class="programlisting">
+         static inline void
+         ao_arch_save_regs(void);
+
+         static inline void
+         ao_arch_save_stack(void);
+
+         static inline void
+         ao_arch_restore_stack(void);
+       </pre><p>
+         These provide all of the support needed to switch between
+         tasks.. ao_arch_save_regs must save all CPU registers to the
+         current stack, including the interrupt enable
+         state. ao_arch_save_stack records the current stack location
+         in the current ao_task structure. ao_arch_restore_stack
+         switches back to the saved stack, restores all registers and
+         branches to the saved return address.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp49830960"></a>1.3. ao_arch_wait_interupt</h3></div></div></div><pre class="programlisting">
+         #define ao_arch_wait_interrupt()
+       </pre><p>
+         This stops the CPU, leaving clocks and interrupts
+         enabled. When an interrupt is received, this must wake up
+         and handle the interrupt. ao_arch_wait_interrupt is entered
+         with interrupts disabled to ensure that there is no gap
+         between determining that no task wants to run and idling the
+         CPU. It must sleep the CPU, process interrupts and then
+         disable interrupts again. If the CPU doesn't have any
+         reduced power mode, this must at the least allow pending
+         interrupts to be processed.
+       </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp49833504"></a>2. GPIO operations</h2></div></div></div><p>
+       These functions provide an abstract interface to configure and
+       manipulate GPIO pins.
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp49834672"></a>2.1. GPIO setup</h3></div></div></div><p>
+         These macros may be invoked at system initialization time to
+         configure pins as needed for system operation. One tricky
+         aspect is that some chips provide direct access to specific
+         GPIO pins while others only provide access to a whole
+         register full of pins. To support this, the GPIO macros
+         provide both port+bit and pin arguments. Simply define the
+         arguments needed for the target platform and leave the
+         others undefined.
+       </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="idp48923152"></a>2.1.1. ao_enable_output</h4></div></div></div><pre class="programlisting">
+           #define ao_enable_output(port, bit, pin, value)
+         </pre><p>
+           Set the specified port+bit (also called 'pin') for output,
+           initializing to the specified value. The macro must avoid
+           driving the pin with the opposite value if at all
+           possible.
+         </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="idp49838448"></a>2.1.2. ao_enable_input</h4></div></div></div><pre class="programlisting">
+           #define ao_enable_input(port, bit, mode)
+         </pre><p>
+           Sets the specified port/bit to be an input pin. 'mode' is
+           a combination of one or more of the following. Note that
+           some platforms may not support the desired mode. In that
+           case, the value will not be defined so that the program
+           will fail to compile.
+           </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+               AO_EXTI_MODE_PULL_UP. Apply a pull-up to the pin; a
+               disconnected pin will read as 1.
+</p></li><li class="listitem"><p>
+               AO_EXTI_MODE_PULL_DOWN. Apply a pull-down to the pin;
+               a disconnected pin will read as 0.
+</p></li><li class="listitem"><p>
+               0. Don't apply either a pull-up or pull-down. A
+               disconnected pin will read an undetermined value.
+</p></li></ul></div><p>
+         </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp49843888"></a>2.2. Reading and writing GPIO pins</h3></div></div></div><p>
+         These macros read and write individual GPIO pins.
+       </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="idp49844960"></a>2.2.1. ao_gpio_set</h4></div></div></div><pre class="programlisting">
+           #define ao_gpio_set(port, bit, pin, value)
+         </pre><p>
+           Sets the specified port/bit or pin to the indicated value
+         </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="idp47888592"></a>2.2.2. ao_gpio_get</h4></div></div></div><pre class="programlisting">
+           #define ao_gpio_get(port, bit, pin)
+         </pre><p>
+           Returns either 1 or 0 depending on whether the input to
+           the pin is high or low.
+         </p></div></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp47890928"></a>Chapter 3. Programming the 8051 with SDCC</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp47893024">1. 8051 memory spaces</a></span></dt><dd><dl><dt><span class="section"><a href="#idp47894960">1.1. __data</a></span></dt><dt><span class="section"><a href="#idp47897136">1.2. __idata</a></span></dt><dt><span class="section"><a href="#idp47898576">1.3. __xdata</a></span></dt><dt><span class="section"><a href="#idp47899984">1.4. __pdata</a></span></dt><dt><span class="section"><a href="#idp47901488">1.5. __code</a></span></dt><dt><span class="section"><a href="#idp47902928">1.6. __bit</a></span></dt><dt><span class="section"><a href="#idp47904432">1.7. __sfr, __sfr16, __sfr32, __sbit</a></span></dt></dl></dd><dt><span class="section"><a href="#idp47905968">2. Function calls on the 8051</a></span></dt><dd><dl><dt><span class="section"><a href="#idp47907440">2.1. __reentrant functions</a></span></dt><dt><span class="section"><a href="#idp47909632">2.2. Non __reentrant functions</a></span></dt><dt><span class="section"><a href="#idp47911776">2.3. __interrupt functions</a></span></dt><dt><span class="section"><a href="#idp47913344">2.4. __critical functions and statements</a></span></dt></dl></dd></dl></div><p>
       The 8051 is a primitive 8-bit processor, designed in the mists
       of time in as few transistors as possible. The architecture is
       highly irregular and includes several separate memory
       stack itself is of limited size. While SDCC papers over the
       instruction set, it is not completely able to hide the memory
       architecture from the application designer.
-    </p><div class="section" title="1. 8051 memory spaces"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp1932896"></a>1. 8051 memory spaces</h2></div></div></div><p>
+    </p><p>
+      When built on other architectures, the various SDCC-specific
+      symbols are #defined as empty strings so they don't affect the compiler.
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47893024"></a>1. 8051 memory spaces</h2></div></div></div><p>
        The __data/__xdata/__code memory spaces below were completely
        separate in the original 8051 design. In the cc1111, this
        isn't true&#8212;they all live in a single unified 64kB address
        is decorated with a memory space identifier which clutters the
        code but makes the resulting code far smaller and more
        efficient.
-      </p><div class="section" title="1.1. __data"><div class="titlepage"><div><div><h3 class="title"><a name="idp1539448"></a>1.1. __data</h3></div></div></div><p>
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47894960"></a>1.1. __data</h3></div></div></div><p>
          The 8051 can directly address these 128 bytes of
          memory. This makes them precious so they should be
          reserved for frequently addressed values. Oh, just to
          these registers located at 0x00 - 0x1F. AltOS uses only
          the first bank at 0x00 - 0x07, leaving the other 24
          bytes available for other data.
-       </p></div><div class="section" title="1.2. __idata"><div class="titlepage"><div><div><h3 class="title"><a name="idp3243048"></a>1.2. __idata</h3></div></div></div><p>
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47897136"></a>1.2. __idata</h3></div></div></div><p>
          There are an additional 128 bytes of internal memory
          that share the same address space as __data but which
          cannot be directly addressed. The stack normally
          occupies this space and so AltOS doesn't place any
          static storage here.
-       </p></div><div class="section" title="1.3. __xdata"><div class="titlepage"><div><div><h3 class="title"><a name="idp905104"></a>1.3. __xdata</h3></div></div></div><p>
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47898576"></a>1.3. __xdata</h3></div></div></div><p>
          This is additional general memory accessed through a
          single 16-bit address register. The CC1111F32 has 32kB
          of memory available here. Most program data should live
          in this memory space.
-       </p></div><div class="section" title="1.4. __pdata"><div class="titlepage"><div><div><h3 class="title"><a name="idp2815944"></a>1.4. __pdata</h3></div></div></div><p>
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47899984"></a>1.4. __pdata</h3></div></div></div><p>
          This is an alias for the first 256 bytes of __xdata
          memory, but uses a shorter addressing mode with
          single global 8-bit value for the high 8 bits of the
          address and any of several 8-bit registers for the low 8
          bits. AltOS uses a few bits of this memory, it should
          probably use more.
-       </p></div><div class="section" title="1.5. __code"><div class="titlepage"><div><div><h3 class="title"><a name="idp2085816"></a>1.5. __code</h3></div></div></div><p>
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47901488"></a>1.5. __code</h3></div></div></div><p>
          All executable code must live in this address space, but
          you can stick read-only data here too. It is addressed
          using the 16-bit address register and special 'code'
          access opcodes. Anything read-only should live in this space.
-       </p></div><div class="section" title="1.6. __bit"><div class="titlepage"><div><div><h3 class="title"><a name="idp1611720"></a>1.6. __bit</h3></div></div></div><p>
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47902928"></a>1.6. __bit</h3></div></div></div><p>
          The 8051 has 128 bits of bit-addressible memory that
          lives in the __data segment from 0x20 through
          0x2f. Special instructions access these bits
          in a single atomic operation. This isn't so much a
          separate address space as a special addressing mode for
          a few bytes in the __data segment.
-       </p></div><div class="section" title="1.7. __sfr, __sfr16, __sfr32, __sbit"><div class="titlepage"><div><div><h3 class="title"><a name="idp2143464"></a>1.7. __sfr, __sfr16, __sfr32, __sbit</h3></div></div></div><p>
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47904432"></a>1.7. __sfr, __sfr16, __sfr32, __sbit</h3></div></div></div><p>
          Access to physical registers in the device use this mode
          which declares the variable name, it's type and the
          address it lives at. No memory is allocated for these
          variables.
-       </p></div></div><div class="section" title="2. Function calls on the 8051"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp2034368"></a>2. Function calls on the 8051</h2></div></div></div><p>
+       </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47905968"></a>2. Function calls on the 8051</h2></div></div></div><p>
        Because stack addressing is expensive, and stack space
        limited, the default function call declaration in SDCC
        allocates all parameters and local variables in static global
        non-reentrant, and also consume space for parameters and
        locals even when they are not running. The benefit is smaller
        code and faster execution.
-      </p><div class="section" title="2.1. __reentrant functions"><div class="titlepage"><div><div><h3 class="title"><a name="idp2827648"></a>2.1. __reentrant functions</h3></div></div></div><p>
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47907440"></a>2.1. __reentrant functions</h3></div></div></div><p>
          All functions which are re-entrant, either due to recursion
          or due to a potential context switch while executing, should
          be marked as __reentrant so that their parameters and local
          invoked can also be marked as __reentrant. The resulting
          code will be larger, but the savings in memory are
          frequently worthwhile.
-       </p></div><div class="section" title="2.2. Non __reentrant functions"><div class="titlepage"><div><div><h3 class="title"><a name="idp3350176"></a>2.2. Non __reentrant functions</h3></div></div></div><p>
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47909632"></a>2.2. Non __reentrant functions</h3></div></div></div><p>
          All parameters and locals in non-reentrant functions can
          have data space decoration so that they are allocated in
          __xdata, __pdata or __data space as desired. This can avoid
          non-reentrant. Because of this, interrupt handlers must not
          invoke any library functions, including the multiply and
          divide code.
-       </p></div><div class="section" title="2.3. __interrupt functions"><div class="titlepage"><div><div><h3 class="title"><a name="idp1644208"></a>2.3. __interrupt functions</h3></div></div></div><p>
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47911776"></a>2.3. __interrupt functions</h3></div></div></div><p>
          Interrupt functions are declared with with an __interrupt
          decoration that includes the interrupt number. SDCC saves
          and restores all of the registers in these functions and
          uses the 'reti' instruction at the end so that they operate
          as stand-alone interrupt handlers. Interrupt functions may
          call the ao_wakeup function to wake AltOS tasks.
-       </p></div><div class="section" title="2.4. __critical functions and statements"><div class="titlepage"><div><div><h3 class="title"><a name="idp1931128"></a>2.4. __critical functions and statements</h3></div></div></div><p>
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47913344"></a>2.4. __critical functions and statements</h3></div></div></div><p>
          SDCC has built-in support for suspending interrupts during
          critical code. Functions marked as __critical will have
          interrupts suspended for the whole period of
          __critical which blocks interrupts during the execution of
          that statement. Keeping critical sections as short as
          possible is key to ensuring that interrupts are handled as
-         quickly as possible.
-       </p></div></div></div><div class="chapter" title="Chapter 3. Task functions"><div class="titlepage"><div><div><h2 class="title"><a name="idp2235720"></a>Chapter 3. Task functions</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp2145232">1. ao_add_task</a></span></dt><dt><span class="section"><a href="#idp49456">2. ao_exit</a></span></dt><dt><span class="section"><a href="#idp50328">3. ao_sleep</a></span></dt><dt><span class="section"><a href="#idp52064">4. ao_wakeup</a></span></dt><dt><span class="section"><a href="#idp5464">5. ao_alarm</a></span></dt><dt><span class="section"><a href="#idp7304">6. ao_start_scheduler</a></span></dt><dt><span class="section"><a href="#idp8360">7. ao_clock_init</a></span></dt></dl></div><p>
+         quickly as possible. AltOS doesn't use this form in shared
+         code as other compilers wouldn't know what to do. Use
+         ao_arch_block_interrupts and ao_arch_release_interrupts instead.
+       </p></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp47915408"></a>Chapter 4. Task functions</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp47916464">1. ao_add_task</a></span></dt><dt><span class="section"><a href="#idp47918720">2. ao_exit</a></span></dt><dt><span class="section"><a href="#idp53787440">3. ao_sleep</a></span></dt><dt><span class="section"><a href="#idp53791040">4. ao_wakeup</a></span></dt><dt><span class="section"><a href="#idp53794032">5. ao_alarm</a></span></dt><dt><span class="section"><a href="#idp53797312">6. ao_start_scheduler</a></span></dt><dt><span class="section"><a href="#idp53799280">7. ao_clock_init</a></span></dt></dl></div><p>
       This chapter documents how to create, destroy and schedule AltOS tasks.
-    </p><div class="section" title="1. ao_add_task"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp2145232"></a>1. ao_add_task</h2></div></div></div><pre class="programlisting">
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47916464"></a>1. ao_add_task</h2></div></div></div><pre class="programlisting">
        void
        ao_add_task(__xdata struct ao_task * task,
                    void (*start)(void),
        display), and the start address. It does not switch to the
        new task. 'start' must not ever return; there is no place
        to return to.
-      </p></div><div class="section" title="2. ao_exit"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp49456"></a>2. ao_exit</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47918720"></a>2. ao_exit</h2></div></div></div><pre class="programlisting">
        void
        ao_exit(void)
       </pre><p>
        This terminates the current task.
-      </p></div><div class="section" title="3. ao_sleep"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp50328"></a>3. ao_sleep</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53787440"></a>3. ao_sleep</h2></div></div></div><pre class="programlisting">
        void
        ao_sleep(__xdata void *wchan)
       </pre><p>
        it returns 1. This is the only way to switch to another task.
       </p><p>
        Because ao_wakeup wakes every task waiting on a particular
-       location, ao_sleep should be used in a loop that first
-       checks the desired condition, blocks in ao_sleep and then
-       rechecks until the condition is satisfied. If the
-       location may be signaled from an interrupt handler, the
-       code will need to block interrupts by using the __critical
-       label around the block of code. Here's a complete example:
+       location, ao_sleep should be used in a loop that first checks
+       the desired condition, blocks in ao_sleep and then rechecks
+       until the condition is satisfied. If the location may be
+       signaled from an interrupt handler, the code will need to
+       block interrupts around the block of code. Here's a complete
+       example:
        </p><pre class="programlisting">
-         __critical while (!ao_radio_done)
+         ao_arch_block_interrupts();
+         while (!ao_radio_done)
                  ao_sleep(&amp;ao_radio_done);
+         ao_arch_release_interrupts();
        </pre><p>
-      </p></div><div class="section" title="4. ao_wakeup"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp52064"></a>4. ao_wakeup</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53791040"></a>4. ao_wakeup</h2></div></div></div><pre class="programlisting">
        void
        ao_wakeup(__xdata void *wchan)
       </pre><p>
                  RFIF &amp;= ~RFIF_IM_DONE;
          }
        </pre><p>
-       Note that this need not be enclosed in __critical as the
-       ao_sleep block can only be run from normal mode, and so
-       this sequence can never be interrupted with execution of
-       the other sequence.
-      </p></div><div class="section" title="5. ao_alarm"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp5464"></a>5. ao_alarm</h2></div></div></div><pre class="programlisting">
+       Note that this need not block interrupts as the ao_sleep block
+       can only be run from normal mode, and so this sequence can
+       never be interrupted with execution of the other sequence.
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53794032"></a>5. ao_alarm</h2></div></div></div><pre class="programlisting">
        void
-       ao_alarm(uint16_t delay)
+       ao_alarm(uint16_t delay);
+
+       void
+       ao_clear_alarm(void);
       </pre><p>
-       Schedules an alarm to fire in at least 'delay' ticks. If
-       the task is asleep when the alarm fires, it will wakeup
-       and ao_sleep will return 1.
+       Schedules an alarm to fire in at least 'delay' ticks. If the
+       task is asleep when the alarm fires, it will wakeup and
+       ao_sleep will return 1. ao_clear_alarm resets any pending
+       alarm so that it doesn't fire at some arbitrary point in the
+       future.
        </p><pre class="programlisting">
          ao_alarm(ao_packet_master_delay);
-         __critical while (!ao_radio_dma_done)
+         ao_arch_block_interrupts();
+         while (!ao_radio_dma_done)
                  if (ao_sleep(&amp;ao_radio_dma_done) != 0)
                          ao_radio_abort();
+         ao_arch_release_interrupts();
+         ao_clear_alarm();
        </pre><p>
        In this example, a timeout is set before waiting for
        incoming radio data. If no data is received before the
        timeout fires, ao_sleep will return 1 and then this code
        will abort the radio receive operation.
-      </p></div><div class="section" title="6. ao_start_scheduler"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp7304"></a>6. ao_start_scheduler</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53797312"></a>6. ao_start_scheduler</h2></div></div></div><pre class="programlisting">
        void
-       ao_start_scheduler(void)
+       ao_start_scheduler(void);
       </pre><p>
        This is called from 'main' when the system is all
        initialized and ready to run. It will not return.
-      </p></div><div class="section" title="7. ao_clock_init"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp8360"></a>7. ao_clock_init</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53799280"></a>7. ao_clock_init</h2></div></div></div><pre class="programlisting">
        void
-       ao_clock_init(void)
+       ao_clock_init(void);
       </pre><p>
-       This turns on the external 48MHz clock then switches the
-       hardware to using it. This is required by many of the
-       internal devices like USB. It should be called by the
-       'main' function first, before initializing any of the
-       other devices in the system.
-      </p></div></div><div class="chapter" title="Chapter 4. Timer Functions"><div class="titlepage"><div><div><h2 class="title"><a name="idp9632"></a>Chapter 4. Timer Functions</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp10624">1. ao_time</a></span></dt><dt><span class="section"><a href="#idp11688">2. ao_delay</a></span></dt><dt><span class="section"><a href="#idp12688">3. ao_timer_set_adc_interval</a></span></dt><dt><span class="section"><a href="#idp748296">4. ao_timer_init</a></span></dt></dl></div><p>
-      AltOS sets up one of the cc1111 timers to run at 100Hz and
+       This initializes the main CPU clock and switches to it.
+      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp53801248"></a>Chapter 5. Timer Functions</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp53802752">1. ao_time</a></span></dt><dt><span class="section"><a href="#idp53804736">2. ao_delay</a></span></dt><dt><span class="section"><a href="#idp53806576">3. ao_timer_set_adc_interval</a></span></dt><dt><span class="section"><a href="#idp53808624">4. ao_timer_init</a></span></dt></dl></div><p>
+      AltOS sets up one of the CPU timers to run at 100Hz and
       exposes this tick as the fundemental unit of time. At each
       interrupt, AltOS increments the counter, and schedules any tasks
-      waiting for that time to pass, then fires off the ADC system to
+      waiting for that time to pass, then fires off the sensors to
       collect current data readings. Doing this from the ISR ensures
-      that the ADC values are sampled at a regular rate, independent
+      that the values are sampled at a regular rate, independent
       of any scheduling jitter.
-    </p><div class="section" title="1. ao_time"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp10624"></a>1. ao_time</h2></div></div></div><pre class="programlisting">
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53802752"></a>1. ao_time</h2></div></div></div><pre class="programlisting">
        uint16_t
        ao_time(void)
       </pre><p>
        Returns the current system tick count. Note that this is
        only a 16 bit value, and so it wraps every 655.36 seconds.
-      </p></div><div class="section" title="2. ao_delay"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp11688"></a>2. ao_delay</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53804736"></a>2. ao_delay</h2></div></div></div><pre class="programlisting">
        void
        ao_delay(uint16_t ticks);
       </pre><p>
        Suspend the current task for at least 'ticks' clock units.
-      </p></div><div class="section" title="3. ao_timer_set_adc_interval"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp12688"></a>3. ao_timer_set_adc_interval</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53806576"></a>3. ao_timer_set_adc_interval</h2></div></div></div><pre class="programlisting">
        void
        ao_timer_set_adc_interval(uint8_t interval);
       </pre><p>
        This sets the number of ticks between ADC samples. If set
        to 0, no ADC samples are generated. AltOS uses this to
        slow down the ADC sampling rate to save power.
-      </p></div><div class="section" title="4. ao_timer_init"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp748296"></a>4. ao_timer_init</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53808624"></a>4. ao_timer_init</h2></div></div></div><pre class="programlisting">
        void
        ao_timer_init(void)
       </pre><p>
-       This turns on the 100Hz tick using the CC1111 timer 1. It
-       is required for any of the time-based functions to
-       work. It should be called by 'main' before ao_start_scheduler.
-      </p></div></div><div class="chapter" title="Chapter 5. AltOS Mutexes"><div class="titlepage"><div><div><h2 class="title"><a name="idp749488"></a>Chapter 5. AltOS Mutexes</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp750840">1. ao_mutex_get</a></span></dt><dt><span class="section"><a href="#idp751936">2. ao_mutex_put</a></span></dt></dl></div><p>
+       This turns on the 100Hz tick. It is required for any of the
+       time-based functions to work. It should be called by 'main'
+       before ao_start_scheduler.
+      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp53810816"></a>Chapter 6. AltOS Mutexes</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp53812688">1. ao_mutex_get</a></span></dt><dt><span class="section"><a href="#idp53814528">2. ao_mutex_put</a></span></dt></dl></div><p>
       AltOS provides mutexes as a basic synchronization primitive. Each
       mutexes is simply a byte of memory which holds 0 when the mutex
       is free or the task id of the owning task when the mutex is
       owned. Mutex calls are checked&#8212;attempting to acquire a mutex
       already held by the current task or releasing a mutex not held
       by the current task will both cause a panic.
-    </p><div class="section" title="1. ao_mutex_get"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp750840"></a>1. ao_mutex_get</h2></div></div></div><pre class="programlisting">
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53812688"></a>1. ao_mutex_get</h2></div></div></div><pre class="programlisting">
        void
        ao_mutex_get(__xdata uint8_t *mutex);
       </pre><p>
        Acquires the specified mutex, blocking if the mutex is
        owned by another task.
-      </p></div><div class="section" title="2. ao_mutex_put"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp751936"></a>2. ao_mutex_put</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53814528"></a>2. ao_mutex_put</h2></div></div></div><pre class="programlisting">
        void
        ao_mutex_put(__xdata uint8_t *mutex);
       </pre><p>
        Releases the specified mutex, waking up all tasks waiting
        for it.
-      </p></div></div><div class="chapter" title="Chapter 6. CC1111 DMA engine"><div class="titlepage"><div><div><h2 class="title"><a name="idp753080"></a>Chapter 6. CC1111 DMA engine</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp754920">1. ao_dma_alloc</a></span></dt><dt><span class="section"><a href="#idp756296">2. ao_dma_set_transfer</a></span></dt><dt><span class="section"><a href="#idp757744">3. ao_dma_start</a></span></dt><dt><span class="section"><a href="#idp758808">4. ao_dma_trigger</a></span></dt><dt><span class="section"><a href="#idp759864">5. ao_dma_abort</a></span></dt></dl></div><p>
-      The CC1111 contains a useful bit of extra hardware in the form
-      of five programmable DMA engines. They can be configured to copy
-      data in memory, or between memory and devices (or even between
-      two devices). AltOS exposes a general interface to this hardware
-      and uses it to handle radio and SPI data.
+      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp53816496"></a>Chapter 7. DMA engine</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp53819936">1. CC1111 DMA Engine</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53820608">1.1. ao_dma_alloc</a></span></dt><dt><span class="section"><a href="#idp53822784">1.2. ao_dma_set_transfer</a></span></dt><dt><span class="section"><a href="#idp53825056">1.3. ao_dma_start</a></span></dt><dt><span class="section"><a href="#idp53827072">1.4. ao_dma_trigger</a></span></dt><dt><span class="section"><a href="#idp53828912">1.5. ao_dma_abort</a></span></dt></dl></dd><dt><span class="section"><a href="#idp53831056">2. STM32L DMA Engine</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53831728">2.1. ao_dma_alloc</a></span></dt><dt><span class="section"><a href="#idp53833568">2.2. ao_dma_set_transfer</a></span></dt><dt><span class="section"><a href="#idp53835824">2.3. ao_dma_set_isr</a></span></dt><dt><span class="section"><a href="#idp53837904">2.4. ao_dma_start</a></span></dt><dt><span class="section"><a href="#idp53840208">2.5. ao_dma_done_transfer</a></span></dt><dt><span class="section"><a href="#idp53842192">2.6. ao_dma_abort</a></span></dt></dl></dd></dl></div><p>
+      The CC1111 and STM32L both contain a useful bit of extra
+      hardware in the form of a number of programmable DMA
+      engines. They can be configured to copy data in memory, or
+      between memory and devices (or even between two devices). AltOS
+      exposes a general interface to this hardware and uses it to
+      handle both internal and external devices.
+    </p><p>
+      Because the CC1111 and STM32L DMA engines are different, the
+      interface to them is also different. As the DMA engines are
+      currently used to implement platform-specific drivers, this
+      isn't yet a problem.
     </p><p>
       Code using a DMA engine should allocate one at startup
       time. There is no provision to free them, and if you run out,
       from hardware to memory, that trigger event is supplied by the
       hardware device. When copying data from memory to hardware, the
       transfer is usually initiated by software.
-    </p><div class="section" title="1. ao_dma_alloc"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp754920"></a>1. ao_dma_alloc</h2></div></div></div><pre class="programlisting">
-       uint8_t
-       ao_dma_alloc(__xdata uint8_t *done)
-      </pre><p>
-       Allocates a DMA engine, returning the identifier. Whenever
-       this DMA engine completes a transfer. 'done' is cleared
-       when the DMA is started, and then receives the
-       AO_DMA_DONE bit on a successful transfer or the
-       AO_DMA_ABORTED bit if ao_dma_abort was called. Note that
-       it is possible to get both bits if the transfer was
-       aborted after it had finished.
-      </p></div><div class="section" title="2. ao_dma_set_transfer"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp756296"></a>2. ao_dma_set_transfer</h2></div></div></div><pre class="programlisting">
-       void
-       ao_dma_set_transfer(uint8_t id,
-                           void __xdata *srcaddr,
-                           void __xdata *dstaddr,
-                           uint16_t count,
-                           uint8_t cfg0,
-                           uint8_t cfg1)
-      </pre><p>
-       Initializes the specified dma engine to copy data
-       from 'srcaddr' to 'dstaddr' for 'count' units. cfg0 and
-       cfg1 are values directly out of the CC1111 documentation
-       and tell the DMA engine what the transfer unit size,
-       direction and step are.
-      </p></div><div class="section" title="3. ao_dma_start"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp757744"></a>3. ao_dma_start</h2></div></div></div><pre class="programlisting">
-       void
-       ao_dma_start(uint8_t id);
-      </pre><p>
-       Arm the specified DMA engine and await a signal from
-       either hardware or software to start transferring data.
-      </p></div><div class="section" title="4. ao_dma_trigger"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp758808"></a>4. ao_dma_trigger</h2></div></div></div><pre class="programlisting">
-       void
-       ao_dma_trigger(uint8_t id)
-      </pre><p>
-       Trigger the specified DMA engine to start copying data.
-      </p></div><div class="section" title="5. ao_dma_abort"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp759864"></a>5. ao_dma_abort</h2></div></div></div><pre class="programlisting">
-       void
-       ao_dma_abort(uint8_t id)
-      </pre><p>
-       Terminate any in-progress DMA transation, marking its
-       'done' variable with the AO_DMA_ABORTED bit.
-      </p></div></div><div class="chapter" title="Chapter 7. SDCC Stdio interface"><div class="titlepage"><div><div><h2 class="title"><a name="idp761032"></a>Chapter 7. SDCC Stdio interface</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp761992">1. putchar</a></span></dt><dt><span class="section"><a href="#idp763040">2. getchar</a></span></dt><dt><span class="section"><a href="#idp54808">3. flush</a></span></dt><dt><span class="section"><a href="#idp55872">4. ao_add_stdio</a></span></dt></dl></div><p>
-      AltOS offers a stdio interface over both USB and the RF packet
-      link. This provides for control of the device localy or
-      remotely. This is hooked up to the stdio functions in SDCC by
-      providing the standard putchar/getchar/flush functions. These
-      automatically multiplex the two available communication
-      channels; output is always delivered to the channel which
-      provided the most recent input.
-    </p><div class="section" title="1. putchar"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp761992"></a>1. putchar</h2></div></div></div><pre class="programlisting">
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53819936"></a>1. CC1111 DMA Engine</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53820608"></a>1.1. ao_dma_alloc</h3></div></div></div><pre class="programlisting">
+         uint8_t
+         ao_dma_alloc(__xdata uint8_t *done)
+       </pre><p>
+         Allocate a DMA engine, returning the identifier.  'done' is
+         cleared when the DMA is started, and then receives the
+         AO_DMA_DONE bit on a successful transfer or the
+         AO_DMA_ABORTED bit if ao_dma_abort was called. Note that it
+         is possible to get both bits if the transfer was aborted
+         after it had finished.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53822784"></a>1.2. ao_dma_set_transfer</h3></div></div></div><pre class="programlisting">
+         void
+         ao_dma_set_transfer(uint8_t id,
+         void __xdata *srcaddr,
+         void __xdata *dstaddr,
+         uint16_t count,
+         uint8_t cfg0,
+         uint8_t cfg1)
+       </pre><p>
+         Initializes the specified dma engine to copy data
+         from 'srcaddr' to 'dstaddr' for 'count' units. cfg0 and
+         cfg1 are values directly out of the CC1111 documentation
+         and tell the DMA engine what the transfer unit size,
+         direction and step are.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53825056"></a>1.3. ao_dma_start</h3></div></div></div><pre class="programlisting">
+         void
+         ao_dma_start(uint8_t id);
+       </pre><p>
+         Arm the specified DMA engine and await a signal from
+         either hardware or software to start transferring data.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53827072"></a>1.4. ao_dma_trigger</h3></div></div></div><pre class="programlisting">
+         void
+         ao_dma_trigger(uint8_t id)
+       </pre><p>
+         Trigger the specified DMA engine to start copying data.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53828912"></a>1.5. ao_dma_abort</h3></div></div></div><pre class="programlisting">
+         void
+         ao_dma_abort(uint8_t id)
+       </pre><p>
+         Terminate any in-progress DMA transation, marking its
+         'done' variable with the AO_DMA_ABORTED bit.
+       </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53831056"></a>2. STM32L DMA Engine</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53831728"></a>2.1. ao_dma_alloc</h3></div></div></div><pre class="programlisting">
+         uint8_t ao_dma_done[];
+
+         void
+         ao_dma_alloc(uint8_t index);
+       </pre><p>
+         Reserve a DMA engine for exclusive use by one
+         driver.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53833568"></a>2.2. ao_dma_set_transfer</h3></div></div></div><pre class="programlisting">
+         void
+         ao_dma_set_transfer(uint8_t id,
+         void *peripheral,
+         void *memory,
+         uint16_t count,
+         uint32_t ccr);
+       </pre><p>
+         Initializes the specified dma engine to copy data between
+         'peripheral' and 'memory' for 'count' units. 'ccr' is a
+         value directly out of the STM32L documentation and tells the
+         DMA engine what the transfer unit size, direction and step
+         are.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53835824"></a>2.3. ao_dma_set_isr</h3></div></div></div><pre class="programlisting">
+         void
+         ao_dma_set_isr(uint8_t index, void (*isr)(int))
+       </pre><p>
+         This sets a function to be called when the DMA transfer
+         completes in lieu of setting the ao_dma_done bits. Use this
+         when some work needs to be done when the DMA finishes that
+         cannot wait until user space resumes.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53837904"></a>2.4. ao_dma_start</h3></div></div></div><pre class="programlisting">
+         void
+         ao_dma_start(uint8_t id);
+       </pre><p>
+         Arm the specified DMA engine and await a signal from either
+         hardware or software to start transferring data.
+         'ao_dma_done[index]' is cleared when the DMA is started, and
+         then receives the AO_DMA_DONE bit on a successful transfer
+         or the AO_DMA_ABORTED bit if ao_dma_abort was called. Note
+         that it is possible to get both bits if the transfer was
+         aborted after it had finished.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53840208"></a>2.5. ao_dma_done_transfer</h3></div></div></div><pre class="programlisting">
+         void
+         ao_dma_done_transfer(uint8_t id);
+       </pre><p>
+         Signals that a specific DMA engine is done being used. This
+         allows multiple drivers to use the same DMA engine safely.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53842192"></a>2.6. ao_dma_abort</h3></div></div></div><pre class="programlisting">
+         void
+         ao_dma_abort(uint8_t id)
+       </pre><p>
+         Terminate any in-progress DMA transation, marking its
+         'done' variable with the AO_DMA_ABORTED bit.
+       </p></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp53844464"></a>Chapter 8. Stdio interface</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp53845968">1. putchar</a></span></dt><dt><span class="section"><a href="#idp53847856">2. getchar</a></span></dt><dt><span class="section"><a href="#idp53849952">3. flush</a></span></dt><dt><span class="section"><a href="#idp53851984">4. ao_add_stdio</a></span></dt></dl></div><p>
+      AltOS offers a stdio interface over USB, serial and the RF
+      packet link. This provides for control of the device localy or
+      remotely. This is hooked up to the stdio functions by providing
+      the standard putchar/getchar/flush functions. These
+      automatically multiplex the available communication channels;
+      output is always delivered to the channel which provided the
+      most recent input.
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53845968"></a>1. putchar</h2></div></div></div><pre class="programlisting">
        void
        putchar(char c)
       </pre><p>
        Delivers a single character to the current console
        device.
-      </p></div><div class="section" title="2. getchar"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp763040"></a>2. getchar</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53847856"></a>2. getchar</h2></div></div></div><pre class="programlisting">
        char
        getchar(void)
       </pre><p>
        console devices. The current console device is set to
        that which delivered this character. This blocks until
        a character is available.
-      </p></div><div class="section" title="3. flush"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp54808"></a>3. flush</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53849952"></a>3. flush</h2></div></div></div><pre class="programlisting">
        void
        flush(void)
       </pre><p>
        Flushes the current console device output buffer. Any
        pending characters will be delivered to the target device.
-      xo         </p></div><div class="section" title="4. ao_add_stdio"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp55872"></a>4. ao_add_stdio</h2></div></div></div><pre class="programlisting">
+      xo         </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53851984"></a>4. ao_add_stdio</h2></div></div></div><pre class="programlisting">
        void
        ao_add_stdio(char (*pollchar)(void),
                           void (*putchar)(char),
        'flush' forces the output buffer to be flushed. It may
        block until the buffer is delivered, but it is not
        required to do so.
-      </p></div></div><div class="chapter" title="Chapter 8. Command line interface"><div class="titlepage"><div><div><h2 class="title"><a name="idp58336"></a>Chapter 8. Command line interface</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp59184">1. ao_cmd_register</a></span></dt><dt><span class="section"><a href="#idp64112">2. ao_cmd_lex</a></span></dt><dt><span class="section"><a href="#idp65264">3. ao_cmd_put16</a></span></dt><dt><span class="section"><a href="#idp66304">4. ao_cmd_put8</a></span></dt><dt><span class="section"><a href="#idp67336">5. ao_cmd_white</a></span></dt><dt><span class="section"><a href="#idp68488">6. ao_cmd_hex</a></span></dt><dt><span class="section"><a href="#idp69616">7. ao_cmd_decimal</a></span></dt><dt><span class="section"><a href="#idp70800">8. ao_match_word</a></span></dt><dt><span class="section"><a href="#idp72032">9. ao_cmd_init</a></span></dt></dl></div><p>
+      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp53856016"></a>Chapter 9. Command line interface</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp53857424">1. ao_cmd_register</a></span></dt><dt><span class="section"><a href="#idp53866064">2. ao_cmd_lex</a></span></dt><dt><span class="section"><a href="#idp53868144">3. ao_cmd_put16</a></span></dt><dt><span class="section"><a href="#idp53869984">4. ao_cmd_put8</a></span></dt><dt><span class="section"><a href="#idp53871872">5. ao_cmd_white</a></span></dt><dt><span class="section"><a href="#idp53873936">6. ao_cmd_hex</a></span></dt><dt><span class="section"><a href="#idp53875984">7. ao_cmd_decimal</a></span></dt><dt><span class="section"><a href="#idp53878080">8. ao_match_word</a></span></dt><dt><span class="section"><a href="#idp53880160">9. ao_cmd_init</a></span></dt></dl></div><p>
       AltOS includes a simple command line parser which is hooked up
       to the stdio interfaces permitting remote control of the device
-      over USB or the RF link as desired. Each command uses a single
-      character to invoke it, the remaining characters on the line are
-      available as parameters to the command.
-    </p><div class="section" title="1. ao_cmd_register"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp59184"></a>1. ao_cmd_register</h2></div></div></div><pre class="programlisting">
+      over USB, serial or the RF link as desired. Each command uses a
+      single character to invoke it, the remaining characters on the
+      line are available as parameters to the command.
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53857424"></a>1. ao_cmd_register</h2></div></div></div><pre class="programlisting">
        void
        ao_cmd_register(__code struct ao_cmds *cmds)
       </pre><p>
        '?' command. Syntax errors found while executing 'func'
        should be indicated by modifying the global ao_cmd_status
        variable with one of the following values:
-       </p><div class="variablelist"><dl><dt></dt><dd><p>
+       </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">ao_cmd_success</span></dt><dd><p>
                The command was parsed successfully. There is no
                need to assign this value, it is the default.
-             </p></dd><dt></dt><dd><p>
+             </p></dd><dt><span class="term">ao_cmd_lex_error</span></dt><dd><p>
                A token in the line was invalid, such as a number
                containing invalid characters. The low-level
                lexing functions already assign this value as needed.
-             </p></dd><dt></dt><dd><p>
+             </p></dd><dt><span class="term">ao_syntax_error</span></dt><dd><p>
                The command line is invalid for some reason other
                than invalid tokens.
              </p></dd></dl></div><p>
-      </p></div><div class="section" title="2. ao_cmd_lex"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp64112"></a>2. ao_cmd_lex</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53866064"></a>2. ao_cmd_lex</h2></div></div></div><pre class="programlisting">
        void
        ao_cmd_lex(void);
       </pre><p>
        This gets the next character out of the command line
        buffer and sticks it into ao_cmd_lex_c. At the end of the
        line, ao_cmd_lex_c will get a newline ('\n') character.
-      </p></div><div class="section" title="3. ao_cmd_put16"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp65264"></a>3. ao_cmd_put16</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53868144"></a>3. ao_cmd_put16</h2></div></div></div><pre class="programlisting">
        void
        ao_cmd_put16(uint16_t v);
       </pre><p>
        Writes 'v' as four hexadecimal characters.
-      </p></div><div class="section" title="4. ao_cmd_put8"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp66304"></a>4. ao_cmd_put8</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53869984"></a>4. ao_cmd_put8</h2></div></div></div><pre class="programlisting">
        void
        ao_cmd_put8(uint8_t v);
       </pre><p>
        Writes 'v' as two hexadecimal characters.
-      </p></div><div class="section" title="5. ao_cmd_white"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp67336"></a>5. ao_cmd_white</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53871872"></a>5. ao_cmd_white</h2></div></div></div><pre class="programlisting">
        void
        ao_cmd_white(void)
       </pre><p>
        This skips whitespace by calling ao_cmd_lex while
        ao_cmd_lex_c is either a space or tab. It does not skip
        any characters if ao_cmd_lex_c already non-white.
-      </p></div><div class="section" title="6. ao_cmd_hex"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp68488"></a>6. ao_cmd_hex</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53873936"></a>6. ao_cmd_hex</h2></div></div></div><pre class="programlisting">
        void
        ao_cmd_hex(void)
       </pre><p>
        This reads a 16-bit hexadecimal value from the command
        line with optional leading whitespace. The resulting value
        is stored in ao_cmd_lex_i;
-      </p></div><div class="section" title="7. ao_cmd_decimal"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp69616"></a>7. ao_cmd_decimal</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53875984"></a>7. ao_cmd_decimal</h2></div></div></div><pre class="programlisting">
        void
        ao_cmd_decimal(void)
       </pre><p>
        line with optional leading whitespace. The resulting value
        is stored in ao_cmd_lex_u32 and the low 16 bits are stored
        in ao_cmd_lex_i;
-      </p></div><div class="section" title="8. ao_match_word"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp70800"></a>8. ao_match_word</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53878080"></a>8. ao_match_word</h2></div></div></div><pre class="programlisting">
        uint8_t
        ao_match_word(__code char *word)
       </pre><p>
        line. It does not skip leading white space. If 'word' is
        found, then 1 is returned. Otherwise, ao_cmd_status is set to
        ao_cmd_syntax_error and 0 is returned.
-      </p></div><div class="section" title="9. ao_cmd_init"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp72032"></a>9. ao_cmd_init</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53880160"></a>9. ao_cmd_init</h2></div></div></div><pre class="programlisting">
        void
        ao_cmd_init(void
       </pre><p>
        Initializes the command system, setting up the built-in
        commands and adding a task to run the command processing
        loop. It should be called by 'main' before ao_start_scheduler.
-      </p></div></div><div class="chapter" title="Chapter 9. CC1111 USB target device"><div class="titlepage"><div><div><h2 class="title"><a name="idp73256"></a>Chapter 9. CC1111 USB target device</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp74736">1. ao_usb_flush</a></span></dt><dt><span class="section"><a href="#idp75960">2. ao_usb_putchar</a></span></dt><dt><span class="section"><a href="#idp77216">3. ao_usb_pollchar</a></span></dt><dt><span class="section"><a href="#idp3450240">4. ao_usb_getchar</a></span></dt><dt><span class="section"><a href="#idp3451248">5. ao_usb_disable</a></span></dt><dt><span class="section"><a href="#idp3452920">6. ao_usb_enable</a></span></dt><dt><span class="section"><a href="#idp3454056">7. ao_usb_init</a></span></dt></dl></div><p>
-      The CC1111 contains a full-speed USB target device. It can be
+      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp53882384"></a>Chapter 10. USB target device</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp53884608">1. ao_usb_flush</a></span></dt><dt><span class="section"><a href="#idp53886752">2. ao_usb_putchar</a></span></dt><dt><span class="section"><a href="#idp53888928">3. ao_usb_pollchar</a></span></dt><dt><span class="section"><a href="#idp53891072">4. ao_usb_getchar</a></span></dt><dt><span class="section"><a href="#idp53893088">5. ao_usb_disable</a></span></dt><dt><span class="section"><a href="#idp53895920">6. ao_usb_enable</a></span></dt><dt><span class="section"><a href="#idp53898032">7. ao_usb_init</a></span></dt></dl></div><p>
+      AltOS contains a full-speed USB target device driver. It can be
       programmed to offer any kind of USB target, but to simplify
       interactions with a variety of operating systems, AltOS provides
       only a single target device profile, that of a USB modem which
       interface if desired, offering control of the device over the
       USB link. Alternatively, the functions can be accessed directly
       to provide for USB-specific I/O.
-    </p><div class="section" title="1. ao_usb_flush"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp74736"></a>1. ao_usb_flush</h2></div></div></div><pre class="programlisting">
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53884608"></a>1. ao_usb_flush</h2></div></div></div><pre class="programlisting">
        void
        ao_usb_flush(void);
       </pre><p>
        to be delivered to the USB host if there is pending data,
        or if the last IN packet was full to indicate to the host
        that there isn't any more pending data available.
-      </p></div><div class="section" title="2. ao_usb_putchar"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp75960"></a>2. ao_usb_putchar</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53886752"></a>2. ao_usb_putchar</h2></div></div></div><pre class="programlisting">
        void
        ao_usb_putchar(char c);
       </pre><p>
        adds a byte to the pending IN packet for delivery to the
        USB host. If the USB packet is full, this queues the 'IN'
        packet for delivery.
-      </p></div><div class="section" title="3. ao_usb_pollchar"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp77216"></a>3. ao_usb_pollchar</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53888928"></a>3. ao_usb_pollchar</h2></div></div></div><pre class="programlisting">
        char
        ao_usb_pollchar(void);
       </pre><p>
        packet received, this returns AO_READ_AGAIN. Otherwise, it
        returns the next character, reporting to the host that it
        is ready for more data when the last character is gone.
-      </p></div><div class="section" title="4. ao_usb_getchar"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3450240"></a>4. ao_usb_getchar</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53891072"></a>4. ao_usb_getchar</h2></div></div></div><pre class="programlisting">
        char
        ao_usb_getchar(void);
       </pre><p>
        This uses ao_pollchar to receive the next character,
        blocking while ao_pollchar returns AO_READ_AGAIN.
-      </p></div><div class="section" title="5. ao_usb_disable"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3451248"></a>5. ao_usb_disable</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53893088"></a>5. ao_usb_disable</h2></div></div></div><pre class="programlisting">
        void
        ao_usb_disable(void);
       </pre><p>
        after disabling the USB device, it's likely that the cable
        will need to be disconnected and reconnected before it
        will work again.
-      </p></div><div class="section" title="6. ao_usb_enable"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3452920"></a>6. ao_usb_enable</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53895920"></a>6. ao_usb_enable</h2></div></div></div><pre class="programlisting">
        void
        ao_usb_enable(void);
       </pre><p>
        disabled. See the note above about needing to physically
        remove and re-insert the cable to get the host to
        re-initialize the USB link.
-      </p></div><div class="section" title="7. ao_usb_init"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3454056"></a>7. ao_usb_init</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53898032"></a>7. ao_usb_init</h2></div></div></div><pre class="programlisting">
        void
        ao_usb_init(void);
       </pre><p>
        the control end point and adds the usb I/O functions to
        the stdio system. Call this from main before
        ao_start_scheduler.
-      </p></div></div><div class="chapter" title="Chapter 10. CC1111 Serial peripheral"><div class="titlepage"><div><div><h2 class="title"><a name="idp3455248"></a>Chapter 10. CC1111 Serial peripheral</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp3456504">1. ao_serial_getchar</a></span></dt><dt><span class="section"><a href="#idp3457568">2. ao_serial_putchar</a></span></dt><dt><span class="section"><a href="#idp3458624">3. ao_serial_drain</a></span></dt><dt><span class="section"><a href="#idp3459664">4. ao_serial_set_speed</a></span></dt><dt><span class="section"><a href="#idp3460792">5. ao_serial_init</a></span></dt></dl></div><p>
+      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp53900256"></a>Chapter 11. Serial peripherals</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp53902272">1. ao_serial_getchar</a></span></dt><dt><span class="section"><a href="#idp53904304">2. ao_serial_putchar</a></span></dt><dt><span class="section"><a href="#idp53906272">3. ao_serial_drain</a></span></dt><dt><span class="section"><a href="#idp53908272">4. ao_serial_set_speed</a></span></dt><dt><span class="section"><a href="#idp53910304">5. ao_serial_init</a></span></dt></dl></div><p>
       The CC1111 provides two USART peripherals. AltOS uses one for
       asynch serial data, generally to communicate with a GPS device,
       and the other for a SPI bus. The UART is configured to operate
     </p><p>
       To prevent loss of data, AltOS provides receive and transmit
       fifos of 32 characters each.
-    </p><div class="section" title="1. ao_serial_getchar"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3456504"></a>1. ao_serial_getchar</h2></div></div></div><pre class="programlisting">
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53902272"></a>1. ao_serial_getchar</h2></div></div></div><pre class="programlisting">
        char
        ao_serial_getchar(void);
       </pre><p>
        Returns the next character from the receive fifo, blocking
        until a character is received if the fifo is empty.
-      </p></div><div class="section" title="2. ao_serial_putchar"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3457568"></a>2. ao_serial_putchar</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53904304"></a>2. ao_serial_putchar</h2></div></div></div><pre class="programlisting">
        void
        ao_serial_putchar(char c);
       </pre><p>
        Adds a character to the transmit fifo, blocking if the
        fifo is full. Starts transmitting characters.
-      </p></div><div class="section" title="3. ao_serial_drain"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3458624"></a>3. ao_serial_drain</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53906272"></a>3. ao_serial_drain</h2></div></div></div><pre class="programlisting">
        void
        ao_serial_drain(void);
       </pre><p>
        Blocks until the transmit fifo is empty. Used internally
        when changing serial speeds.
-      </p></div><div class="section" title="4. ao_serial_set_speed"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3459664"></a>4. ao_serial_set_speed</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53908272"></a>4. ao_serial_set_speed</h2></div></div></div><pre class="programlisting">
        void
        ao_serial_set_speed(uint8_t speed);
       </pre><p>
        AO_SERIAL_SPEED_4800, AO_SERIAL_SPEED_9600 or
        AO_SERIAL_SPEED_57600. This first flushes the transmit
        fifo using ao_serial_drain.
-      </p></div><div class="section" title="5. ao_serial_init"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3460792"></a>5. ao_serial_init</h2></div></div></div><pre class="programlisting">
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53910304"></a>5. ao_serial_init</h2></div></div></div><pre class="programlisting">
        void
        ao_serial_init(void)
       </pre><p>
        Initializes the serial peripheral. Call this from 'main'
        before jumping to ao_start_scheduler. The default speed
        setting is AO_SERIAL_SPEED_4800.
-      </p></div></div><div class="chapter" title="Chapter 11. CC1111 Radio peripheral"><div class="titlepage"><div><div><h2 class="title"><a name="idp3461952"></a>Chapter 11. CC1111 Radio peripheral</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp3466304">1. ao_radio_set_telemetry</a></span></dt><dt><span class="section"><a href="#idp3467552">2. ao_radio_set_packet</a></span></dt><dt><span class="section"><a href="#idp3468800">3. ao_radio_set_rdf</a></span></dt><dt><span class="section"><a href="#idp3470080">4. ao_radio_idle</a></span></dt><dt><span class="section"><a href="#idp3471168">5. ao_radio_get</a></span></dt><dt><span class="section"><a href="#idp3472232">6. ao_radio_put</a></span></dt><dt><span class="section"><a href="#idp3473200">7. ao_radio_abort</a></span></dt><dt><span class="section"><a href="#idp3474720">8. ao_radio_send</a></span></dt><dt><span class="section"><a href="#idp3475976">9. ao_radio_recv</a></span></dt><dt><span class="section"><a href="#idp3477624">10. ao_radio_rdf</a></span></dt><dt><span class="section"><a href="#idp3479128">11. ao_packet_putchar</a></span></dt><dt><span class="section"><a href="#idp3480400">12. ao_packet_pollchar</a></span></dt><dt><span class="section"><a href="#idp3481520">13. ao_packet_slave_start</a></span></dt><dt><span class="section"><a href="#idp3482560">14. ao_packet_slave_stop</a></span></dt><dt><span class="section"><a href="#idp3483568">15. ao_packet_slave_init</a></span></dt><dt><span class="section"><a href="#idp3484688">16. ao_packet_master_init</a></span></dt></dl></div><p>
-      The CC1111 radio transceiver sends and receives digital packets
-      with forward error correction and detection. The AltOS driver is
-      fairly specific to the needs of the TeleMetrum and TeleDongle
-      devices, using it for other tasks may require customization of
-      the driver itself. There are three basic modes of operation:
-      </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
-           Telemetry mode. In this mode, TeleMetrum transmits telemetry
-           frames at a fixed rate. The frames are of fixed size. This
-           is strictly a one-way communication from TeleMetrum to
-           TeleDongle.
-         </p></li><li class="listitem"><p>
-           Packet mode. In this mode, the radio is used to create a
-           reliable duplex byte stream between TeleDongle and
-           TeleMetrum. This is an asymmetrical protocol with
-           TeleMetrum only transmitting in response to a packet sent
-           from TeleDongle. Thus getting data from TeleMetrum to
-           TeleDongle requires polling. The polling rate is adaptive,
-           when no data has been received for a while, the rate slows
-           down. The packets are checked at both ends and invalid
-           data are ignored.
-         </p><p>
-           On the TeleMetrum side, the packet link is hooked into the
-           stdio mechanism, providing an alternate data path for the
-           command processor. It is enabled when the unit boots up in
-           'idle' mode.
-         </p><p>
-           On the TeleDongle side, the packet link is enabled with a
-           command; data from the stdio package is forwarded over the
-           packet link providing a connection from the USB command
-           stream to the remote TeleMetrum device.
-         </p></li><li class="listitem"><p>
-           Radio Direction Finding mode. In this mode, TeleMetrum
-           constructs a special packet that sounds like an audio tone
-           when received by a conventional narrow-band FM
-           receiver. This is designed to provide a beacon to track
-           the device when other location mechanisms fail.
-         </p></li></ol></div><p>
-    </p><div class="section" title="1. ao_radio_set_telemetry"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3466304"></a>1. ao_radio_set_telemetry</h2></div></div></div><pre class="programlisting">
+      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp53912496"></a>Chapter 12. CC1111 Radio peripheral</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp53913168">1. Radio Introduction</a></span></dt><dt><span class="section"><a href="#idp53920288">2. ao_radio_set_telemetry</a></span></dt><dt><span class="section"><a href="#idp53922448">3. ao_radio_set_packet</a></span></dt><dt><span class="section"><a href="#idp53924608">4. ao_radio_set_rdf</a></span></dt><dt><span class="section"><a href="#idp53926848">5. ao_radio_idle</a></span></dt><dt><span class="section"><a href="#idp53928896">6. ao_radio_get</a></span></dt><dt><span class="section"><a href="#idp53930928">7. ao_radio_put</a></span></dt><dt><span class="section"><a href="#idp53932864">8. ao_radio_abort</a></span></dt><dt><span class="section"><a href="#idp53934928">9. Radio Telemetry</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53936224">9.1. ao_radio_send</a></span></dt><dt><span class="section"><a href="#idp53938448">9.2. ao_radio_recv</a></span></dt></dl></dd><dt><span class="section"><a href="#idp53940912">10. Radio Direction Finding</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53942064">10.1. ao_radio_rdf</a></span></dt></dl></dd><dt><span class="section"><a href="#idp53944208">11. Radio Packet Mode</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53945520">11.1. ao_packet_putchar</a></span></dt><dt><span class="section"><a href="#idp53947696">11.2. ao_packet_pollchar</a></span></dt><dt><span class="section"><a href="#idp53949776">11.3. ao_packet_slave_start</a></span></dt><dt><span class="section"><a href="#idp53951728">11.4. ao_packet_slave_stop</a></span></dt><dt><span class="section"><a href="#idp53953648">11.5. ao_packet_slave_init</a></span></dt><dt><span class="section"><a href="#idp53955680">11.6. ao_packet_master_init</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53913168"></a>1. Radio Introduction</h2></div></div></div><p>
+       The CC1111 radio transceiver sends and receives digital packets
+       with forward error correction and detection. The AltOS driver is
+       fairly specific to the needs of the TeleMetrum and TeleDongle
+       devices, using it for other tasks may require customization of
+       the driver itself. There are three basic modes of operation:
+       </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+             Telemetry mode. In this mode, TeleMetrum transmits telemetry
+             frames at a fixed rate. The frames are of fixed size. This
+             is strictly a one-way communication from TeleMetrum to
+             TeleDongle.
+           </p></li><li class="listitem"><p>
+             Packet mode. In this mode, the radio is used to create a
+             reliable duplex byte stream between TeleDongle and
+             TeleMetrum. This is an asymmetrical protocol with
+             TeleMetrum only transmitting in response to a packet sent
+             from TeleDongle. Thus getting data from TeleMetrum to
+             TeleDongle requires polling. The polling rate is adaptive,
+             when no data has been received for a while, the rate slows
+             down. The packets are checked at both ends and invalid
+             data are ignored.
+           </p><p>
+             On the TeleMetrum side, the packet link is hooked into the
+             stdio mechanism, providing an alternate data path for the
+             command processor. It is enabled when the unit boots up in
+             'idle' mode.
+           </p><p>
+             On the TeleDongle side, the packet link is enabled with a
+             command; data from the stdio package is forwarded over the
+             packet link providing a connection from the USB command
+             stream to the remote TeleMetrum device.
+           </p></li><li class="listitem"><p>
+             Radio Direction Finding mode. In this mode, TeleMetrum
+             constructs a special packet that sounds like an audio tone
+             when received by a conventional narrow-band FM
+             receiver. This is designed to provide a beacon to track
+             the device when other location mechanisms fail.
+           </p></li></ol></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53920288"></a>2. ao_radio_set_telemetry</h2></div></div></div><pre class="programlisting">
          void
          ao_radio_set_telemetry(void);
        </pre><p>
          other RF parameters. It does not include the base frequency
          or channel though. Those are set at the time of transmission
          or reception, in case the values are changed by the user.
-       </p></div><div class="section" title="2. ao_radio_set_packet"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3467552"></a>2. ao_radio_set_packet</h2></div></div></div><pre class="programlisting">
+       </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53922448"></a>3. ao_radio_set_packet</h2></div></div></div><pre class="programlisting">
          void
          ao_radio_set_packet(void);
        </pre><p>
          parameters. It does not include the base frequency or
          channel though. Those are set at the time of transmission or
          reception, in case the values are changed by the user.
-       </p></div><div class="section" title="3. ao_radio_set_rdf"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3468800"></a>3. ao_radio_set_rdf</h2></div></div></div><pre class="programlisting">
+       </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53924608"></a>4. ao_radio_set_rdf</h2></div></div></div><pre class="programlisting">
          void
          ao_radio_set_rdf(void);
        </pre><p>
          and data whitening logic is turned off so that the resulting
          modulation is received as a 1kHz tone by a conventional 70cm
          FM audio receiver.
-       </p></div><div class="section" title="4. ao_radio_idle"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3470080"></a>4. ao_radio_idle</h2></div></div></div><pre class="programlisting">
+       </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53926848"></a>5. ao_radio_idle</h2></div></div></div><pre class="programlisting">
          void
          ao_radio_idle(void);
        </pre><p>
          Sets the radio device to idle mode, waiting until it reaches
          that state. This will terminate any in-progress transmit or
          receive operation.
-       </p></div><div class="section" title="5. ao_radio_get"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3471168"></a>5. ao_radio_get</h2></div></div></div><pre class="programlisting">
+       </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53928896"></a>6. ao_radio_get</h2></div></div></div><pre class="programlisting">
          void
          ao_radio_get(void);
        </pre><p>
          Acquires the radio mutex and then configures the radio
          frequency using the global radio calibration and channel
          values.
-       </p></div><div class="section" title="6. ao_radio_put"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3472232"></a>6. ao_radio_put</h2></div></div></div><pre class="programlisting">
+       </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53930928"></a>7. ao_radio_put</h2></div></div></div><pre class="programlisting">
          void
          ao_radio_put(void);
        </pre><p>
          Releases the radio mutex.
-       </p></div><div class="section" title="7. ao_radio_abort"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3473200"></a>7. ao_radio_abort</h2></div></div></div><pre class="programlisting">
+       </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53932864"></a>8. ao_radio_abort</h2></div></div></div><pre class="programlisting">
          void
          ao_radio_abort(void);
        </pre><p>
          Aborts any transmission or reception process by aborting the
          associated DMA object and calling ao_radio_idle to terminate
          the radio operation.
-       </p></div><p>
-      In telemetry mode, you can send or receive a telemetry
-      packet. The data from receiving a packet also includes the RSSI
-      and status values supplied by the receiver. These are added
-      after the telemetry data.
-    </p><div class="section" title="8. ao_radio_send"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3474720"></a>8. ao_radio_send</h2></div></div></div><pre class="programlisting">
+       </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53934928"></a>9. Radio Telemetry</h2></div></div></div><p>
+       In telemetry mode, you can send or receive a telemetry
+       packet. The data from receiving a packet also includes the RSSI
+       and status values supplied by the receiver. These are added
+       after the telemetry data.
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53936224"></a>9.1. ao_radio_send</h3></div></div></div><pre class="programlisting">
          void
          ao_radio_send(__xdata struct ao_telemetry *telemetry);
        </pre><p>
          telemetry mode. This function calls ao_radio_get() before
          sending, and ao_radio_put() afterwards, to correctly
          serialize access to the radio device.
-       </p></div><div class="section" title="9. ao_radio_recv"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3475976"></a>9. ao_radio_recv</h2></div></div></div><pre class="programlisting">
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53938448"></a>9.2. ao_radio_recv</h3></div></div></div><pre class="programlisting">
          void
          ao_radio_recv(__xdata struct ao_radio_recv *radio);
        </pre><p>
          to the radio device. This returns non-zero if a packet was
          received, or zero if the operation was aborted (from some
          other task calling ao_radio_abort()).
-       </p></div><p>
-      In radio direction finding mode, there's just one function to
-      use
-    </p><div class="section" title="10. ao_radio_rdf"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3477624"></a>10. ao_radio_rdf</h2></div></div></div><pre class="programlisting">
+       </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53940912"></a>10. Radio Direction Finding</h2></div></div></div><p>
+       In radio direction finding mode, there's just one function to
+       use
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53942064"></a>10.1. ao_radio_rdf</h3></div></div></div><pre class="programlisting">
          void
          ao_radio_rdf(int ms);
        </pre><p>
          This sends an RDF packet lasting for the specified amount
          of time. The maximum length is 1020 ms.
-       </p></div><p>
-      Packet mode is asymmetrical and is configured at compile time
-      for either master or slave mode (but not both). The basic I/O
-      functions look the same at both ends, but the internals are
-      different, along with the initialization steps.
-    </p><div class="section" title="11. ao_packet_putchar"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3479128"></a>11. ao_packet_putchar</h2></div></div></div><pre class="programlisting">
+       </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53944208"></a>11. Radio Packet Mode</h2></div></div></div><p>
+       Packet mode is asymmetrical and is configured at compile time
+       for either master or slave mode (but not both). The basic I/O
+       functions look the same at both ends, but the internals are
+       different, along with the initialization steps.
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53945520"></a>11.1. ao_packet_putchar</h3></div></div></div><pre class="programlisting">
          void
          ao_packet_putchar(char c);
        </pre><p>
          transmit a packet if the output buffer is full. On the
          slave side, any pending data will be sent the next time
          the master polls for data.
-       </p></div><div class="section" title="12. ao_packet_pollchar"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3480400"></a>12. ao_packet_pollchar</h2></div></div></div><pre class="programlisting">
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53947696"></a>11.2. ao_packet_pollchar</h3></div></div></div><pre class="programlisting">
          char
          ao_packet_pollchar(void);
        </pre><p>
          This returns a pending input character if available,
          otherwise returns AO_READ_AGAIN. On the master side, if
          this empties the buffer, it triggers a poll for more data.
-       </p></div><div class="section" title="13. ao_packet_slave_start"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3481520"></a>13. ao_packet_slave_start</h2></div></div></div><pre class="programlisting">
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53949776"></a>11.3. ao_packet_slave_start</h3></div></div></div><pre class="programlisting">
          void
          ao_packet_slave_start(void);
        </pre><p>
          This is available only on the slave side and starts a task
          to listen for packet data.
-       </p></div><div class="section" title="14. ao_packet_slave_stop"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3482560"></a>14. ao_packet_slave_stop</h2></div></div></div><pre class="programlisting">
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53951728"></a>11.4. ao_packet_slave_stop</h3></div></div></div><pre class="programlisting">
          void
          ao_packet_slave_stop(void);
        </pre><p>
          Disables the packet slave task, stopping the radio receiver.
-       </p></div><div class="section" title="15. ao_packet_slave_init"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3483568"></a>15. ao_packet_slave_init</h2></div></div></div><pre class="programlisting">
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53953648"></a>11.5. ao_packet_slave_init</h3></div></div></div><pre class="programlisting">
          void
          ao_packet_slave_init(void);
        </pre><p>
          Adds the packet stdio functions to the stdio package so
          that when packet slave mode is enabled, characters will
          get send and received through the stdio functions.
-       </p></div><div class="section" title="16. ao_packet_master_init"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3484688"></a>16. ao_packet_master_init</h2></div></div></div><pre class="programlisting">
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53955680"></a>11.6. ao_packet_master_init</h3></div></div></div><pre class="programlisting">
          void
          ao_packet_master_init(void);
        </pre><p>
          Adds the 'p' packet forward command to start packet mode.
-       </p></div></div></div></body></html>
+       </p></div></div></div></div></body></html>
index 62e14f3feb25c3da7b38a2af6c9fc34e22b8a215..5410b26fa765d474c288291ab304dd1a0aa22af7 100644 (file)
Binary files a/AltOS/doc/altos.pdf and b/AltOS/doc/altos.pdf differ
diff --git a/AltOS/doc/altosui.png b/AltOS/doc/altosui.png
new file mode 100644 (file)
index 0000000..3dd28de
Binary files /dev/null and b/AltOS/doc/altosui.png differ
index 657633cf4059389bad851278eaa9aebbdad211f4..5e9e02815251c3c23f4c5e4782661eec153e282f 100644 (file)
@@ -1,10 +1,14 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>The Altus Metrum System</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book"><div class="titlepage"><div><div><h1 class="title"><a name="idm15749952"></a>The Altus Metrum System</h1></div><div><h2 class="subtitle">An Owner's Manual for TeleMetrum, TeleMini, TeleDongle and TeleBT Devices</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Bdale</span> <span class="surname">Garbee</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Keith</span> <span class="surname">Packard</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Bob</span> <span class="surname">Finch</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Anthony</span> <span class="surname">Towns</span></h3></div></div><div><p class="copyright">Copyright © 2013 Bdale Garbee and Keith Packard</p></div><div><div class="legalnotice"><a name="idp111792"></a><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>The Altus Metrum System</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book"><div class="titlepage"><div><div><h1 class="title"><a name="idp26428432"></a>The Altus Metrum System</h1></div><div><h2 class="subtitle">An Owner's Manual for Altus Metrum Rocketry Electronics</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Bdale</span> <span class="surname">Garbee</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Keith</span> <span class="surname">Packard</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Bob</span> <span class="surname">Finch</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Anthony</span> <span class="surname">Towns</span></h3></div></div><div><p class="copyright">Copyright © 2013 Bdale Garbee and Keith Packard</p></div><div><div class="legalnotice"><a name="idp53658176"></a><p>
         This document is released under the terms of the
         <a class="ulink" href="http://creativecommons.org/licenses/by-sa/3.0/" target="_top">
           Creative Commons ShareAlike 3.0
         </a>
         license.
-      </p></div></div><div><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 1.2.1</td><td align="left">21 May 2013</td></tr><tr><td align="left" colspan="2">
+      </p></div></div><div><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 1.3</td><td align="left">12 November 2013</td></tr><tr><td align="left" colspan="2">
+         Updated for software version 1.3. Version 1.3 adds support
+         for TeleMega, TeleMetrum v2.0, TeleMini v2.0 and EasyMini
+         and fixes bugs in AltosUI and the AltOS firmware.
+       </td></tr><tr><td align="left">Revision 1.2.1</td><td align="left">21 May 2013</td></tr><tr><td align="left" colspan="2">
          Updated for software version 1.2. Version 1.2 adds support
          for TeleBT and AltosDroid. It also adds a few minor features
          and fixes bugs in AltosUI and the AltOS firmware.
          Updated for software version 0.9.  Note that 0.9 represents a
          telemetry format change, meaning both ends of a link (TeleMetrum and
          TeleDongle) must be updated or communications will fail.
-       </td></tr><tr><td align="left">Revision 0.8</td><td align="left">24 November 2010</td></tr><tr><td align="left" colspan="2">Updated for software version 0.8 </td></tr></table></div></div></div><hr></div><div class="acknowledgements"><div class="titlepage"><div><div><h1 class="title"><a name="idp84128"></a>Acknowledgements</h1></div></div></div>
-    <p>
-      Thanks to Bob Finch, W9YA, NAR 12965, TRA 12350 for writing "The
+       </td></tr><tr><td align="left">Revision 0.8</td><td align="left">24 November 2010</td></tr><tr><td align="left" colspan="2">Updated for software version 0.8 </td></tr></table></div></div></div><hr></div><div class="dedication"><div class="titlepage"><div><div><h1 class="title"><a name="idp52772352"></a>Acknowledgments</h1></div></div></div><p>
+      Thanks to Bob Finch, W9YA, NAR 12965, TRA 12350 for writing &#8220;The
       Mere-Mortals Quick Start/Usage Guide to the Altus Metrum Starter
-      Kit" which formed the basis of the original Getting Started chapter 
+      Kit&#8221; which formed the basis of the original Getting Started chapter 
       in this manual.  Bob was one of our first customers for a production
       TeleMetrum, and his continued enthusiasm and contributions
       are immensely gratifying and highly appreciated!
-    </p>
-    <p>
+    </p><p>
       And thanks to Anthony (AJ) Towns for major contributions including
       the AltosUI graphing and site map code and associated documentation. 
       Free software means that our customers and friends can become our
       collaborators, and we certainly appreciate this level of
       contribution!
-    </p>
-    <p>
+    </p><p>
       Have fun using these products, and we hope to meet all of you
       out on the rocket flight line somewhere.
       </p><div class="literallayout"><p><br>
@@ -52,8 +53,19 @@ NAR
 Keith Packard, KD7SQG<br>
 NAR #88757, TRA #12200<br>
       </p></div><p>
-    </p>
-  </div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="chapter"><a href="#idp45792">1. Introduction and Overview</a></span></dt><dt><span class="chapter"><a href="#idp49504">2. Getting Started</a></span></dt><dt><span class="chapter"><a href="#idp2493720">3. Handling Precautions</a></span></dt><dt><span class="chapter"><a href="#idp2765656">4. Hardware Overview</a></span></dt><dt><span class="chapter"><a href="#idp2919872">5. System Operation</a></span></dt><dd><dl><dt><span class="section"><a href="#idp2375600">1. Firmware Modes </a></span></dt><dt><span class="section"><a href="#idp2284648">2. GPS </a></span></dt><dt><span class="section"><a href="#idp753536">3. Controlling An Altimeter Over The Radio Link</a></span></dt><dt><span class="section"><a href="#idp760992">4. Ground Testing </a></span></dt><dt><span class="section"><a href="#idp762792">5. Radio Link </a></span></dt><dt><span class="section"><a href="#idp55640">6. Configurable Parameters</a></span></dt><dd><dl><dt><span class="section"><a href="#idp56488">6.1. Radio Frequency</a></span></dt><dt><span class="section"><a href="#idp57656">6.2. Apogee Delay</a></span></dt><dt><span class="section"><a href="#idp59488">6.3. Main Deployment Altitude</a></span></dt><dt><span class="section"><a href="#idp61128">6.4. Maximum Flight Log</a></span></dt><dt><span class="section"><a href="#idp64904">6.5. Ignite Mode</a></span></dt><dt><span class="section"><a href="#idp66248">6.6. Pad Orientation</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#idp67528">6. AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#idp68608">1. Monitor Flight</a></span></dt><dd><dl><dt><span class="section"><a href="#idp75208">1.1. Launch Pad</a></span></dt><dt><span class="section"><a href="#idp3850840">1.2. Ascent</a></span></dt><dt><span class="section"><a href="#idp3852992">1.3. Descent</a></span></dt><dt><span class="section"><a href="#idp3856520">1.4. Landed</a></span></dt><dt><span class="section"><a href="#idp3859448">1.5. Site Map</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3861728">2. Save Flight Data</a></span></dt><dt><span class="section"><a href="#idp3864648">3. Replay Flight</a></span></dt><dt><span class="section"><a href="#idp3865896">4. Graph Data</a></span></dt><dt><span class="section"><a href="#idp3869184">5. Export Data</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3870192">5.1. Comma Separated Value Format</a></span></dt><dt><span class="section"><a href="#idp3871768">5.2. Keyhole Markup Language (for Google Earth)</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3872600">6. Configure Altimeter</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3876776">6.1. Main Deploy Altitude</a></span></dt><dt><span class="section"><a href="#idp3877760">6.2. Apogee Delay</a></span></dt><dt><span class="section"><a href="#idp3878800">6.3. Radio Frequency</a></span></dt><dt><span class="section"><a href="#idp3879712">6.4. Radio Calibration</a></span></dt><dt><span class="section"><a href="#idp3880776">6.5. Callsign</a></span></dt><dt><span class="section"><a href="#idp3881512">6.6. Maximum Flight Log Size</a></span></dt><dt><span class="section"><a href="#idp3882376">6.7. Ignite Mode</a></span></dt><dt><span class="section"><a href="#idp3885216">6.8. Pad Orientation</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3887440">7. Configure AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3888064">7.1. Voice Settings</a></span></dt><dt><span class="section"><a href="#idp3890336">7.2. Log Directory</a></span></dt><dt><span class="section"><a href="#idp3891560">7.3. Callsign</a></span></dt><dt><span class="section"><a href="#idp3892528">7.4. Imperial Units</a></span></dt><dt><span class="section"><a href="#idp3893432">7.5. Font Size</a></span></dt><dt><span class="section"><a href="#idp3894136">7.6. Serial Debug</a></span></dt><dt><span class="section"><a href="#idp3895048">7.7. Manage Frequencies</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3896032">8. Configure Groundstation</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3899952">8.1. Frequency</a></span></dt><dt><span class="section"><a href="#idp3900936">8.2. Radio Calibration</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3901928">9. Flash Image</a></span></dt><dt><span class="section"><a href="#idp3905000">10. Fire Igniter</a></span></dt><dt><span class="section"><a href="#idp3907104">11. Scan Channels</a></span></dt><dt><span class="section"><a href="#idp3908008">12. Load Maps</a></span></dt><dt><span class="section"><a href="#idp3910136">13. Monitor Idle</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp3911008">7. AltosDroid</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3912688">1. Installing AltosDroid</a></span></dt><dt><span class="section"><a href="#idp3913648">2. Connecting to TeleBT</a></span></dt><dt><span class="section"><a href="#idp3914864">3. Configuring AltosDroid</a></span></dt><dt><span class="section"><a href="#idp3915736">4. Altos Droid Flight Monitoring</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3916536">4.1. Pad</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3922504">5. Downloading Flight Logs</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp3923520">8. Using Altus Metrum Products</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3923840">1. Being Legal</a></span></dt><dt><span class="section"><a href="#idp3924800">2. In the Rocket</a></span></dt><dt><span class="section"><a href="#idp3926904">3. On the Ground</a></span></dt><dt><span class="section"><a href="#idp3934536">4. Data Analysis</a></span></dt><dt><span class="section"><a href="#idp3936288">5. Future Plans</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp3939448">9. Altimeter Installation Recommendations</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3940432">1. Mounting the Altimeter</a></span></dt><dt><span class="section"><a href="#idp3942768">2. Dealing with the Antenna</a></span></dt><dt><span class="section"><a href="#idp3946752">3. Preserving GPS Reception</a></span></dt><dt><span class="section"><a href="#idp3949136">4. Radio Frequency Interference</a></span></dt><dt><span class="section"><a href="#idp3953208">5. The Barometric Sensor</a></span></dt><dt><span class="section"><a href="#idp3955048">6. Ground Testing</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp3957184">10. Updating Device Firmware</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3959184">1. Updating TeleMetrum Firmware</a></span></dt><dt><span class="section"><a href="#idp3964528">2. Updating TeleMini Firmware</a></span></dt><dt><span class="section"><a href="#idp3969944">3. Updating TeleDongle Firmware</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp3977040">11. Hardware Specifications</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3977360">1. TeleMetrum Specifications</a></span></dt><dt><span class="section"><a href="#idp3983088">2. TeleMini Specifications</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp3987896">12. FAQ</a></span></dt><dt><span class="appendix"><a href="#idp3991640">A. Notes for Older Software</a></span></dt><dt><span class="appendix"><a href="#idp4008072">B. Drill Templates</a></span></dt><dd><dl><dt><span class="section"><a href="#idp4008720">1. TeleMetrum template</a></span></dt><dt><span class="section"><a href="#idp4016464">2. TeleMini template</a></span></dt></dl></dd><dt><span class="appendix"><a href="#idp4018112">C. Calibration</a></span></dt><dd><dl><dt><span class="section"><a href="#idp4019088">1. Radio Frequency</a></span></dt><dt><span class="section"><a href="#idp4022408">2. TeleMetrum Accelerometer</a></span></dt></dl></dd><dt><span class="appendix"><a href="#idp4027304">D. Release Notes</a></span></dt></dl></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp45792"></a>Chapter 1. Introduction and Overview</h1></div></div></div><p>
+    </p></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="chapter"><a href="#idp52776880">1. Introduction and Overview</a></span></dt><dt><span class="chapter"><a href="#idp57459264">2. Getting Started</a></span></dt><dt><span class="chapter"><a href="#idp52778544">3. Handling Precautions</a></span></dt><dt><span class="chapter"><a href="#idp52784032">4. Altus Metrum Hardware</a></span></dt><dd><dl><dt><span class="section"><a href="#idp52784704">1. Overview</a></span></dt><dt><span class="section"><a href="#idp58332736">2. TeleMetrum</a></span></dt><dt><span class="section"><a href="#idp58337760">3. TeleMini</a></span></dt><dt><span class="section"><a href="#idp58346160">4. EasyMini</a></span></dt><dt><span class="section"><a href="#idp58350144">5. TeleMega</a></span></dt><dt><span class="section"><a href="#idp58354240">6. Flight Data Recording</a></span></dt><dt><span class="section"><a href="#idp58383072">7. Installation</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp58389808">5. System Operation</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58390448">1. Firmware Modes </a></span></dt><dt><span class="section"><a href="#idp58467152">2. GPS </a></span></dt><dt><span class="section"><a href="#idp58469936">3. Controlling An Altimeter Over The Radio Link</a></span></dt><dt><span class="section"><a href="#idp58481232">4. Ground Testing </a></span></dt><dt><span class="section"><a href="#idp58483984">5. Radio Link </a></span></dt><dt><span class="section"><a href="#idp58488672">6. Configurable Parameters</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58490416">6.1. Radio Frequency</a></span></dt><dt><span class="section"><a href="#idp58492464">6.2. Apogee Delay</a></span></dt><dt><span class="section"><a href="#idp58495056">6.3. Main Deployment Altitude</a></span></dt><dt><span class="section"><a href="#idp58496752">6.4. Maximum Flight Log</a></span></dt><dt><span class="section"><a href="#idp58498896">6.5. Ignite Mode</a></span></dt><dt><span class="section"><a href="#idp58501008">6.6. Pad Orientation</a></span></dt><dt><span class="section"><a href="#idp58502704">6.7. Configurable Pyro Channels</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#idp58525184">6. AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58528800">1. Monitor Flight</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58541520">1.1. Launch Pad</a></span></dt><dt><span class="section"><a href="#idp58557152">1.2. Ascent</a></span></dt><dt><span class="section"><a href="#idp58562608">1.3. Descent</a></span></dt><dt><span class="section"><a href="#idp58569472">1.4. Landed</a></span></dt><dt><span class="section"><a href="#idp58575904">1.5. Table</a></span></dt><dt><span class="section"><a href="#idp58579488">1.6. Site Map</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58585152">2. Save Flight Data</a></span></dt><dt><span class="section"><a href="#idp58589632">3. Replay Flight</a></span></dt><dt><span class="section"><a href="#idp58591664">4. Graph Data</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58594048">4.1. Flight Graph</a></span></dt><dt><span class="section"><a href="#idp58598496">4.2. Configure Graph</a></span></dt><dt><span class="section"><a href="#idp58602160">4.3. Flight Statistics</a></span></dt><dt><span class="section"><a href="#idp58605680">4.4. Map</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58609536">5. Export Data</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58611648">5.1. Comma Separated Value Format</a></span></dt><dt><span class="section"><a href="#idp58614000">5.2. Keyhole Markup Language (for Google Earth)</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58615488">6. Configure Altimeter</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58627792">6.1. Main Deploy Altitude</a></span></dt><dt><span class="section"><a href="#idp58629360">6.2. Apogee Delay</a></span></dt><dt><span class="section"><a href="#idp58630976">6.3. Radio Frequency</a></span></dt><dt><span class="section"><a href="#idp58632480">6.4. RF Calibration</a></span></dt><dt><span class="section"><a href="#idp58634128">6.5. Telemetry/RDF/APRS Enable</a></span></dt><dt><span class="section"><a href="#idp58635424">6.6. APRS Interval</a></span></dt><dt><span class="section"><a href="#idp58636928">6.7. Callsign</a></span></dt><dt><span class="section"><a href="#idp58638240">6.8. Maximum Flight Log Size</a></span></dt><dt><span class="section"><a href="#idp58639680">6.9. Ignite Mode</a></span></dt><dt><span class="section"><a href="#idp58646672">6.10. Pad Orientation</a></span></dt><dt><span class="section"><a href="#idp58651888">6.11. Configure Pyro Channels</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58657696">7. Configure AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58661200">7.1. Voice Settings</a></span></dt><dt><span class="section"><a href="#idp58666224">7.2. Log Directory</a></span></dt><dt><span class="section"><a href="#idp58668224">7.3. Callsign</a></span></dt><dt><span class="section"><a href="#idp58670464">7.4. Imperial Units</a></span></dt><dt><span class="section"><a href="#idp58671968">7.5. Font Size</a></span></dt><dt><span class="section"><a href="#idp58673248">7.6. Serial Debug</a></span></dt><dt><span class="section"><a href="#idp58674752">7.7. Manage Frequencies</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58676384">8. Configure Groundstation</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58687504">8.1. Frequency</a></span></dt><dt><span class="section"><a href="#idp58689072">8.2. Radio Calibration</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58690704">9. Flash Image</a></span></dt><dt><span class="section"><a href="#idp58692336">10. Fire Igniter</a></span></dt><dt><span class="section"><a href="#idp58697968">11. Scan Channels</a></span></dt><dt><span class="section"><a href="#idp58701824">12. Load Maps</a></span></dt><dt><span class="section"><a href="#idp58707520">13. Monitor Idle</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp58709616">7. AltosDroid</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58712000">1. Installing AltosDroid</a></span></dt><dt><span class="section"><a href="#idp58713936">2. Connecting to TeleBT</a></span></dt><dt><span class="section"><a href="#idp58715936">3. Configuring AltosDroid</a></span></dt><dt><span class="section"><a href="#idp58717392">4. AltosDroid Flight Monitoring</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58718704">4.1. Pad</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58732256">5. Downloading Flight Logs</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp58733920">8. Using Altus Metrum Products</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58734560">1. Being Legal</a></span></dt><dt><span class="section"><a href="#idp58736464">2. In the Rocket</a></span></dt><dt><span class="section"><a href="#idp58738928">3. On the Ground</a></span></dt><dt><span class="section"><a href="#idp58752240">4. Data Analysis</a></span></dt><dt><span class="section"><a href="#idp58754784">5. Future Plans</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp58759168">9. Altimeter Installation Recommendations</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58760624">1. Mounting the Altimeter</a></span></dt><dt><span class="section"><a href="#idp58766032">2. Dealing with the Antenna</a></span></dt><dt><span class="section"><a href="#idp58771600">3. Preserving GPS Reception</a></span></dt><dt><span class="section"><a href="#idp58776384">4. Radio Frequency Interference</a></span></dt><dt><span class="section"><a href="#idp58783952">5. The Barometric Sensor</a></span></dt><dt><span class="section"><a href="#idp58786752">6. Ground Testing</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp58789920">10. Updating Device Firmware</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58793936">1. 
+       Updating TeleMega, TeleMetrum v2 or EasyMini Firmware
+      </a></span></dt><dd><dl><dt><span class="section"><a href="#idp58802752">1.1. Recovering From Self-Flashing Failure</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58811728">2. Pair Programming</a></span></dt><dt><span class="section"><a href="#idp58813168">3. Updating TeleMetrum v1.x Firmware</a></span></dt><dt><span class="section"><a href="#idp58826208">4. Updating TeleMini Firmware</a></span></dt><dt><span class="section"><a href="#idp58839600">5. Updating TeleDongle Firmware</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp58856144">11. Hardware Specifications</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58856784">1. 
+       TeleMega Specifications
+      </a></span></dt><dt><span class="section"><a href="#idp58868016">2. 
+       TeleMetrum v2 Specifications
+      </a></span></dt><dt><span class="section"><a href="#idp58878256">3. TeleMetrum v1 Specifications</a></span></dt><dt><span class="section"><a href="#idp58888496">4. 
+       TeleMini v2.0 Specifications
+      </a></span></dt><dt><span class="section"><a href="#idp58897328">5. 
+       TeleMini v1.0 Specifications
+      </a></span></dt><dt><span class="section"><a href="#idp58906128">6. 
+       EasyMini Specifications
+      </a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp58914240">12. FAQ</a></span></dt><dt><span class="appendix"><a href="#idp58923088">A. Notes for Older Software</a></span></dt><dt><span class="appendix"><a href="#idp58946464">B. Drill Templates</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58947632">1. TeleMega template</a></span></dt><dt><span class="section"><a href="#idp58963600">2. TeleMetrum template</a></span></dt><dt><span class="section"><a href="#idp58967264">3. TeleMini v2/EasyMini template</a></span></dt><dt><span class="section"><a href="#idp58970944">4. TeleMini v1 template</a></span></dt></dl></dd><dt><span class="appendix"><a href="#idp58974736">C. Calibration</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58976288">1. Radio Frequency</a></span></dt><dt><span class="section"><a href="#idp58980832">2. TeleMetrum and TeleMega Accelerometers</a></span></dt></dl></dd><dt><span class="appendix"><a href="#idp58985936">D. Release Notes</a></span></dt></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>4.1. <a href="#idp52785760">Altus Metrum Electronics</a></dt><dt>4.2. <a href="#idp56763616">Altus Metrum Boards</a></dt><dt>4.3. <a href="#idp58355648">Data Storage on Altus Metrum altimeters</a></dt><dt>5.1. <a href="#idp58391728">AltOS Modes</a></dt><dt>5.2. <a href="#idp58440960">Pad/Idle Indications</a></dt></dl></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp52776880"></a>Chapter 1. Introduction and Overview</h1></div></div></div><p>
       Welcome to the Altus Metrum community!  Our circuits and software reflect
       our passion for both hobby rocketry and Free Software.  We hope their
       capabilities and performance will delight you in every way, but by
@@ -63,13 +75,25 @@ NAR
     </p><p>
       The first device created for our community was TeleMetrum, a dual
       deploy altimeter with fully integrated GPS and radio telemetry
-      as standard features, and a "companion interface" that will
-      support optional capabilities in the future.
+      as standard features, and a &#8220;companion interface&#8221; that will
+      support optional capabilities in the future. The latest version
+      of TeleMetrum, v2.0, has all of the same features but with
+      improved sensors and radio to offer increased performance.
     </p><p>
       Our second device was TeleMini, a dual deploy altimeter with
-      radio telemetry and radio direction finding. This device is only
-      13mm by 38mm (½ inch by 1½ inches) and can fit easily in an 18mm 
-      air-frame.
+      radio telemetry and radio direction finding. The first version
+      of this device was only 13mm by 38mm (½ inch by 1½ inches) and
+      could fit easily in an 18mm air-frame. The latest version, v2.0,
+      includes a beeper, USB data download and extended on-board
+      flight logging, along with an improved barometric sensor.
+    </p><p>
+      TeleMega is our most sophisticated device, including six pyro
+      channels (four of which are fully programmable), integrated GPS,
+      integrated gyroscopes for staging/air-start inhibit and high
+      performance telemetry.
+    </p><p>
+      EasyMini is a dual-deploy altimeter with logging and built-in
+      USB data download.
     </p><p>
       TeleDongle was our first ground station, providing a USB to RF
       interfaces for communicating with the altimeters. Combined with
@@ -81,70 +105,84 @@ NAR
     </p><p>
       For a slightly more portable ground station experience that also
       provides direct rocket recovery support, TeleBT offers flight
-      monitoring and data logging using a Bluetooth connection between
-      the receiver and an Android device that has the Altos Droid
+      monitoring and data logging using a  Bluetooth&#8482; connection between
+      the receiver and an Android device that has the AltosDroid
       application installed from the Google Play store.
     </p><p>
       More products will be added to the Altus Metrum family over time, and
       we currently envision that this will be a single, comprehensive manual
       for the entire product family.
-    </p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp49504"></a>Chapter 2. Getting Started</h1></div></div></div><p>
+    </p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp57459264"></a>Chapter 2. Getting Started</h1></div></div></div><p>
       The first thing to do after you check the inventory of parts in your
-      "starter kit" is to charge the battery.
+      &#8220;starter kit&#8221; is to charge the battery.
     </p><p>
-      The TeleMetrum battery can be charged by plugging it into the
-      corresponding socket of the TeleMetrum and then using the USB A to
-      mini B
-      cable to plug the TeleMetrum into your computer's USB socket. The
-      TeleMetrum circuitry will charge the battery whenever it is plugged
-      in, because the TeleMetrum's on-off switch does NOT control the
+      For TeleMetrum and TeleMega, the battery can be charged by plugging it into the
+      corresponding socket of the device and then using the USB
+      cable to plug the flight computer into your computer's USB socket. The
+      on-board circuitry will charge the battery whenever it is plugged
+      in, because the on-off switch does NOT control the
       charging circuitry.
     </p><p>
-      When the GPS chip is initially searching for
-      satellites, TeleMetrum will consume more current than it can pull
-      from the USB port, so the battery must be attached in order to get
-      satellite lock.  Once GPS is locked, the current consumption goes back
-      down enough to enable charging while
-      running. So it's a good idea to fully charge the battery as your
-      first item of business so there is no issue getting and maintaining
-      satellite lock.  The yellow charge indicator led will go out when the
-      battery is nearly full and the charger goes to trickle charge. It
-      can take several hours to fully recharge a deeply discharged battery.
+      On TeleMetrum v1 boards, when the GPS chip is initially
+      searching for satellites, TeleMetrum will consume more current
+      than it pulls from the USB port, so the battery must be
+      attached in order to get satellite lock.  Once GPS is locked,
+      the current consumption goes back down enough to enable charging
+      while running. So it's a good idea to fully charge the battery
+      as your first item of business so there is no issue getting and
+      maintaining satellite lock.  The yellow charge indicator led
+      will go out when the battery is nearly full and the charger goes
+      to trickle charge. It can take several hours to fully recharge a
+      deeply discharged battery.
+    </p><p>
+      TeleMetrum v2.0 and TeleMega use a higher power battery charger,
+      allowing them to charge the battery while running the board at
+      maximum power. When the battery is charging, or when the board
+      is consuming a lot of power, the red LED will be lit. When the
+      battery is fully charged, the green LED will be lit. When the
+      battery is damaged or missing, both LEDs will be lit, which
+      appears yellow.
     </p><p>
-      The TeleMini battery can be charged by disconnecting it from the
-      TeleMini board and plugging it into a standalone battery charger 
-      such as the LipoCharger product included in TeleMini Starter Kits, 
-      and connecting that via a USB cable to a laptop or other USB
-      power source.  
+      The Lithium Polymer TeleMini and EasyMini battery can be charged by
+      disconnecting it from the board and plugging it into a
+      standalone battery charger such as the LipoCharger product
+      included in TeleMini Starter Kits, and connecting that via a USB
+      cable to a laptop or other USB power source.
+    </p><p>
+      You can also choose to use another battery with TeleMini v2.0
+      and EasyMini, anything supplying between 4 and 12 volts should
+      work fine (like a standard 9V battery), but if you are planning
+      to fire pyro charges, ground testing is required to verify that
+      the battery supplies enough current to fire your chosen e-matches.
     </p><p>
       The other active device in the starter kit is the TeleDongle USB to
       RF interface.  If you plug it in to your Mac or Linux computer it should
-      "just work", showing up as a serial port device.  Windows systems need
+      &#8220;just work&#8221;, showing up as a serial port device.  Windows systems need
       driver information that is part of the AltOS download to know that the
       existing USB modem driver will work.  We therefore recommend installing
       our software before plugging in TeleDongle if you are using a Windows
-      computer.  If you are using Linux and are having problems, try moving 
-      to a fresher kernel (2.6.33 or newer), as the USB serial driver had 
-      ugly bugs in some earlier versions.
+      computer.  If you are using an older version of Linux and are having 
+      problems, try moving to a fresher kernel (2.6.33 or newer). 
     </p><p>
-      Next you should obtain and install the AltOS software.  These include
-      the AltosUI ground station program, current firmware images for
-      TeleMetrum, TeleMini and TeleDongle, and a number of standalone 
-      utilities that are rarely needed.  Pre-built binary packages are 
-      available for Linux, Microsoft Windows, and recent MacOSX versions.  
-      Full source code and build instructions are also available.
-      The latest version may always be downloaded from
+      Next you should obtain and install the AltOS software.  The AltOS
+      distribution includes the AltosUI ground station program, current 
+      firmware
+      images for all of the hardware, and a number of standalone
+      utilities that are rarely needed.  Pre-built binary packages are
+      available for Linux, Microsoft Windows, and recent MacOSX
+      versions.  Full source code and build instructions are also
+      available.  The latest version may always be downloaded from
       <a class="ulink" href="http://altusmetrum.org/AltOS" target="_top">http://altusmetrum.org/AltOS</a>.
     </p><p>
-      If you're using a TeleBT instead of the TeleDongle, you'll want
-      to go install the Altos Droid application from the Google Play
-      store. You don't need a data plan to use Altos Droid, but
+      If you're using a TeleBT instead of the TeleDongle, you'll want to 
+      install the AltosDroid application from the Google Play store on an 
+      Android device. You don't need a data plan to use AltosDroid, but 
       without network access, the Map view will be less useful as it
       won't contain any map data. You can also use TeleBT connected
       over USB with your laptop computer; it acts exactly like a
       TeleDongle. Anywhere this manual talks about TeleDongle, you can
       also read that as 'and TeleBT when connected via USB'.
-    </p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp2493720"></a>Chapter 3. Handling Precautions</h1></div></div></div><p>
+    </p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp52778544"></a>Chapter 3. Handling Precautions</h1></div></div></div><p>
       All Altus Metrum products are sophisticated electronic devices.  
       When handled gently and properly installed in an air-frame, they
       will deliver impressive results.  However, as with all electronic 
@@ -161,21 +199,21 @@ NAR
       often wrap them in suitable scraps of closed-cell packing foam before
       strapping them down, for example.
     </p><p>
-      The barometric sensors used on both TeleMetrum and TeleMini are 
-      sensitive to sunlight.  In normal TeleMetrum mounting situations, it 
+      The barometric sensors used on all of our flight computers are 
+      sensitive to sunlight.  In normal mounting situations, the baro sensor
       and all of the other surface mount components
-      are "down" towards whatever the underlying mounting surface is, so
-      this is not normally a problem.  Please consider this, though, when
-      designing an installation, for example, in an air-frame with a
-      see-through plastic payload bay.  It is particularly important to
-      consider this with TeleMini, both because the baro sensor is on the
-      "top" of the board, and because many model rockets with payload bays
+      are &#8220;down&#8221; towards whatever the underlying mounting surface is, so
+      this is not normally a problem.  Please consider this when designing an 
+      installation in an air-frame with a see-through plastic payload bay.  It
+      is particularly important to
+      consider this with TeleMini v1.0, both because the baro sensor is on the
+      &#8220;top&#8221; of the board, and because many model rockets with payload bays
       use clear plastic for the payload bay!  Replacing these with an opaque
       cardboard tube, painting them, or wrapping them with a layer of masking
       tape are all reasonable approaches to keep the sensor out of direct
       sunlight.
     </p><p>
-      The barometric sensor sampling port must be able to "breathe",
+      The barometric sensor sampling port must be able to &#8220;breathe&#8221;,
       both by not being covered by foam or tape or other materials that might
       directly block the hole on the top of the sensor, and also by having a
       suitable static vent to outside air.
@@ -183,119 +221,320 @@ NAR
       As with all other rocketry electronics, Altus Metrum altimeters must 
       be protected from exposure to corrosive motor exhaust and ejection 
       charge gasses.
-    </p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp2765656"></a>Chapter 4. Hardware Overview</h1></div></div></div><p>
-      TeleMetrum is a 1 inch by 2.75 inch circuit board.  It was designed to
-      fit inside coupler for 29mm air-frame tubing, but using it in a tube that
-      small in diameter may require some creativity in mounting and wiring
-      to succeed!  The presence of an accelerometer means TeleMetrum should
-      be aligned along the flight axis of the airframe, and by default the 1/4
-      wave UHF wire antenna should be on the nose-cone end of the board.  The
-      antenna wire is about 7 inches long, and wiring for a power switch and
-      the e-matches for apogee and main ejection charges depart from the
-      fin can end of the board, meaning an ideal "simple" avionics
-      bay for TeleMetrum should have at least 10 inches of interior length.
-    </p><p>
-      TeleMini is a 0.5 inch by 1.5 inch circuit board.   It was designed to
-      fit inside an 18mm air-frame tube, but using it in a tube that
-      small in diameter may require some creativity in mounting and wiring
-      to succeed!  Since there is no accelerometer, TeleMini can be mounted
-      in any convenient orientation.  The default 1/4
-      wave UHF wire antenna attached to the center of one end of
-      the board is about 7 inches long, and wiring for a power switch and
-      the e-matches for apogee and main ejection charges depart from the
-      other end of the board, meaning an ideal "simple" avionics
-      bay for TeleMini should have at least 9 inches of interior length.
-    </p><p>
-      A typical TeleMetrum or TeleMini installation involves attaching 
-      only a suitable Lithium Polymer battery, a single pole switch for 
-      power on/off, and two pairs of wires connecting e-matches for the 
-      apogee and main ejection charges.  All Altus Metrum products are 
-      designed for use with single-cell batteries with 3.7 volts nominal.
-    </p><p>
-      The battery connectors are a standard 2-pin JST connector and
-      match batteries sold by Spark Fun. These batteries are
-      single-cell Lithium Polymer batteries that nominally provide 3.7
-      volts.  Other vendors sell similar batteries for RC aircraft
-      using mating connectors, however the polarity for those is
-      generally reversed from the batteries used by Altus Metrum
-      products. In particular, the Tenergy batteries supplied for use
-      in Featherweight flight computers are not compatible with Altus
-      Metrum flight computers or battery chargers. <span class="emphasis"><em>Check
-      polarity and voltage before connecting any battery not purchased
-      from Altus Metrum or Spark Fun.</em></span>
-    </p><p>
-      By default, we use the unregulated output of the Li-Po battery directly
-      to fire ejection charges.  This works marvelously with standard
-      low-current e-matches like the J-Tek from MJG Technologies, and with
-      Quest Q2G2 igniters.  However, if you want or need to use a separate 
-      pyro battery, check out the "External Pyro Battery" section in this 
-      manual for instructions on how to wire that up. The altimeters are 
-      designed to work with an external pyro battery of no more than 15 volts.
-    </p><p>
-      Ejection charges are wired directly to the screw terminal block
-      at the aft end of the altimeter.  You'll need a very small straight 
-      blade screwdriver for these screws, such as you might find in a 
-      jeweler's screwdriver set.
-    </p><p>
-      TeleMetrum also uses the screw terminal block for the power
-      switch leads. On TeleMini, the power switch leads are soldered
-      directly to the board and can be connected directly to a switch.
-    </p><p>
-      For most air-frames, the integrated antennas are more than
-      adequate.   However, if you are installing in a carbon-fiber or
-      metal electronics bay which is opaque to RF signals, you may need to
-      use off-board external antennas instead.  In this case, you can
-      order an altimeter with an SMA connector for the UHF antenna
-      connection, and, on TeleMetrum, you can unplug the integrated GPS
-      antenna and select an appropriate off-board GPS antenna with
-      cable terminating in a U.FL connector.
-    </p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp2919872"></a>Chapter 5. System Operation</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp2375600">1. Firmware Modes </a></span></dt><dt><span class="section"><a href="#idp2284648">2. GPS </a></span></dt><dt><span class="section"><a href="#idp753536">3. Controlling An Altimeter Over The Radio Link</a></span></dt><dt><span class="section"><a href="#idp760992">4. Ground Testing </a></span></dt><dt><span class="section"><a href="#idp762792">5. Radio Link </a></span></dt><dt><span class="section"><a href="#idp55640">6. Configurable Parameters</a></span></dt><dd><dl><dt><span class="section"><a href="#idp56488">6.1. Radio Frequency</a></span></dt><dt><span class="section"><a href="#idp57656">6.2. Apogee Delay</a></span></dt><dt><span class="section"><a href="#idp59488">6.3. Main Deployment Altitude</a></span></dt><dt><span class="section"><a href="#idp61128">6.4. Maximum Flight Log</a></span></dt><dt><span class="section"><a href="#idp64904">6.5. Ignite Mode</a></span></dt><dt><span class="section"><a href="#idp66248">6.6. Pad Orientation</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp2375600"></a>1. Firmware Modes </h2></div></div></div><p>
+    </p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp52784032"></a>Chapter 4. Altus Metrum Hardware</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp52784704">1. Overview</a></span></dt><dt><span class="section"><a href="#idp58332736">2. TeleMetrum</a></span></dt><dt><span class="section"><a href="#idp58337760">3. TeleMini</a></span></dt><dt><span class="section"><a href="#idp58346160">4. EasyMini</a></span></dt><dt><span class="section"><a href="#idp58350144">5. TeleMega</a></span></dt><dt><span class="section"><a href="#idp58354240">6. Flight Data Recording</a></span></dt><dt><span class="section"><a href="#idp58383072">7. Installation</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp52784704"></a>1. Overview</h2></div></div></div><p>
+       Here's the full set of Altus Metrum products, both in
+       production and retired.
+      </p><div class="table"><a name="idp52785760"></a><p class="title"><b>Table 4.1. Altus Metrum Electronics</b></p><div class="table-contents"><table summary="Altus Metrum Electronics" border="1"><colgroup><col align="center" class="Device"><col align="center" class="Barometer"><col align="center" class="Z-axis accelerometer"><col align="center" class="GPS"><col align="center" class="3D sensors"><col align="center" class="Storage"><col align="center" class="RF"><col align="center" class="Battery"></colgroup><thead><tr><th align="center">Device</th><th align="center">Barometer</th><th align="center">Z-axis accelerometer</th><th align="center">GPS</th><th align="center">3D sensors</th><th align="center">Storage</th><th align="center">RF Output</th><th align="center">Battery</th></tr></thead><tbody><tr><td align="center">TeleMetrum v1.0</td><td align="center"><p>MP3H6115 10km (33k')</p></td><td align="center"><p>MMA2202 50g</p></td><td align="center">SkyTraq</td><td align="center">-</td><td align="center">1MB</td><td align="center">10mW</td><td align="center">3.7V</td></tr><tr><td align="center">TeleMetrum v1.1</td><td align="center"><p>MP3H6115 10km (33k')</p></td><td align="center"><p>MMA2202 50g</p></td><td align="center">SkyTraq</td><td align="center">-</td><td align="center">2MB</td><td align="center">10mW</td><td align="center">3.7V</td></tr><tr><td align="center">TeleMetrum v1.2</td><td align="center"><p>MP3H6115 10km (33k')</p></td><td align="center"><p>ADXL78 70g</p></td><td align="center">SkyTraq</td><td align="center">-</td><td align="center">2MB</td><td align="center">10mW</td><td align="center">3.7V</td></tr><tr><td align="center">TeleMetrum v2.0</td><td align="center"><p>MS5607 30km (100k')</p></td><td align="center"><p>MMA6555 102g</p></td><td align="center">uBlox Max-7Q</td><td align="center">-</td><td align="center">8MB</td><td align="center">40mW</td><td align="center">3.7V</td></tr><tr><td align="center"><p>TeleMini v1.0</p></td><td align="center"><p>MP3H6115 10km (33k')</p></td><td align="center">-</td><td align="center">-</td><td align="center">-</td><td align="center">5kB</td><td align="center">10mW</td><td align="center">3.7V</td></tr><tr><td align="center">TeleMini v2.0</td><td align="center"><p>MS5607 30km (100k')</p></td><td align="center">-</td><td align="center">-</td><td align="center">-</td><td align="center">1MB</td><td align="center">10mW</td><td align="center">3.7-12V</td></tr><tr><td align="center">EasyMini v1.0</td><td align="center"><p>MS5607 30km (100k')</p></td><td align="center">-</td><td align="center">-</td><td align="center">-</td><td align="center">1MB</td><td align="center">-</td><td align="center">3.7-12V</td></tr><tr><td align="center">TeleMega v1.0</td><td align="center"><p>MS5607 30km (100k')</p></td><td align="center"><p>MMA6555 102g</p></td><td align="center">uBlox Max-7Q</td><td align="center"><p>MPU6000 HMC5883</p></td><td align="center">8MB</td><td align="center">40mW</td><td align="center">3.7V</td></tr></tbody></table></div></div><br class="table-break"><div class="table"><a name="idp56763616"></a><p class="title"><b>Table 4.2. Altus Metrum Boards</b></p><div class="table-contents"><table summary="Altus Metrum Boards" border="1"><colgroup><col align="center" class="Device"><col align="center" class="Connectors"><col align="center" class="Screw Terminals"><col align="center" class="Width"><col align="center" class="Length"><col align="center" class="Tube Size"></colgroup><thead><tr><th align="center">Device</th><th align="center">Connectors</th><th align="center">Screw Terminals</th><th align="center">Width</th><th align="center">Length</th><th align="center">Tube Size</th></tr></thead><tbody><tr><td align="center">TeleMetrum</td><td align="center"><p>
+               Antenna
+               Debug
+               Companion
+               USB
+               Battery
+             </p></td><td align="center"><p>Apogee pyro Main pyro Switch</p></td><td align="center">1 inch (2.54cm)</td><td align="center">2 ¾ inch (6.99cm)</td><td align="center">29mm coupler</td></tr><tr><td align="center"><p>TeleMini v1.0</p></td><td align="center"><p>
+               Antenna
+               Debug
+               Battery
+             </p></td><td align="center"><p>
+               Apogee pyro 
+               Main pyro
+             </p></td><td align="center">½ inch (1.27cm)</td><td align="center">1½ inch (3.81cm)</td><td align="center">18mm coupler</td></tr><tr><td align="center">TeleMini v2.0</td><td align="center"><p>
+               Antenna
+               Debug
+               USB
+               Battery
+             </p></td><td align="center"><p>
+               Apogee pyro 
+               Main pyro 
+               Battery 
+               Switch
+               </p></td><td align="center">0.8 inch (2.03cm)</td><td align="center">1½ inch (3.81cm)</td><td align="center">24mm coupler</td></tr><tr><td align="center">EasyMini</td><td align="center"><p>
+               Debug
+               USB
+               Battery
+             </p></td><td align="center"><p>
+               Apogee pyro 
+               Main pyro 
+               Battery 
+               Switch
+               </p></td><td align="center">0.8 inch (2.03cm)</td><td align="center">1½ inch (3.81cm)</td><td align="center">24mm coupler</td></tr><tr><td align="center">TeleMega</td><td align="center"><p>
+               Antenna
+               Debug
+               Companion
+               USB
+               Battery
+             </p></td><td align="center"><p>
+               Apogee pyro 
+               Main pyro
+               Pyro A-D
+               Switch
+               Pyro battery
+             </p></td><td align="center">1¼ inch (3.18cm)</td><td align="center">3¼ inch (8.26cm)</td><td align="center">38mm coupler</td></tr></tbody></table></div></div><br class="table-break"></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58332736"></a>2. TeleMetrum</h2></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="telemetrum-v1.1-thside.jpg" width="495"></td></tr></table></div></div><p>
+       TeleMetrum is a 1 inch by 2¾ inch circuit board.  It was designed to
+       fit inside coupler for 29mm air-frame tubing, but using it in a tube that
+       small in diameter may require some creativity in mounting and wiring
+       to succeed!  The presence of an accelerometer means TeleMetrum should
+       be aligned along the flight axis of the airframe, and by default the ¼
+       wave UHF wire antenna should be on the nose-cone end of the board.  The
+       antenna wire is about 7 inches long, and wiring for a power switch and
+       the e-matches for apogee and main ejection charges depart from the
+       fin can end of the board, meaning an ideal &#8220;simple&#8221; avionics
+       bay for TeleMetrum should have at least 10 inches of interior length.
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58337760"></a>3. TeleMini</h2></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="telemini-v1-top.jpg" width="495"></td></tr></table></div></div><p>
+       TeleMini v1.0 is ½ inches by 1½ inches.  It was
+       designed to fit inside an 18mm air-frame tube, but using it in
+       a tube that small in diameter may require some creativity in
+       mounting and wiring to succeed!  Since there is no
+       accelerometer, TeleMini can be mounted in any convenient
+       orientation.  The default ¼ wave UHF wire antenna attached to
+       the center of one end of the board is about 7 inches long. Two
+       wires for the power switch are connected to holes in the
+       middle of the board. Screw terminals for the e-matches for
+       apogee and main ejection charges depart from the other end of
+       the board, meaning an ideal &#8220;simple&#8221; avionics bay for TeleMini
+       should have at least 9 inches of interior length.
+      </p><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="telemini-v2-top.jpg" width="495"></td></tr></table></div></div><p>
+       TeleMini v2.0 is 0.8 inches by 1½ inches. It adds more
+       on-board data logging memory, a built-in USB connector and
+       screw terminals for the battery and power switch. The larger
+       board fits in a 24mm coupler. There's also a battery connector
+       for a LiPo battery if you want to use one of those.
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58346160"></a>4. EasyMini</h2></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="easymini-top.jpg" width="495"></td></tr></table></div></div><p>
+       EasyMini is built on a 0.8 inch by 1½ inch circuit board. It's
+       designed to fit in a 24mm coupler tube. The connectors and
+       screw terminals match TeleMini v2.0, so you can easily swap between
+       EasyMini and TeleMini.
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58350144"></a>5. TeleMega</h2></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="telemega-v1.0-top.jpg" width="495"></td></tr></table></div></div><p>
+       TeleMega is a 1¼ inch by 3¼ inch circuit board. It was
+       designed to easily fit in a 38mm coupler. Like TeleMetrum,
+       TeleMega has an accelerometer and so it must be mounted so that
+       the board is aligned with the flight axis. It can be mounted
+       either antenna up or down.
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58354240"></a>6. Flight Data Recording</h2></div></div></div><p>
+       Each flight computer logs data at 100 samples per second
+       during ascent and 10 samples per second during descent, except
+       for TeleMini v1.0, which records ascent at 10 samples per
+       second and descent at 1 sample per second. Data are logged to
+       an on-board flash memory part, which can be partitioned into
+       several equal-sized blocks, one for each flight.
+      </p><div class="table"><a name="idp58355648"></a><p class="title"><b>Table 4.3. Data Storage on Altus Metrum altimeters</b></p><div class="table-contents"><table summary="Data Storage on Altus Metrum altimeters" border="1"><colgroup><col align="center" class="Device"><col align="center" class="Bytes per sample"><col align="center" class="Total storage"><col align="center" class="Minutes of        full-rate"></colgroup><thead><tr><th align="center">Device</th><th align="center">Bytes per Sample</th><th align="center">Total Storage</th><th align="center">Minutes at Full Rate</th></tr></thead><tbody><tr><td align="center">TeleMetrum v1.0</td><td align="center">8</td><td align="center">1MB</td><td align="center">20</td></tr><tr><td align="center">TeleMetrum v1.1 v1.2</td><td align="center">8</td><td align="center">2MB</td><td align="center">40</td></tr><tr><td align="center">TeleMetrum v2.0</td><td align="center">16</td><td align="center">8MB</td><td align="center">80</td></tr><tr><td align="center">TeleMini v1.0</td><td align="center">2</td><td align="center">5kB</td><td align="center">4</td></tr><tr><td align="center">TeleMini v2.0</td><td align="center">16</td><td align="center">1MB</td><td align="center">10</td></tr><tr><td align="center">EasyMini</td><td align="center">16</td><td align="center">1MB</td><td align="center">10</td></tr><tr><td align="center">TeleMega</td><td align="center">32</td><td align="center">8MB</td><td align="center">40</td></tr></tbody></table></div></div><br class="table-break"><p>
+       The on-board flash is partitioned into separate flight logs,
+       each of a fixed maximum size. Increase the maximum size of
+       each log and you reduce the number of flights that can be
+       stored. Decrease the size and you can store more flights.
+      </p><p>
+       Configuration data is also stored in the flash memory on
+       TeleMetrum v1.x, TeleMini and EasyMini. This consumes 64kB
+       of flash space.  This configuration space is not available
+       for storing flight log data. TeleMetrum v2.0 and TeleMega
+       store configuration data in a bit of eeprom available within
+       the processor chip, leaving that space available in flash for
+       more flight data.
+      </p><p>
+       To compute the amount of space needed for a single flight, you
+       can multiply the expected ascent time (in seconds) by 100
+       times bytes-per-sample, multiply the expected descent time (in
+       seconds) by 10 times the bytes per sample and add the two
+       together. That will slightly under-estimate the storage (in
+       bytes) needed for the flight. For instance, a TeleMetrum v2.0 flight spending
+       20 seconds in ascent and 150 seconds in descent will take
+       about (20 * 1600) + (150 * 160) = 56000 bytes of storage. You
+       could store dozens of these flights in the on-board flash.
+      </p><p>
+       The default size allows for several flights on each flight
+       computer, except for TeleMini v1.0, which only holds data for a
+       single flight. You can adjust the size.
+      </p><p>
+       Altus Metrum flight computers will not overwrite existing
+       flight data, so be sure to download flight data and erase it
+       from the flight computer before it fills up. The flight
+       computer will still successfully control the flight even if it
+       cannot log data, so the only thing you will lose is the data.
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58383072"></a>7. Installation</h2></div></div></div><p>
+       A typical installation involves attaching 
+       only a suitable battery, a single pole switch for 
+       power on/off, and two pairs of wires connecting e-matches for the 
+       apogee and main ejection charges.  All Altus Metrum products are 
+       designed for use with single-cell batteries with 3.7 volts
+       nominal. TeleMini v2.0 and EasyMini may also be used with other
+       batteries as long as they supply between 4 and 12 volts. 
+      </p><p>
+       The battery connectors are a standard 2-pin JST connector and
+       match batteries sold by Spark Fun. These batteries are
+       single-cell Lithium Polymer batteries that nominally provide 3.7
+       volts.  Other vendors sell similar batteries for RC aircraft
+       using mating connectors, however the polarity for those is
+       generally reversed from the batteries used by Altus Metrum
+       products. In particular, the Tenergy batteries supplied for use
+       in Featherweight flight computers are not compatible with Altus
+       Metrum flight computers or battery chargers. <span class="emphasis"><em>Check
+       polarity and voltage before connecting any battery not purchased
+       from Altus Metrum or Spark Fun.</em></span>
+      </p><p>
+       By default, we use the unregulated output of the battery directly
+       to fire ejection charges.  This works marvelously with standard
+       low-current e-matches like the J-Tek from MJG Technologies, and with
+       Quest Q2G2 igniters.  However, if you want or need to use a separate 
+       pyro battery, check out the &#8220;External Pyro Battery&#8221; section in this 
+       manual for instructions on how to wire that up. The altimeters are 
+       designed to work with an external pyro battery of no more than 15 volts.
+
+      </p><p>
+       Ejection charges are wired directly to the screw terminal block
+       at the aft end of the altimeter.  You'll need a very small straight 
+       blade screwdriver for these screws, such as you might find in a 
+       jeweler's screwdriver set.
+      </p><p>
+       Except for TeleMini v1.0, the flight computers also use the
+       screw terminal block for the power switch leads. On TeleMini v1.0,
+       the power switch leads are soldered directly to the board and
+       can be connected directly to a switch.
+      </p><p>
+       For most air-frames, the integrated antennas are more than
+       adequate.   However, if you are installing in a carbon-fiber or
+       metal electronics bay which is opaque to RF signals, you may need to
+       use off-board external antennas instead.  In this case, you can
+       replace the stock UHF antenna wire with an edge-launched SMA connector,
+       and, on TeleMetrum v1, you can unplug the integrated GPS
+       antenna and select an appropriate off-board GPS antenna with
+       cable terminating in a U.FL connector.
+      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp58389808"></a>Chapter 5. System Operation</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp58390448">1. Firmware Modes </a></span></dt><dt><span class="section"><a href="#idp58467152">2. GPS </a></span></dt><dt><span class="section"><a href="#idp58469936">3. Controlling An Altimeter Over The Radio Link</a></span></dt><dt><span class="section"><a href="#idp58481232">4. Ground Testing </a></span></dt><dt><span class="section"><a href="#idp58483984">5. Radio Link </a></span></dt><dt><span class="section"><a href="#idp58488672">6. Configurable Parameters</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58490416">6.1. Radio Frequency</a></span></dt><dt><span class="section"><a href="#idp58492464">6.2. Apogee Delay</a></span></dt><dt><span class="section"><a href="#idp58495056">6.3. Main Deployment Altitude</a></span></dt><dt><span class="section"><a href="#idp58496752">6.4. Maximum Flight Log</a></span></dt><dt><span class="section"><a href="#idp58498896">6.5. Ignite Mode</a></span></dt><dt><span class="section"><a href="#idp58501008">6.6. Pad Orientation</a></span></dt><dt><span class="section"><a href="#idp58502704">6.7. Configurable Pyro Channels</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58390448"></a>1. Firmware Modes </h2></div></div></div><p>
         The AltOS firmware build for the altimeters has two
-        fundamental modes, "idle" and "flight".  Which of these modes
+        fundamental modes, &#8220;idle&#8221; and &#8220;flight&#8221;.  Which of these modes
         the firmware operates in is determined at start up time. For
-        TeleMetrum, the mode is controlled by the orientation of the
+        TeleMetrum and TeleMega, which have accelerometers, the mode is 
+       controlled by the orientation of the
         rocket (well, actually the board, of course...) at the time
-        power is switched on.  If the rocket is "nose up", then
-        TeleMetrum assumes it's on a rail or rod being prepared for
+        power is switched on.  If the rocket is &#8220;nose up&#8221;, then
+        the flight computer assumes it's on a rail or rod being prepared for
         launch, so the firmware chooses flight mode.  However, if the
         rocket is more or less horizontal, the firmware instead enters
-        idle mode.  Since TeleMini doesn't have an accelerometer we can
-        use to determine orientation, "idle" mode is selected when the
-        board receives a command packet within the first five seconds
-        of operation; if no packet is received, the board enters
-        "flight" mode.
+        idle mode.  Since TeleMini v2.0 and EasyMini don't have an
+        accelerometer we can use to determine orientation, &#8220;idle&#8221; mode
+        is selected if the board is connected via USB to a computer,
+        otherwise the board enters &#8220;flight&#8221; mode. TeleMini v1.0
+        selects &#8220;idle&#8221; mode if it receives a command packet within the
+        first five seconds of operation.
       </p><p>
         At power on, you will hear three beeps or see three flashes
-        ("S" in Morse code for start up) and then a pause while
+        (&#8220;S&#8221; in Morse code for start up) and then a pause while
         the altimeter completes initialization and self test, and decides 
        which mode to enter next.
       </p><p>
-        In flight or "pad" mode, the altimeter engages the flight
-        state machine, goes into transmit-only mode to
-        send telemetry, and waits for launch to be detected.
-        Flight mode is indicated by an "di-dah-dah-dit" ("P" for pad)
-        on the beeper or lights, followed by beeps or flashes
-        indicating the state of the pyrotechnic igniter continuity.
-        One beep/flash indicates apogee continuity, two beeps/flashes
-        indicate main continuity, three beeps/flashes indicate both
-        apogee and main continuity, and one longer "brap" sound or
-        rapidly alternating lights indicates no continuity.  For a
+       Here's a short summary of all of the modes and the beeping (or
+       flashing, in the case of TeleMini v1) that accompanies each
+       mode. In the description of the beeping pattern, &#8220;dit&#8221; means a
+       short beep while "dah" means a long beep (three times as
+       long). &#8220;Brap&#8221; means a long dissonant tone.
+       </p><div class="table"><a name="idp58391728"></a><p class="title"><b>Table 5.1. AltOS Modes</b></p><div class="table-contents"><table summary="AltOS Modes" border="1"><colgroup><col align="center" class="Mode Name"><col align="center" class="Letter"><col align="center" class="Beeps"><col align="center" class="Description"></colgroup><thead><tr><th align="center">Mode Name</th><th align="center">Abbreviation</th><th align="center">Beeps</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">Startup</td><td align="center">S</td><td align="center">dit dit dit</td><td align="center">
+                 <p>
+                   Calibrating sensors, detecting orientation.
+                 </p>
+               </td></tr><tr><td align="center">Idle</td><td align="center">I</td><td align="center">dit dit</td><td align="center">
+                 <p>
+                   Ready to accept commands over USB or radio link.
+                 </p>
+               </td></tr><tr><td align="center">Pad</td><td align="center">P</td><td align="center">dit dah dah dit</td><td align="center">
+                 <p>
+                   Waiting for launch. Not listening for commands.
+                 </p>
+               </td></tr><tr><td align="center">Boost</td><td align="center">B</td><td align="center">dah dit dit dit</td><td align="center">
+                 <p>
+                   Accelerating upwards.
+                 </p>
+               </td></tr><tr><td align="center">Fast</td><td align="center">F</td><td align="center">dit dit dah dit</td><td align="center">
+                 <p>
+                   Decellerating, but moving faster than 200m/s.
+                 </p>
+               </td></tr><tr><td align="center">Coast</td><td align="center">C</td><td align="center">dah dit dah dit</td><td align="center">
+                 <p>
+                   Decellerating, moving slower than 200m/s
+                 </p>
+               </td></tr><tr><td align="center">Drogue</td><td align="center">D</td><td align="center">dah dit dit</td><td align="center">
+                 <p>
+                   Descending after apogee. Above main height.
+                 </p>
+               </td></tr><tr><td align="center">Main</td><td align="center">M</td><td align="center">dah dah</td><td align="center">
+                 <p>
+                   Descending. Below main height.
+                 </p>
+               </td></tr><tr><td align="center">Landed</td><td align="center">L</td><td align="center">dit dah dit dit</td><td align="center">
+                 <p>
+                   Stable altitude for at least ten seconds.
+                 </p>
+               </td></tr><tr><td align="center">Sensor error</td><td align="center">X</td><td align="center">dah dit dit dah</td><td align="center">
+                 <p>
+                   Error detected during sensor calibration.
+                 </p>
+               </td></tr></tbody></table></div></div><p><br class="table-break">
+      </p><p>
+        In flight or &#8220;pad&#8221; mode, the altimeter engages the flight
+        state machine, goes into transmit-only mode to send telemetry,
+        and waits for launch to be detected.  Flight mode is indicated
+        by an &#8220;di-dah-dah-dit&#8221; (&#8220;P&#8221; for pad) on the beeper or lights,
+        followed by beeps or flashes indicating the state of the
+        pyrotechnic igniter continuity.  One beep/flash indicates
+        apogee continuity, two beeps/flashes indicate main continuity,
+        three beeps/flashes indicate both apogee and main continuity,
+        and one longer &#8220;brap&#8221; sound which is made by rapidly
+        alternating between two tones indicates no continuity.  For a
         dual deploy flight, make sure you're getting three beeps or
         flashes before launching!  For apogee-only or motor eject
         flights, do what makes sense.
       </p><p>
-        If idle mode is entered, you will hear an audible "di-dit" or
-        see two short flashes ("I" for idle), and the flight state
+        If idle mode is entered, you will hear an audible &#8220;di-dit&#8221; or
+        see two short flashes (&#8220;I&#8221; for idle), and the flight state
         machine is disengaged, thus no ejection charges will fire.
         The altimeters also listen for the radio link when in idle
         mode for requests sent via TeleDongle.  Commands can be issued
-        to a TeleMetrum in idle mode over either USB or the radio link
-        equivalently. TeleMini only has the radio link.  Idle mode is
-        useful for configuring the altimeter, for extracting data from
-        the on-board storage chip after flight, and for ground testing
-        pyro charges.
+        in idle mode over either USB or the radio link
+        equivalently. TeleMini v1.0 only has the radio link.  Idle
+        mode is useful for configuring the altimeter, for extracting
+        data from the on-board storage chip after flight, and for
+        ground testing pyro charges.
+      </p><p>
+       In &#8220;Idle&#8221; and &#8220;Pad&#8221; modes, once the mode indication
+       beeps/flashes and continuity indication has been sent, if
+       there is no space available to log the flight in on-board
+       memory, the flight computer will emit a warbling tone (much
+       slower than the &#8220;no continuity tone&#8221;)
+      </p><p>
+       Here's a summary of all of the &#8220;pad&#8221; and &#8220;idle&#8221; mode indications.
+       </p><div class="table"><a name="idp58440960"></a><p class="title"><b>Table 5.2. Pad/Idle Indications</b></p><div class="table-contents"><table summary="Pad/Idle Indications" border="1"><colgroup><col align="center" class="Name"><col align="center" class="Beeps"><col align="center" class="Description"></colgroup><thead><tr><th align="center">Name</th><th align="center">Beeps</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">Neither</td><td align="center">brap</td><td align="center">
+                 <p>
+                   No continuity detected on either apogee or main
+                   igniters.
+                 </p>
+               </td></tr><tr><td align="center">Apogee</td><td align="center">dit</td><td align="center">
+                 <p>
+                   Continuity detected only on apogee igniter.
+                 </p>
+               </td></tr><tr><td align="center">Main</td><td align="center">dit dit</td><td align="center">
+                 <p>
+                   Continuity detected only on main igniter.
+                 </p>
+               </td></tr><tr><td align="center">Both</td><td align="center">dit dit dit</td><td align="center">
+                 <p>
+                   Continuity detected on both igniters.
+                 </p>
+               </td></tr><tr><td align="center">Storage Full</td><td align="center">warble</td><td align="center">
+                 <p>
+                   On-board data logging storage is full. This will
+                   not prevent the flight computer from safely
+                   controlling the flight or transmitting telemetry
+                   signals, but no record of the flight will be
+                   stored in on-board flash.
+                 </p>
+               </td></tr></tbody></table></div></div><p><br class="table-break">
       </p><p>
-        One "neat trick" of particular value when TeleMetrum is used with 
+       Once landed, the flight computer will signal that by emitting
+       the &#8220;Landed&#8221; sound described above, after which it will beep
+       out the apogee height (in meters). Each digit is represented
+       by a sequence of short &#8220;dit&#8221; beeps, with a pause between
+       digits. A zero digit is represented with one long &#8220;dah&#8221;
+       beep. The flight computer will continue to report landed mode
+       and beep out the maximum height until turned off.
+      </p><p>
+        One &#8220;neat trick&#8221; of particular value when TeleMetrum or TeleMega are used with 
         very large air-frames, is that you can power the board up while the 
         rocket is horizontal, such that it comes up in idle mode.  Then you can
         raise the air-frame to launch position, and issue a 'reset' command 
@@ -305,21 +544,21 @@ NAR
         tower with a screw-driver trying to turn on your avionics before 
         installing igniters!
       </p><p>
-       TeleMini is configured via the radio link. Of course, that
+       TeleMini v1.0 is configured solely via the radio link. Of course, that
        means you need to know the TeleMini radio configuration values
        or you won't be able to communicate with it. For situations
-       when you don't have the radio configuration values, TeleMini
+       when you don't have the radio configuration values, TeleMini v1.0
        offers an 'emergency recovery' mode. In this mode, TeleMini is
        configured as follows:
-       </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+       </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            Sets the radio frequency to 434.550MHz
-         </li><li class="listitem">
+           </p></li><li class="listitem"><p>
            Sets the radio calibration back to the factory value.
-         </li><li class="listitem">
+           </p></li><li class="listitem"><p>
            Sets the callsign to N0CALL
-         </li><li class="listitem">
+           </p></li><li class="listitem"><p>
            Does not go to 'pad' mode after five seconds.
-         </li></ul></div><p>
+           </p></li></ul></div><p>
       </p><p>
        To get into 'emergency recovery' mode, first find the row of
        four small holes opposite the switch wiring. Using a short
@@ -327,17 +566,17 @@ NAR
        together, then power TeleMini up. Once the red LED is lit,
        disconnect the wire and the board should signal that it's in
        'idle' mode after the initial five second startup period.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp2284648"></a>2. GPS </h2></div></div></div><p>
-        TeleMetrum includes a complete GPS receiver.  A complete explanation 
-        of how GPS works is beyond the scope of this manual, but the bottom 
-        line is that the TeleMetrum GPS receiver needs to lock onto at least 
-        four satellites to obtain a solid 3 dimensional position fix and know
-        what time it is.
-      </p><p>
-        TeleMetrum provides backup power to the GPS chip any time a 
-        battery is connected.  This allows the receiver to "warm start" on
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58467152"></a>2. GPS </h2></div></div></div><p>
+        TeleMetrum and TeleMega include a complete GPS receiver.  A
+        complete explanation of how GPS works is beyond the scope of
+        this manual, but the bottom line is that the GPS receiver
+        needs to lock onto at least four satellites to obtain a solid
+        3 dimensional position fix and know what time it is.
+      </p><p>
+        The flight computers provide backup power to the GPS chip any time a 
+        battery is connected.  This allows the receiver to &#8220;warm start&#8221; on
         the launch rail much faster than if every power-on were a GPS 
-       "cold start".  In typical operations, powering up TeleMetrum
+       &#8220;cold start&#8221;.  In typical operations, powering up
         on the flight line in idle mode while performing final air-frame
         preparation will be sufficient to allow the GPS receiver to cold
         start and acquire lock.  Then the board can be powered down during
@@ -345,7 +584,7 @@ NAR
         is turned back on, the GPS system should lock very quickly, typically
         long before igniter installation and return to the flight line are
         complete.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp753536"></a>3. Controlling An Altimeter Over The Radio Link</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58469936"></a>3. Controlling An Altimeter Over The Radio Link</h2></div></div></div><p>
         One of the unique features of the Altus Metrum system is the
         ability to create a two way command link between TeleDongle
         and an altimeter using the digital radio transceivers
@@ -353,10 +592,10 @@ NAR
         altimeter from afar, as if it were directly connected to the
         computer.
       </p><p>
-        Any operation which can be performed with TeleMetrum can
-        either be done with TeleMetrum directly connected to the
+        Any operation which can be performed with a flight computer can
+        either be done with the device directly connected to the
         computer via the USB cable, or through the radio
-        link. TeleMini doesn't provide a USB connector and so it is
+        link. TeleMini v1.0 doesn't provide a USB connector and so it is
         always communicated with over radio.  Select the appropriate 
         TeleDongle device when the list of devices is presented and 
         AltosUI will interact with an altimeter over the radio link.
@@ -375,16 +614,17 @@ NAR
             Save Flight Data&#8212;Recover flight data from the rocket without
             opening it up.
           </p></li><li class="listitem"><p>
-            Configure altimeter apogee delays or main deploy heights
+            Configure altimeter apogee delays, main deploy heights
+           and additional pyro event conditions
             to respond to changing launch conditions. You can also
             'reboot' the altimeter. Use this to remotely enable the
-            flight computer by turning TeleMetrum on in "idle" mode,
+            flight computer by turning TeleMetrum or TeleMega on in &#8220;idle&#8221; mode,
             then once the air-frame is oriented for launch, you can
             reboot the altimeter and have it restart in pad mode
             without having to climb the scary ladder.
           </p></li><li class="listitem"><p>
             Fire Igniters&#8212;Test your deployment charges without snaking
-            wires out through holes in the air-frame. Simply assembly the
+            wires out through holes in the air-frame. Simply assemble the
             rocket as if for flight with the apogee and main charges
             loaded, then remotely command the altimeter to fire the
             igniters.
@@ -395,9 +635,10 @@ NAR
         the monitor flight tab, then use the frequency selector and 
         close the window before performing other desired radio operations.
       </p><p>
-        TeleMetrum only enables radio commanding in 'idle' mode, so
-        make sure you have TeleMetrum lying horizontally when you turn
-        it on. Otherwise, TeleMetrum will start in 'pad' mode ready for
+        The flight computers only enable radio commanding in 'idle' mode.
+       TeleMetrum and TeleMega use the accelerometer to detect which orientation they
+       start up in, so make sure you have the flight computer lying horizontally when you turn
+        it on. Otherwise, it will start in 'pad' mode ready for
         flight, and will not be listening for command packets from TeleDongle.
       </p><p>
        TeleMini listens for a command packet for five seconds after
@@ -414,70 +655,78 @@ NAR
         lights on the devices. The red LED will flash each time a packet
         is transmitted, while the green LED will light up on TeleDongle when 
         it is waiting to receive a packet from the altimeter.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp760992"></a>4. Ground Testing </h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58481232"></a>4. Ground Testing </h2></div></div></div><p>
         An important aspect of preparing a rocket using electronic deployment
         for flight is ground testing the recovery system.  Thanks
         to the bi-directional radio link central to the Altus Metrum system,
-        this can be accomplished in a TeleMetrum or TeleMini equipped rocket 
+        this can be accomplished in a TeleMega, TeleMetrum or TeleMini equipped rocket 
         with less work than you may be accustomed to with other systems.  It 
         can even be fun!
       </p><p>
         Just prep the rocket for flight, then power up the altimeter
-        in "idle" mode (placing air-frame horizontal for TeleMetrum or
-        selected the Configure Altimeter tab for TeleMini).  This will cause 
-        the firmware to go into "idle" mode, in which the normal flight
+        in &#8220;idle&#8221; mode (placing air-frame horizontal for TeleMetrum or TeleMega, or
+        selecting the Configure Altimeter tab for TeleMini).  This will cause 
+        the firmware to go into &#8220;idle&#8221; mode, in which the normal flight
         state machine is disabled and charges will not fire without
         manual command.  You can now command the altimeter to fire the apogee
         or main charges from a safe distance using your computer and 
         TeleDongle and the Fire Igniter tab to complete ejection testing.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp762792"></a>5. Radio Link </h2></div></div></div><p>
-        The chip our boards are based on incorporates an RF transceiver, but
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58483984"></a>5. Radio Link </h2></div></div></div><p>
+        Our flight computers all incorporate an RF transceiver, but
         it's not a full duplex system... each end can only be transmitting or
         receiving at any given moment.  So we had to decide how to manage the
         link.
       </p><p>
         By design, the altimeter firmware listens for the radio link when
-        it's in "idle mode", which
+        it's in &#8220;idle mode&#8221;, which
         allows us to use the radio link to configure the rocket, do things like
         ejection tests, and extract data after a flight without having to
-        crack open the air-frame.  However, when the board is in "flight
-        mode", the altimeter only
+        crack open the air-frame.  However, when the board is in &#8220;flight
+        mode&#8221;, the altimeter only
         transmits and doesn't listen at all.  That's because we want to put
         ultimate priority on event detection and getting telemetry out of
         the rocket through
         the radio in case the rocket crashes and we aren't able to extract
         data later...
       </p><p>
-        We don't use a 'normal packet radio' mode like APRS because they're 
-        just too inefficient.  The GFSK modulation we use is FSK with the
-        base-band pulses passed through a
-        Gaussian filter before they go into the modulator to limit the
-        transmitted bandwidth.  When combined with the hardware forward error
-        correction support in the cc1111 chip, this allows us to have a very
-        robust 38.4 kilobit data link with only 10 milliwatts of transmit 
-        power, a whip antenna in the rocket, and a hand-held Yagi on the 
-        ground.  We've had flights to above 21k feet AGL with great reception, 
-        and calculations suggest we should be good to well over 40k feet AGL 
-        with a 5-element yagi on the ground.  We hope to fly boards to higher 
-        altitudes over time, and would of course appreciate customer feedback 
-        on performance in higher altitude flights!
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp55640"></a>6. Configurable Parameters</h2></div></div></div><p>
+        We don't generally use a 'normal packet radio' mode like APRS
+        because they're just too inefficient.  The GFSK modulation we
+        use is FSK with the base-band pulses passed through a Gaussian
+        filter before they go into the modulator to limit the
+        transmitted bandwidth.  When combined with forward error
+        correction and interleaving, this allows us to have a very
+        robust 19.2 kilobit data link with only 10-40 milliwatts of
+        transmit power, a whip antenna in the rocket, and a hand-held
+        Yagi on the ground.  We've had flights to above 21k feet AGL
+        with great reception, and calculations suggest we should be
+        good to well over 40k feet AGL with a 5-element yagi on the
+        ground with our 10mW units and over 100k feet AGL with the
+        40mW devices.  We hope to fly boards to higher altitudes over
+        time, and would of course appreciate customer feedback on
+        performance in higher altitude flights!
+      </p><p>
+       TeleMetrum v2.0 and TeleMega can send APRS if desired, and the
+       interval between APRS packets can be configured. As each APRS
+       packet takes a full second to transmit, we recommend an
+       interval of at least 5 seconds to avoid consuming too much
+       battery power or radio channel bandwidth.
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58488672"></a>6. Configurable Parameters</h2></div></div></div><p>
         Configuring an Altus Metrum altimeter for flight is very
-        simple.  Even on our baro-only TeleMini board, the use of a Kalman 
-        filter means there is no need to set a "mach delay".  The few 
+        simple.  Even on our baro-only TeleMini and EasyMini boards, the use of a Kalman 
+        filter means there is no need to set a &#8220;mach delay&#8221;.  The few 
         configurable parameters can all be set using AltosUI over USB or
         or radio link via TeleDongle.
-      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp56488"></a>6.1. Radio Frequency</h3></div></div></div><p>
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58490416"></a>6.1. Radio Frequency</h3></div></div></div><p>
          Altus Metrum boards support radio frequencies in the 70cm
          band. By default, the configuration interface provides a
-         list of 10 "standard" frequencies in 100kHz channels starting at
+         list of 10 &#8220;standard&#8221; frequencies in 100kHz channels starting at
          434.550MHz.  However, the firmware supports use of
          any 50kHz multiple within the 70cm band. At any given
          launch, we highly recommend coordinating when and by whom each
          frequency will be used to avoid interference.  And of course, both
          altimeter and TeleDongle must be configured to the same
          frequency to successfully communicate with each other.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp57656"></a>6.2. Apogee Delay</h3></div></div></div><p>
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58492464"></a>6.2. Apogee Delay</h3></div></div></div><p>
           Apogee delay is the number of seconds after the altimeter detects flight
           apogee that the drogue charge should be fired.  In most cases, this
           should be left at the default of 0.  However, if you are flying
@@ -493,7 +742,7 @@ NAR
           or 3 seconds later to avoid any chance of both charges
           firing simultaneously.  We've flown several air-frames this
           way quite happily, including Keith's successful L3 cert.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp59488"></a>6.3. Main Deployment Altitude</h3></div></div></div><p>
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58495056"></a>6.3. Main Deployment Altitude</h3></div></div></div><p>
           By default, the altimeter will fire the main deployment charge at an
           elevation of 250 meters (about 820 feet) above ground.  We think this
           is a good elevation for most air-frames, but feel free to change this
@@ -502,87 +751,153 @@ NAR
           deployment elevation for the backup altimeter to be something lower
           than the primary so that both pyrotechnic charges don't fire
           simultaneously.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp61128"></a>6.4. Maximum Flight Log</h3></div></div></div><p>
-         TeleMetrum version 1.1 and 1.2 have 2MB of on-board flash storage,
-         enough to hold over 40 minutes of data at full data rate
-         (100 samples/second). TeleMetrum 1.0 has 1MB of on-board
-         storage. As data are stored at a reduced rate during descent
-         (10 samples/second), there's plenty of space to store many
-         flights worth of data.
-       </p><p>
-         The on-board flash is partitioned into separate flight logs,
-         each of a fixed maximum size. Increase the maximum size of
-         each log and you reduce the number of flights that can be
-         stored. Decrease the size and TeleMetrum can store more
-         flights.
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58496752"></a>6.4. Maximum Flight Log</h3></div></div></div><p>
+         Changing this value will set the maximum amount of flight
+         log storage that an individual flight will use. The
+         available storage is divided into as many flights of the
+         specified size as can fit in the available space. You can
+         download and erase individual flight logs. If you fill up
+         the available storage, future flights will not get logged
+         until you erase some of the stored ones.
        </p><p>
-         All of the configuration data is also stored in the flash
-         memory, which consumes 64kB on TeleMetrum v1.1/v1.2 and 256B on
-         TeleMetrum v1.0. This configuration space is not available
-         for storing flight log data.
-       </p><p>
-         To compute the amount of space needed for a single flight,
-         you can multiply the expected ascent time (in seconds) by
-         800, multiply the expected descent time (in seconds) by 80
-         and add the two together. That will slightly under-estimate
-         the storage (in bytes) needed for the flight. For instance,
-         a flight spending 20 seconds in ascent and 150 seconds in
-         descent will take about (20 * 800) + (150 * 80) = 28000
-         bytes of storage. You could store dozens of these flights in
-         the on-board flash.
-       </p><p>
-         The default size, 192kB, allows for 10 flights of storage on
-         TeleMetrum v1.1/v1.2 and 5 flights on TeleMetrum v1.0. This
-         ensures that you won't need to erase the memory before
-         flying each time while still allowing more than sufficient
-         storage for each flight.
-       </p><p>
-         As TeleMini does not contain an accelerometer, it stores
-         data at 10 samples per second during ascent and one sample
-         per second during descent. Each sample is a two byte reading
-         from the barometer. These are stored in 5kB of
-         on-chip flash memory which can hold 256 seconds at the
-         ascent rate or 2560 seconds at the descent rate. Because of
-         the limited storage, TeleMini cannot hold data for more than
-         one flight, and so must be erased after each flight or it
-         will not capture data for subsequent flights.
-       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp64904"></a>6.5. Ignite Mode</h3></div></div></div><p>
+         Even though our flight computers (except TeleMini v1.0) can store
+         multiple flights, we strongly recommend downloading and saving
+         flight data after each flight.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58498896"></a>6.5. Ignite Mode</h3></div></div></div><p>
          Instead of firing one charge at apogee and another charge at
          a fixed height above the ground, you can configure the
          altimeter to fire both at apogee or both during
-         descent. This was added to support an airframe that has two
-         TeleMetrum computers, one in the fin can and one in the
-         nose.
+         descent. This was added to support an airframe Bdale designed that 
+         had two altimeters, one in the fin can and one in the nose.
        </p><p>
          Providing the ability to use both igniters for apogee or
          main allows some level of redundancy without needing two
          flight computers.  In Redundant Apogee or Redundant Main
          mode, the two charges will be fired two seconds apart.
-       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp66248"></a>6.6. Pad Orientation</h3></div></div></div><p>
-         TeleMetrum measures acceleration along the axis of the
-         board. Which way the board is oriented affects the sign of
-         the acceleration value. Instead of trying to guess which way
-         the board is mounted in the air frame, TeleMetrum must be
-         explicitly configured for either Antenna Up or Antenna
-         Down. The default, Antenna Up, expects the end of the
-         TeleMetrum board connected to the 70cm antenna to be nearest
-         the nose of the rocket, with the end containing the screw
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58501008"></a>6.6. Pad Orientation</h3></div></div></div><p>
+         TeleMetrum and TeleMega measure acceleration along the axis
+         of the board. Which way the board is oriented affects the
+         sign of the acceleration value. Instead of trying to guess
+         which way the board is mounted in the air frame, the
+         altimeter must be explicitly configured for either Antenna
+         Up or Antenna Down. The default, Antenna Up, expects the end
+         of the board connected to the 70cm antenna to be nearest the
+         nose of the rocket, with the end containing the screw
          terminals nearest the tail.
-       </p></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp67528"></a>Chapter 6. AltosUI</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp68608">1. Monitor Flight</a></span></dt><dd><dl><dt><span class="section"><a href="#idp75208">1.1. Launch Pad</a></span></dt><dt><span class="section"><a href="#idp3850840">1.2. Ascent</a></span></dt><dt><span class="section"><a href="#idp3852992">1.3. Descent</a></span></dt><dt><span class="section"><a href="#idp3856520">1.4. Landed</a></span></dt><dt><span class="section"><a href="#idp3859448">1.5. Site Map</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3861728">2. Save Flight Data</a></span></dt><dt><span class="section"><a href="#idp3864648">3. Replay Flight</a></span></dt><dt><span class="section"><a href="#idp3865896">4. Graph Data</a></span></dt><dt><span class="section"><a href="#idp3869184">5. Export Data</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3870192">5.1. Comma Separated Value Format</a></span></dt><dt><span class="section"><a href="#idp3871768">5.2. Keyhole Markup Language (for Google Earth)</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3872600">6. Configure Altimeter</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3876776">6.1. Main Deploy Altitude</a></span></dt><dt><span class="section"><a href="#idp3877760">6.2. Apogee Delay</a></span></dt><dt><span class="section"><a href="#idp3878800">6.3. Radio Frequency</a></span></dt><dt><span class="section"><a href="#idp3879712">6.4. Radio Calibration</a></span></dt><dt><span class="section"><a href="#idp3880776">6.5. Callsign</a></span></dt><dt><span class="section"><a href="#idp3881512">6.6. Maximum Flight Log Size</a></span></dt><dt><span class="section"><a href="#idp3882376">6.7. Ignite Mode</a></span></dt><dt><span class="section"><a href="#idp3885216">6.8. Pad Orientation</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3887440">7. Configure AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3888064">7.1. Voice Settings</a></span></dt><dt><span class="section"><a href="#idp3890336">7.2. Log Directory</a></span></dt><dt><span class="section"><a href="#idp3891560">7.3. Callsign</a></span></dt><dt><span class="section"><a href="#idp3892528">7.4. Imperial Units</a></span></dt><dt><span class="section"><a href="#idp3893432">7.5. Font Size</a></span></dt><dt><span class="section"><a href="#idp3894136">7.6. Serial Debug</a></span></dt><dt><span class="section"><a href="#idp3895048">7.7. Manage Frequencies</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3896032">8. Configure Groundstation</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3899952">8.1. Frequency</a></span></dt><dt><span class="section"><a href="#idp3900936">8.2. Radio Calibration</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3901928">9. Flash Image</a></span></dt><dt><span class="section"><a href="#idp3905000">10. Fire Igniter</a></span></dt><dt><span class="section"><a href="#idp3907104">11. Scan Channels</a></span></dt><dt><span class="section"><a href="#idp3908008">12. Load Maps</a></span></dt><dt><span class="section"><a href="#idp3910136">13. Monitor Idle</a></span></dt></dl></div><p>
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58502704"></a>6.7. Configurable Pyro Channels</h3></div></div></div><p>
+         In addition to the usual Apogee and Main pyro channels,
+         TeleMega has four additional channels that can be configured
+         to activate when various flight conditions are
+         satisfied. You can select as many conditions as necessary;
+         all of them must be met in order to activate the
+         channel. The conditions available are:
+       </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+             Acceleration away from the ground. Select a value, and
+             then choose whether acceleration should be above or
+             below that value. Acceleration is positive upwards, so
+             accelerating towards the ground would produce negative
+             numbers. Acceleration during descent is noisy and
+             inaccurate, so be careful when using it during these
+             phases of the flight.
+           </p></li><li class="listitem"><p>
+             Vertical speed.  Select a value, and then choose whether
+             vertical speed should be above or below that
+             value. Speed is positive upwards, so moving towards the
+             ground would produce negative numbers. Speed during
+             descent is a bit noisy and so be careful when using it
+             during these phases of the flight.
+           </p></li><li class="listitem"><p>
+             Height. Select a value, and then choose whether the
+             height above the launch pad should be above or below
+             that value.
+           </p></li><li class="listitem"><p>
+             Orientation. TeleMega contains a 3-axis gyroscope and
+             accelerometer which is used to measure the current
+             angle. Note that this angle is not the change in angle
+             from the launch pad, but rather absolute relative to
+             gravity; the 3-axis accelerometer is used to compute the
+             angle of the rocket on the launch pad and initialize the
+             system. Because this value is computed by integrating
+             rate gyros, it gets progressively less accurate as the
+             flight goes on. It should have an accumulated error of
+             less than 0.2°/second (after 10 seconds of flight, the
+             error should be less than 2°).
+           </p><p>
+             The usual use of the orientation configuration is to
+             ensure that the rocket is traveling mostly upwards when
+             deciding whether to ignite air starts or additional
+             stages. For that, choose a reasonable maximum angle
+             (like 20°) and set the motor igniter to require an angle
+             of less than that value.
+           </p></li><li class="listitem"><p>
+             Flight Time. Time since boost was detected. Select a
+             value and choose whether to activate the pyro channel
+             before or after that amount of time.
+           </p></li><li class="listitem"><p>
+             Ascending. A simple test saying whether the rocket is
+             going up or not. This is exactly equivalent to testing
+             whether the speed is &gt; 0.
+           </p></li><li class="listitem"><p>
+             Descending. A simple test saying whether the rocket is
+             going down or not. This is exactly equivalent to testing
+             whether the speed is &lt; 0.
+           </p></li><li class="listitem"><p>
+             After Motor. The flight software counts each time the
+             rocket starts accelerating (presumably due to a motor or
+             motors igniting). Use this value to count ignitions for
+             multi-staged or multi-airstart launches.
+           </p></li><li class="listitem"><p>
+             Delay. This value doesn't perform any checks, instead it
+             inserts a delay between the time when the other
+             parameters become true and when the pyro channel is
+             activated.
+           </p></li><li class="listitem"><p>
+             Flight State. The flight software tracks the flight
+             through a sequence of states:
+             </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+                   Boost. The motor has lit and the rocket is
+                   accelerating upwards.
+                 </p></li><li class="listitem"><p>
+                   Fast. The motor has burned out and the rocket is
+                   descellerating, but it is going faster than 200m/s.
+                 </p></li><li class="listitem"><p>
+                   Coast. The rocket is still moving upwards and
+                   decelerating, but the speed is less than 200m/s.
+                 </p></li><li class="listitem"><p>
+                   Drogue. The rocket has reached apogee and is heading
+                   back down, but is above the configured Main
+                   altitude.
+                 </p></li><li class="listitem"><p>
+                   Main. The rocket is still descending, and is below
+                   the Main altitude
+                 </p></li><li class="listitem"><p>
+                   Landed. The rocket is no longer moving.
+                 </p></li></ol></div><p>
+           </p><p>
+             You can select a state to limit when the pyro channel
+             may activate; note that the check is based on when the
+             rocket transitions <span class="emphasis"><em>into</em></span> the state, and so checking for
+             &#8220;greater than Boost&#8221; means that the rocket is currently
+             in boost or some later state.
+           </p><p>
+             When a motor burns out, the rocket enters either Fast or
+             Coast state (depending on how fast it is moving). If the
+             computer detects upwards acceleration again, it will
+             move back to Boost state.
+           </p></li></ul></div></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp58525184"></a>Chapter 6. AltosUI</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp58528800">1. Monitor Flight</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58541520">1.1. Launch Pad</a></span></dt><dt><span class="section"><a href="#idp58557152">1.2. Ascent</a></span></dt><dt><span class="section"><a href="#idp58562608">1.3. Descent</a></span></dt><dt><span class="section"><a href="#idp58569472">1.4. Landed</a></span></dt><dt><span class="section"><a href="#idp58575904">1.5. Table</a></span></dt><dt><span class="section"><a href="#idp58579488">1.6. Site Map</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58585152">2. Save Flight Data</a></span></dt><dt><span class="section"><a href="#idp58589632">3. Replay Flight</a></span></dt><dt><span class="section"><a href="#idp58591664">4. Graph Data</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58594048">4.1. Flight Graph</a></span></dt><dt><span class="section"><a href="#idp58598496">4.2. Configure Graph</a></span></dt><dt><span class="section"><a href="#idp58602160">4.3. Flight Statistics</a></span></dt><dt><span class="section"><a href="#idp58605680">4.4. Map</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58609536">5. Export Data</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58611648">5.1. Comma Separated Value Format</a></span></dt><dt><span class="section"><a href="#idp58614000">5.2. Keyhole Markup Language (for Google Earth)</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58615488">6. Configure Altimeter</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58627792">6.1. Main Deploy Altitude</a></span></dt><dt><span class="section"><a href="#idp58629360">6.2. Apogee Delay</a></span></dt><dt><span class="section"><a href="#idp58630976">6.3. Radio Frequency</a></span></dt><dt><span class="section"><a href="#idp58632480">6.4. RF Calibration</a></span></dt><dt><span class="section"><a href="#idp58634128">6.5. Telemetry/RDF/APRS Enable</a></span></dt><dt><span class="section"><a href="#idp58635424">6.6. APRS Interval</a></span></dt><dt><span class="section"><a href="#idp58636928">6.7. Callsign</a></span></dt><dt><span class="section"><a href="#idp58638240">6.8. Maximum Flight Log Size</a></span></dt><dt><span class="section"><a href="#idp58639680">6.9. Ignite Mode</a></span></dt><dt><span class="section"><a href="#idp58646672">6.10. Pad Orientation</a></span></dt><dt><span class="section"><a href="#idp58651888">6.11. Configure Pyro Channels</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58657696">7. Configure AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58661200">7.1. Voice Settings</a></span></dt><dt><span class="section"><a href="#idp58666224">7.2. Log Directory</a></span></dt><dt><span class="section"><a href="#idp58668224">7.3. Callsign</a></span></dt><dt><span class="section"><a href="#idp58670464">7.4. Imperial Units</a></span></dt><dt><span class="section"><a href="#idp58671968">7.5. Font Size</a></span></dt><dt><span class="section"><a href="#idp58673248">7.6. Serial Debug</a></span></dt><dt><span class="section"><a href="#idp58674752">7.7. Manage Frequencies</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58676384">8. Configure Groundstation</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58687504">8.1. Frequency</a></span></dt><dt><span class="section"><a href="#idp58689072">8.2. Radio Calibration</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58690704">9. Flash Image</a></span></dt><dt><span class="section"><a href="#idp58692336">10. Fire Igniter</a></span></dt><dt><span class="section"><a href="#idp58697968">11. Scan Channels</a></span></dt><dt><span class="section"><a href="#idp58701824">12. Load Maps</a></span></dt><dt><span class="section"><a href="#idp58707520">13. Monitor Idle</a></span></dt></dl></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="altosui.png" width="495"></td></tr></table></div></div><p>
       The AltosUI program provides a graphical user interface for
-      interacting with the Altus Metrum product family, including
-      TeleMetrum, TeleMini and TeleDongle. AltosUI can monitor telemetry data,
-      configure TeleMetrum, TeleMini and TeleDongle devices and many other
+      interacting with the Altus Metrum product family. AltosUI can
+      monitor telemetry data, configure devices and many other
       tasks. The primary interface window provides a selection of
-      buttons, one for each major activity in the system.  This manual
-      is split into chapters, each of which documents one of the tasks
+      buttons, one for each major activity in the system.  This chapter
+      is split into sections, each of which documents one of the tasks
       provided from the top-level toolbar.
-    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp68608"></a>1. Monitor Flight</h2></div><div><h3 class="subtitle">Receive, Record and Display Telemetry Data</h3></div></div></div><p>
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58528800"></a>1. Monitor Flight</h2></div><div><h3 class="subtitle">Receive, Record and Display Telemetry Data</h3></div></div></div><p>
         Selecting this item brings up a dialog box listing all of the
         connected TeleDongle devices. When you choose one of these,
         AltosUI will create a window to display telemetry data as
         received by the selected TeleDongle device.
-      </p><p>
+      </p><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="315"><tr><td><img src="device-selection.png" width="315"></td></tr></table></div></div><p>
         All telemetry data received are automatically recorded in
         suitable log files. The name of the files includes the current
         date and rocket serial and flight numbers.
@@ -624,56 +939,57 @@ NAR
         data relevant to the current state of the flight. You can select
         other tabs at any time. The final 'table' tab displays all of
         the raw telemetry values in one place in a spreadsheet-like format.
-      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp75208"></a>1.1. Launch Pad</h3></div></div></div><p>
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58541520"></a>1.1. Launch Pad</h3></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="launch-pad.png" width="495"></td></tr></table></div></div><p>
           The 'Launch Pad' tab shows information used to decide when the
           rocket is ready for flight. The first elements include red/green
           indicators, if any of these is red, you'll want to evaluate
           whether the rocket is ready to launch:
-          </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
-                Battery Voltage. This indicates whether the Li-Po battery
-                powering the TeleMetrum has sufficient charge to last for
-                the duration of the flight. A value of more than
-                3.7V is required for a 'GO' status.
-              </p></li><li class="listitem"><p>
-                Apogee Igniter Voltage. This indicates whether the apogee
-                igniter has continuity. If the igniter has a low
-                resistance, then the voltage measured here will be close
-                to the Li-Po battery voltage. A value greater than 3.2V is
-                required for a 'GO' status.
-              </p></li><li class="listitem"><p>
-                Main Igniter Voltage. This indicates whether the main
-                igniter has continuity. If the igniter has a low
-                resistance, then the voltage measured here will be close
-                to the Li-Po battery voltage. A value greater than 3.2V is
-                required for a 'GO' status.
-              </p></li><li class="listitem"><p>
-               On-board Data Logging. This indicates whether there is
-               space remaining on-board to store flight data for the
-               upcoming flight. If you've downloaded data, but failed
-               to erase flights, there may not be any space
-               left. TeleMetrum can store multiple flights, depending
-               on the configured maximum flight log size. TeleMini
-               stores only a single flight, so it will need to be
-               downloaded and erased after each flight to capture
-               data. This only affects on-board flight logging; the
-               altimeter will still transmit telemetry and fire
-               ejection charges at the proper times.
-             </p></li><li class="listitem"><p>
-                GPS Locked. For a TeleMetrum device, this indicates whether the GPS receiver is
-                currently able to compute position information. GPS requires
-                at least 4 satellites to compute an accurate position.
-              </p></li><li class="listitem"><p>
-                GPS Ready. For a TeleMetrum device, this indicates whether GPS has reported at least
-                10 consecutive positions without losing lock. This ensures
-                that the GPS receiver has reliable reception from the
-                satellites.
-              </p></li></ul></div><p>
-          </p><p>
-            The Launchpad tab also shows the computed launch pad position
-            and altitude, averaging many reported positions to improve the
-            accuracy of the fix.
-          </p><p>
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3850840"></a>1.2. Ascent</h3></div></div></div><p>
+          </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Battery Voltage</span></dt><dd><p>
+                 This indicates whether the Li-Po battery powering the 
+                 flight computer has sufficient charge to last for
+                 the duration of the flight. A value of more than
+                 3.8V is required for a 'GO' status.
+               </p></dd><dt><span class="term">Apogee Igniter Voltage</span></dt><dd><p>
+                 This indicates whether the apogee
+                 igniter has continuity. If the igniter has a low
+                 resistance, then the voltage measured here will be close
+                 to the Li-Po battery voltage. A value greater than 3.2V is
+                 required for a 'GO' status.
+               </p></dd><dt><span class="term">Main Igniter Voltage</span></dt><dd><p>
+                 This indicates whether the main
+                 igniter has continuity. If the igniter has a low
+                 resistance, then the voltage measured here will be close
+                 to the Li-Po battery voltage. A value greater than 3.2V is
+                 required for a 'GO' status.
+               </p></dd><dt><span class="term">On-board Data Logging</span></dt><dd><p>
+                 This indicates whether there is
+                 space remaining on-board to store flight data for the
+                 upcoming flight. If you've downloaded data, but failed
+                 to erase flights, there may not be any space
+                 left. Most of our flight computers can store multiple 
+                 flights, depending on the configured maximum flight log 
+                 size. TeleMini v1.0 stores only a single flight, so it 
+                 will need to be
+                 downloaded and erased after each flight to capture
+                 data. This only affects on-board flight logging; the
+                 altimeter will still transmit telemetry and fire
+                 ejection charges at the proper times even if the flight
+                 data storage is full.
+               </p></dd><dt><span class="term">GPS Locked</span></dt><dd><p>
+                 For a TeleMetrum or TeleMega device, this indicates whether the GPS receiver is
+                 currently able to compute position information. GPS requires
+                 at least 4 satellites to compute an accurate position.
+               </p></dd><dt><span class="term">GPS Ready</span></dt><dd><p>
+                 For a TeleMetrum or TeleMega device, this indicates whether GPS has reported at least
+                 10 consecutive positions without losing lock. This ensures
+                 that the GPS receiver has reliable reception from the
+                 satellites.
+               </p></dd></dl></div><p>
+        </p><p>
+         The Launchpad tab also shows the computed launch pad position
+         and altitude, averaging many reported positions to improve the
+         accuracy of the fix.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58557152"></a>1.2. Ascent</h3></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="ascent.png" width="495"></td></tr></table></div></div><p>
           This tab is shown during Boost, Fast and Coast
           phases. The information displayed here helps monitor the
           rocket as it heads towards apogee.
@@ -683,7 +999,7 @@ NAR
           answer the most commonly asked questions you'll hear during
           flight.
         </p><p>
-          The current latitude and longitude reported by the TeleMetrum GPS are
+          The current latitude and longitude reported by the GPS are
           also shown. Note that under high acceleration, these values
           may not get updated as the GPS receiver loses position
           fix. Once the rocket starts coasting, the receiver should
@@ -692,7 +1008,7 @@ NAR
           Finally, the current igniter voltages are reported as in the
           Launch Pad tab. This can help diagnose deployment failures
           caused by wiring which comes loose under high acceleration.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3852992"></a>1.3. Descent</h3></div></div></div><p>
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58562608"></a>1.3. Descent</h3></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="descent.png" width="495"></td></tr></table></div></div><p>
           Once the rocket has reached apogee and (we hope) activated the
           apogee charge, attention switches to tracking the rocket on
           the way back to the ground, and for dual-deploy flights,
@@ -704,7 +1020,7 @@ NAR
          components, but generally range from 15-30m/s on drogue and should
          be below 10m/s when under the main parachute in a dual-deploy flight.
         </p><p>
-          For TeleMetrum altimeters, you can locate the rocket in the
+          With GPS-equipped flight computers, you can locate the rocket in the
           sky using the elevation and bearing information to figure
           out where to look. Elevation is in degrees above the
           horizon. Bearing is reported in degrees relative to true
@@ -721,7 +1037,7 @@ NAR
          e-matches are designed to retain continuity even after being
          fired, and will continue to show as green or return from red to
          green after firing.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3856520"></a>1.4. Landed</h3></div></div></div><p>
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58569472"></a>1.4. Landed</h3></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="landed.png" width="495"></td></tr></table></div></div><p>
           Once the rocket is on the ground, attention switches to
           recovery. While the radio signal is often lost once the
           rocket is on the ground, the last reported GPS position is
@@ -734,7 +1050,7 @@ NAR
           latitude and longitude and enter them into your hand-held GPS
           unit and have that compute a track to the landing location.
         </p><p>
-         Both TeleMini and TeleMetrum will continue to transmit RDF
+         Our flight computers will continue to transmit RDF
          tones after landing, allowing you to locate the rocket by
          following the radio signal if necessary. You may need to get 
          away from the clutter of the flight line, or even get up on 
@@ -744,13 +1060,19 @@ NAR
           during the flight are displayed for your admiring observers.
          The accuracy of these immediate values depends on the quality
          of your radio link and how many packets were received.  
-         Recovering the on-board data after flight will likely yield
+         Recovering the on-board data after flight may yield
          more precise results.
         </p><p>
          To get more detailed information about the flight, you can
          click on the 'Graph Flight' button which will bring up a
          graph window for the current flight.
-       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3859448"></a>1.5. Site Map</h3></div></div></div><p>
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58575904"></a>1.5. Table</h3></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="table.png" width="495"></td></tr></table></div></div><p>
+         The table view shows all of the data available from the
+         flight computer. Probably the most useful data on
+         this tab is the detailed GPS information, which includes
+         horizontal dilution of precision information, and
+         information about the signal being received from the satellites.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58579488"></a>1.6. Site Map</h3></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="site-map.png" width="495"></td></tr></table></div></div><p>
           When the TeleMetrum has a GPS fix, the Site Map tab will map
           the rocket's position to make it easier for you to locate the
           rocket, both while it is in the air, and when it has landed. The
@@ -769,21 +1091,19 @@ NAR
         </p><p>
          You can pre-load images for your favorite launch sites
          before you leave home; check out the 'Preload Maps' section below.
-       </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3861728"></a>2. Save Flight Data</h2></div></div></div><p>
+       </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58585152"></a>2. Save Flight Data</h2></div></div></div><p>
         The altimeter records flight data to its internal flash memory.
         TeleMetrum data is recorded at a much higher rate than the telemetry
         system can handle, and is not subject to radio drop-outs. As
         such, it provides a more complete and precise record of the
         flight. The 'Save Flight Data' button allows you to read the
-        flash memory and write it to disk. As TeleMini has only a barometer, it
-       records data at the same rate as the telemetry signal, but there will be
-       no data lost due to telemetry drop-outs.
+        flash memory and write it to disk. 
       </p><p>
         Clicking on the 'Save Flight Data' button brings up a list of
-        connected TeleMetrum and TeleDongle devices. If you select a
-        TeleMetrum device, the flight data will be downloaded from that
+        connected flight computers and TeleDongle devices. If you select a
+        flight computer, the flight data will be downloaded from that
         device directly. If you select a TeleDongle device, flight data
-        will be downloaded from an altimeter over radio link via the 
+        will be downloaded from a flight computer over radio link via the 
        specified TeleDongle. See the chapter on Controlling An Altimeter 
        Over The Radio Link for more information.
       </p><p>
@@ -800,7 +1120,7 @@ NAR
         The file name for each flight log is computed automatically
         from the recorded flight date, altimeter serial number and
         flight number information.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3864648"></a>3. Replay Flight</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58589632"></a>3. Replay Flight</h2></div></div></div><p>
         Select this button and you are prompted to select a flight
         record file, either a .telem file recording telemetry data or a
         .eeprom file containing flight data saved from the altimeter
@@ -809,42 +1129,49 @@ NAR
         Once a flight record is selected, the flight monitor interface
         is displayed and the flight is re-enacted in real time. Check
         the Monitor Flight chapter above to learn how this window operates.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3865896"></a>4. Graph Data</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58591664"></a>4. Graph Data</h2></div></div></div><p>
         Select this button and you are prompted to select a flight
         record file, either a .telem file recording telemetry data or a
         .eeprom file containing flight data saved from
         flash memory.
       </p><p>
-        Once a flight record is selected, a window with four tabs is
-        opened. The first tab contains a graph with acceleration
-        (blue), velocity (green) and altitude (red) of the flight,
-        measured in metric units. The apogee(yellow) and main(magenta)
-        igniter voltages are also displayed; high voltages indicate
-        continuity, low voltages indicate open circuits. The second
-        tab lets you configure which data to show in the graph.  The
-        third contains some basic flight statistics while the fourth
-        has a map with the ground track of the flight displayed.
+        Note that telemetry files will generally produce poor graphs
+        due to the lower sampling rate and missed telemetry packets.
+        Use saved flight data in .eeprom files for graphing where possible.
       </p><p>
+        Once a flight record is selected, a window with multiple tabs is
+        opened.
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58594048"></a>4.1. Flight Graph</h3></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="graph.png" width="495"></td></tr></table></div></div><p>
+         By default, the graph contains acceleration (blue),
+         velocity (green) and altitude (red).
+       </p><p>
         The graph can be zoomed into a particular area by clicking and
         dragging down and to the right. Once zoomed, the graph can be
         reset by clicking and dragging up and to the left. Holding down
         control and clicking and dragging allows the graph to be panned.
         The right mouse button causes a pop-up menu to be displayed, giving
         you the option save or print the plot.
-      </p><p>
-        Note that telemetry files will generally produce poor graphs
-        due to the lower sampling rate and missed telemetry packets.
-        Use saved flight data in .eeprom files for graphing where possible.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3869184"></a>5. Export Data</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58598496"></a>4.2. Configure Graph</h3></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="graph-configure.png" width="495"></td></tr></table></div></div><p>
+         This selects which graph elements to show, and, at the
+         very bottom, lets you switch between metric and
+         imperial units
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58602160"></a>4.3. Flight Statistics</h3></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="graph-stats.png" width="495"></td></tr></table></div></div><p>
+         Shows overall data computed from the flight.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58605680"></a>4.4. Map</h3></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="graph-map.png" width="495"></td></tr></table></div></div><p>
+         Shows a satellite image of the flight area overlaid
+         with the path of the flight. The red concentric
+         circles mark the launch pad, the black concentric
+         circles mark the landing location.
+       </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58609536"></a>5. Export Data</h2></div></div></div><p>
         This tool takes the raw data files and makes them available for
         external analysis. When you select this button, you are prompted to 
-       select a flight
-        data file (either .eeprom or .telem will do, remember that
-        .eeprom files contain higher resolution and more continuous
-        data). Next, a second dialog appears which is used to select
+       select a flight data file, which can be either a .eeprom or .telem.
+       The .eeprom files contain higher resolution and more continuous data, 
+       while .telem files contain receiver signal strength information.  
+       Next, a second dialog appears which is used to select
         where to write the resulting file. It has a selector to choose
         between CSV and KML file formats.
-      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3870192"></a>5.1. Comma Separated Value Format</h3></div></div></div><p>
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58611648"></a>5.1. Comma Separated Value Format</h3></div></div></div><p>
           This is a text file containing the data in a form suitable for
           import into a spreadsheet or other external data analysis
           tool. The first few lines of the file contain the version and
@@ -858,12 +1185,12 @@ NAR
           the sensor values are converted to standard units, with the
           barometric data reported in both pressure, altitude and
           height above pad units.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3871768"></a>5.2. Keyhole Markup Language (for Google Earth)</h3></div></div></div><p>
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58614000"></a>5.2. Keyhole Markup Language (for Google Earth)</h3></div></div></div><p>
           This is the format used by Google Earth to provide an overlay 
          within that application. With this, you can use Google Earth to 
          see the whole flight path in 3D.
-        </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3872600"></a>6. Configure Altimeter</h2></div></div></div><p>
-        Select this button and then select either a TeleMetrum or
+        </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58615488"></a>6. Configure Altimeter</h2></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="270"><tr><td><img src="configure-altimeter.png" width="270"></td></tr></table></div></div><p>
+        Select this button and then select either an altimeter or
         TeleDongle Device from the list provided. Selecting a TeleDongle
         device will use the radio link to configure a remote altimeter. 
       </p><p>
@@ -873,31 +1200,31 @@ NAR
         individual configuration entries.
       </p><p>
         At the bottom of the dialog, there are four buttons:
-      </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
-            Save. This writes any changes to the
-            configuration parameter block in flash memory. If you don't
-            press this button, any changes you make will be lost.
-          </p></li><li class="listitem"><p>
-            Reset. This resets the dialog to the most recently saved values,
-            erasing any changes you have made.
-          </p></li><li class="listitem"><p>
-            Reboot. This reboots the device. Use this to
-            switch from idle to pad mode by rebooting once the rocket is
-            oriented for flight, or to confirm changes you think you saved 
-           are really saved.
-          </p></li><li class="listitem"><p>
-            Close. This closes the dialog. Any unsaved changes will be
-            lost.
-          </p></li></ul></div><p>
+      </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Save</span></dt><dd><p>
+             This writes any changes to the
+             configuration parameter block in flash memory. If you don't
+             press this button, any changes you make will be lost.
+           </p></dd><dt><span class="term">Reset</span></dt><dd><p>
+             This resets the dialog to the most recently saved values,
+             erasing any changes you have made.
+           </p></dd><dt><span class="term">Reboot</span></dt><dd><p>
+             This reboots the device. Use this to
+             switch from idle to pad mode by rebooting once the rocket is
+             oriented for flight, or to confirm changes you think you saved 
+             are really saved.
+           </p></dd><dt><span class="term">Close</span></dt><dd><p>
+             This closes the dialog. Any unsaved changes will be
+             lost.
+           </p></dd></dl></div><p>
         The rest of the dialog contains the parameters to be configured.
-      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3876776"></a>6.1. Main Deploy Altitude</h3></div></div></div><p>
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58627792"></a>6.1. Main Deploy Altitude</h3></div></div></div><p>
           This sets the altitude (above the recorded pad altitude) at
           which the 'main' igniter will fire. The drop-down menu shows
           some common values, but you can edit the text directly and
           choose whatever you like. If the apogee charge fires below
           this altitude, then the main charge will fire two seconds
           after the apogee charge fires.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3877760"></a>6.2. Apogee Delay</h3></div></div></div><p>
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58629360"></a>6.2. Apogee Delay</h3></div></div></div><p>
           When flying redundant electronics, it's often important to
           ensure that multiple apogee charges don't fire at precisely
           the same time, as that can over pressurize the apogee deployment
@@ -905,13 +1232,13 @@ NAR
           Delay parameter tells the flight computer to fire the apogee
           charge a certain number of seconds after apogee has been
           detected.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3878800"></a>6.3. Radio Frequency</h3></div></div></div><p>
-          This configures which of the configured frequencies to use for both
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58630976"></a>6.3. Radio Frequency</h3></div></div></div><p>
+          This configures which of the frequencies to use for both
           telemetry and packet command mode. Note that if you set this
-          value via packet command mode, you will have to reconfigure
-          the TeleDongle frequency before you will be able to use packet
-          command mode again.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3879712"></a>6.4. Radio Calibration</h3></div></div></div><p>
+          value via packet command mode, the TeleDongle frequency will
+          also be automatically reconfigured to match so that
+          communication will continue afterwards.
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58632480"></a>6.4. RF Calibration</h3></div></div></div><p>
           The radios in every Altus Metrum device are calibrated at the
           factory to ensure that they transmit and receive on the
           specified frequency.  If you need to you can adjust the calibration 
@@ -919,60 +1246,91 @@ NAR
          the value means, read the appendix on calibration and/or the source
          code for more information.  To change a TeleDongle's calibration, 
          you must reprogram the unit completely.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3880776"></a>6.5. Callsign</h3></div></div></div><p>
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58634128"></a>6.5. Telemetry/RDF/APRS Enable</h3></div></div></div><p>
+         Enables the radio for transmission during flight. When
+         disabled, the radio will not transmit anything during flight
+         at all.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58635424"></a>6.6. APRS Interval</h3></div></div></div><p>
+         How often to transmit GPS information via APRS. This option
+         is available on TeleMetrum v2 and TeleMega
+         boards. TeleMetrum v1 boards cannot transmit APRS
+         packets. Note that a single APRS packet takes nearly a full
+         second to transmit, so enabling this option will prevent
+         sending any other telemetry during that time.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58636928"></a>6.7. Callsign</h3></div></div></div><p>
           This sets the call sign included in each telemetry packet. Set this
           as needed to conform to your local radio regulations.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3881512"></a>6.6. Maximum Flight Log Size</h3></div></div></div><p>
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58638240"></a>6.8. Maximum Flight Log Size</h3></div></div></div><p>
           This sets the space (in kilobytes) allocated for each flight
           log. The available space will be divided into chunks of this
           size. A smaller value will allow more flights to be stored,
           a larger value will record data from longer flights.
-       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3882376"></a>6.7. Ignite Mode</h3></div></div></div><p>
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58639680"></a>6.9. Ignite Mode</h3></div></div></div><p>
          TeleMetrum and TeleMini provide two igniter channels as they
          were originally designed as dual-deploy flight
          computers. This configuration parameter allows the two
          channels to be used in different configurations.
-       </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
-             Dual Deploy. This is the usual mode of operation; the
-             'apogee' channel is fired at apogee and the 'main'
-             channel at the height above ground specified by the
-             'Main Deploy Altitude' during descent.
-           </p></li><li class="listitem"><p>
-             Redundant Apogee. This fires both channels at
-             apogee, the 'apogee' channel first followed after a two second
-             delay by the 'main' channel.
-           </p></li><li class="listitem"><p>
-             Redundant Main. This fires both channels at the
-             height above ground specified by the Main Deploy
-             Altitude setting during descent. The 'apogee'
-             channel is fired first, followed after a two second
-             delay by the 'main' channel.
-           </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3885216"></a>6.8. Pad Orientation</h3></div></div></div><p>
-         Because it includes an accelerometer, TeleMetrum is
-         sensitive to the orientation of the board. By default, it
-         expects the antenna end to point forward. This parameter
-         allows that default to be changed, permitting the board to
-         be mounted with the antenna pointing aft instead.
-       </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
-             Antenna Up. In this mode, the antenna end of the
-             TeleMetrum board must point forward, in line with the
-             expected flight path.
-           </p></li><li class="listitem"><p>
-             Antenna Down. In this mode, the antenna end of the
-             TeleMetrum board must point aft, in line with the
-             expected flight path.
-           </p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3887440"></a>7. Configure AltosUI</h2></div></div></div><p>
+       </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Dual Deploy</span></dt><dd><p>
+                 This is the usual mode of operation; the
+                 'apogee' channel is fired at apogee and the 'main'
+                 channel at the height above ground specified by the
+                 'Main Deploy Altitude' during descent.
+               </p></dd><dt><span class="term">Redundant Apogee</span></dt><dd><p>
+                 This fires both channels at
+                 apogee, the 'apogee' channel first followed after a two second
+                 delay by the 'main' channel.
+               </p></dd><dt><span class="term">Redundant Main</span></dt><dd><p>
+                 This fires both channels at the
+                 height above ground specified by the Main Deploy
+                 Altitude setting during descent. The 'apogee'
+                 channel is fired first, followed after a two second
+                 delay by the 'main' channel.
+               </p></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58646672"></a>6.10. Pad Orientation</h3></div></div></div><p>
+         Because they include accelerometers, TeleMetrum and
+         TeleMega are sensitive to the orientation of the board. By
+         default, they expect the antenna end to point forward. This
+         parameter allows that default to be changed, permitting the
+         board to be mounted with the antenna pointing aft instead.
+       </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Antenna Up</span></dt><dd><p>
+               In this mode, the antenna end of the
+               flight computer must point forward, in line with the
+               expected flight path.
+             </p></dd><dt><span class="term">Antenna Down</span></dt><dd><p>
+               In this mode, the antenna end of the
+               flight computer must point aft, in line with the
+               expected flight path.
+             </p></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58651888"></a>6.11. Configure Pyro Channels</h3></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="540"><tr><td><img src="configure-pyro.png" width="540"></td></tr></table></div></div><p>
+         This opens a separate window to configure the additional
+         pyro channels available on TeleMega.  One column is
+         presented for each channel. Each row represents a single
+         parameter, if enabled the parameter must meet the specified
+         test for the pyro channel to be fired. See the Pyro Channels
+         section in the System Operation chapter above for a
+         description of these parameters.
+       </p><p>
+         Select conditions and set the related value; the pyro
+         channel will be activated when <span class="emphasis"><em>all</em></span> of the
+         conditions are met. Each pyro channel has a separate set of
+         configuration values, so you can use different values for
+         the same condition with different channels.
+       </p><p>
+         Once you have selected the appropriate configuration for all
+         of the necessary pyro channels, you can save the pyro
+         configuration along with the rest of the flight computer
+         configuration by pressing the 'Save' button in the main
+         Configure Flight Computer window.
+       </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58657696"></a>7. Configure AltosUI</h2></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="225"><tr><td><img src="configure-altosui.png" width="225"></td></tr></table></div></div><p>
         This button presents a dialog so that you can configure the AltosUI global settings.
-      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3888064"></a>7.1. Voice Settings</h3></div></div></div><p>
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58661200"></a>7.1. Voice Settings</h3></div></div></div><p>
           AltosUI provides voice announcements during flight so that you
           can keep your eyes on the sky and still get information about
           the current flight status. However, sometimes you don't want
           to hear them.
-        </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Enable&#8212;turns all voice announcements on and off</p></li><li class="listitem"><p>
-              Test Voice&#8212;Plays a short message allowing you to verify
-              that the audio system is working and the volume settings
-              are reasonable
-            </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3890336"></a>7.2. Log Directory</h3></div></div></div><p>
+        </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Enable</span></dt><dd><p>Turns all voice announcements on and off</p></dd><dt><span class="term">Test Voice</span></dt><dd><p>
+               Plays a short message allowing you to verify
+               that the audio system is working and the volume settings
+               are reasonable
+             </p></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58666224"></a>7.2. Log Directory</h3></div></div></div><p>
           AltosUI logs all telemetry data and saves all TeleMetrum flash
           data to this directory. This directory is also used as the
           staring point when selecting data files for display or export.
@@ -980,36 +1338,43 @@ NAR
           Click on the directory name to bring up a directory choosing
           dialog, select a new directory and click 'Select Directory' to
           change where AltosUI reads and writes data files.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3891560"></a>7.3. Callsign</h3></div></div></div><p>
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58668224"></a>7.3. Callsign</h3></div></div></div><p>
           This value is transmitted in each command packet sent from 
          TeleDongle and received from an altimeter.  It is not used in 
          telemetry mode, as the callsign configured in the altimeter board
          is included in all telemetry packets.  Configure this
           with the AltosUI operators call sign as needed to comply with
           your local radio regulations.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3892528"></a>7.4. Imperial Units</h3></div></div></div><p>
+        </p><p>
+         Note that to successfully command a flight computer over the radio
+         (to configure the altimeter, monitor idle, or fire pyro charges), 
+         the callsign configured here must exactly match the callsign
+         configured in the flight computer.  This matching is case 
+         sensitive.
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58670464"></a>7.4. Imperial Units</h3></div></div></div><p>
          This switches between metric units (meters) and imperial
          units (feet and miles). This affects the display of values
-         use during flight monitoring, data graphing and all of the
-         voice announcements. It does not change the units used when
-         exporting to CSV files, those are always produced in metric units.
-       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3893432"></a>7.5. Font Size</h3></div></div></div><p>
+         use during flight monitoring, configuration, data graphing
+         and all of the voice announcements. It does not change the
+         units used when exporting to CSV files, those are always
+         produced in metric units.
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58671968"></a>7.5. Font Size</h3></div></div></div><p>
          Selects the set of fonts used in the flight monitor
          window. Choose between the small, medium and large sets.
-       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3894136"></a>7.6. Serial Debug</h3></div></div></div><p>
+       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58673248"></a>7.6. Serial Debug</h3></div></div></div><p>
           This causes all communication with a connected device to be
           dumped to the console from which AltosUI was started. If
           you've started it from an icon or menu entry, the output
           will simply be discarded. This mode can be useful to debug
           various serial communication issues.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3895048"></a>7.7. Manage Frequencies</h3></div></div></div><p>
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58674752"></a>7.7. Manage Frequencies</h3></div></div></div><p>
          This brings up a dialog where you can configure the set of
          frequencies shown in the various frequency menus. You can
          add as many as you like, or even reconfigure the default
          set. Changing this list does not affect the frequency
          settings of any devices, it only changes the set of
          frequencies shown in the menus.
-       </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3896032"></a>8. Configure Groundstation</h2></div></div></div><p>
+       </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58676384"></a>8. Configure Groundstation</h2></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="270"><tr><td><img src="configure-groundstation.png" width="270"></td></tr></table></div></div><p>
         Select this button and then select a TeleDongle Device from the list provided.
       </p><p>
         The first few lines of the dialog provide information about the
@@ -1024,72 +1389,50 @@ NAR
        machine will cause settings made here to have no effect.
       </p><p>
         At the bottom of the dialog, there are three buttons:
-      </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
-            Save. This writes any changes to the
-            local Java preferences file. If you don't
-            press this button, any changes you make will be lost.
-          </p></li><li class="listitem"><p>
-            Reset. This resets the dialog to the most recently saved values,
-            erasing any changes you have made.
-          </p></li><li class="listitem"><p>
-            Close. This closes the dialog. Any unsaved changes will be
-            lost.
-          </p></li></ul></div><p>
+      </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Save</span></dt><dd><p>
+             This writes any changes to the
+             local Java preferences file. If you don't
+             press this button, any changes you make will be lost.
+           </p></dd><dt><span class="term">Reset</span></dt><dd><p>
+             This resets the dialog to the most recently saved values,
+             erasing any changes you have made.
+           </p></dd><dt><span class="term">Close</span></dt><dd><p>
+             This closes the dialog. Any unsaved changes will be
+             lost.
+           </p></dd></dl></div><p>
         The rest of the dialog contains the parameters to be configured.
-      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3899952"></a>8.1. Frequency</h3></div></div></div><p>
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58687504"></a>8.1. Frequency</h3></div></div></div><p>
           This configures the frequency to use for both telemetry and
           packet command mode. Set this before starting any operation
           involving packet command mode so that it will use the right
           frequency. Telemetry monitoring mode also provides a menu to
           change the frequency, and that menu also sets the same Java
           preference value used here.
-        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3900936"></a>8.2. Radio Calibration</h3></div></div></div><p>
+        </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58689072"></a>8.2. Radio Calibration</h3></div></div></div><p>
           The radios in every Altus Metrum device are calibrated at the
           factory to ensure that they transmit and receive on the
           specified frequency.  To change a TeleDongle's calibration, 
          you must reprogram the unit completely, so this entry simply
          shows the current value and doesn't allow any changes.
-        </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3901928"></a>9. Flash Image</h2></div></div></div><p>
-        This reprograms any Altus Metrum device by using a TeleMetrum
-        or TeleDongle as a programming dongle. Please read the
-        directions for flashing devices in the Updating Device
-        Firmware chapter below.
-      </p><p>
-        Once you have the programmer and target devices connected,
-        push the 'Flash Image' button. That will present a dialog box
-        listing all of the connected devices. Carefully select the
-        programmer device, not the device to be programmed.
-      </p><p>
-        Next, select the image to flash to the device. These are named
-        with the product name and firmware version. The file selector
-        will start in the directory containing the firmware included
-        with the AltosUI package. Navigate to the directory containing
-        the desired firmware if it isn't there.
-      </p><p>
-        Next, a small dialog containing the device serial number and
-        RF calibration values should appear. If these values are
-        incorrect (possibly due to a corrupted image in the device),
-        enter the correct values here.
-      </p><p>
-        Finally, a dialog containing a progress bar will follow the
-        programming process.
-      </p><p>
-        When programming is complete, the target device will
-        reboot. Note that if the target device is connected via USB, you
-        will have to unplug it and then plug it back in for the USB
-        connection to reset so that you can communicate with the device
-        again.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3905000"></a>10. Fire Igniter</h2></div></div></div><p>
-       This activates the igniter circuits in TeleMetrum to help test
-       recovery systems deployment. Because this command can operate
+        </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58690704"></a>9. Flash Image</h2></div></div></div><p>
+        This reprograms Altus Metrum devices with new
+        firmware. TeleMetrum v1.x, TeleDongle, TeleMini and TeleBT are
+        all reprogrammed by using another similar unit as a
+        programming dongle (pair programming). TeleMega, TeleMetrum v2
+        and EasyMini are all programmed directly over their USB ports
+        (self programming).  Please read the directions for flashing
+        devices in the Updating Device Firmware chapter below.
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58692336"></a>10. Fire Igniter</h2></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="90"><tr><td><img src="fire-igniter.png" width="90"></td></tr></table></div></div><p>
+       This activates the igniter circuits in the flight computer to help 
+       test recovery systems deployment. Because this command can operate
        over the Packet Command Link, you can prepare the rocket as
        for flight and then test the recovery system without needing
        to snake wires inside the air-frame.
       </p><p>
        Selecting the 'Fire Igniter' button brings up the usual device
-       selection dialog. Pick the desired TeleDongle or TeleMetrum
-       device. This brings up another window which shows the current
-       continuity test status for both apogee and main charges.
+       selection dialog. Pick the desired device. This brings up another 
+       window which shows the current continuity test status for both 
+       apogee and main charges.
       </p><p>
        Next, select the desired igniter to fire. This will enable the
        'Arm' button.
@@ -1099,14 +1442,14 @@ NAR
        you have 10 seconds to press the 'Fire' button or the system
        will deactivate, at which point you start over again at
        selecting the desired igniter.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3907104"></a>11. Scan Channels</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58697968"></a>11. Scan Channels</h2></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="248"><tr><td><img src="scan-channels.png" width="248"></td></tr></table></div></div><p>
        This listens for telemetry packets on all of the configured
        frequencies, displaying information about each device it
        receives a packet from. You can select which of the three
        telemetry formats should be tried; by default, it only listens
        for the standard telemetry packets used in v1.0 and later
        firmware.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3908008"></a>12. Load Maps</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58701824"></a>12. Load Maps</h2></div></div></div><div class="informalfigure"><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" style="cellpadding: 0; cellspacing: 0;" width="495"><tr><td><img src="load-maps.png" width="495"></td></tr></table></div></div><p>
        Before heading out to a new launch site, you can use this to
        load satellite images in case you don't have internet
        connectivity at the site. This loads a fairly large area
@@ -1115,8 +1458,8 @@ NAR
        There's a drop-down menu of launch sites we know about; if
        your favorites aren't there, please let us know the lat/lon
        and name of the site. The contents of this list are actually
-       downloaded at run-time, so as new sites are sent in, they'll
-       get automatically added to this list.
+       downloaded from our server at run-time, so as new sites are sent 
+       in, they'll get automatically added to this list.
       </p><p>
        If the launch site isn't in the list, you can manually enter the lat/lon values
       </p><p>
@@ -1125,15 +1468,19 @@ NAR
        once, so if you load more than one launch site, you may get
        some gray areas in the map which indicate that Google is tired
        of sending data to you. Try again later.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3910136"></a>13. Monitor Idle</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58707520"></a>13. Monitor Idle</h2></div></div></div><p>
        This brings up a dialog similar to the Monitor Flight UI,
-       except it works with the altimeter in "idle" mode by sending
+       except it works with the altimeter in &#8220;idle&#8221; mode by sending
        query commands to discover the current state rather than
-       listening for telemetry packets.
-      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp3911008"></a>Chapter 7. AltosDroid</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp3912688">1. Installing AltosDroid</a></span></dt><dt><span class="section"><a href="#idp3913648">2. Connecting to TeleBT</a></span></dt><dt><span class="section"><a href="#idp3914864">3. Configuring AltosDroid</a></span></dt><dt><span class="section"><a href="#idp3915736">4. Altos Droid Flight Monitoring</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3916536">4.1. Pad</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3922504">5. Downloading Flight Logs</a></span></dt></dl></div><p>
+       listening for telemetry packets. Because this uses command
+       mode, it needs to have the TeleDongle and flight computer
+       callsigns match exactly. If you can receive telemetry, but
+       cannot manage to run Monitor Idle, then it's very likely that
+       your callsigns are different in some way.
+      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp58709616"></a>Chapter 7. AltosDroid</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp58712000">1. Installing AltosDroid</a></span></dt><dt><span class="section"><a href="#idp58713936">2. Connecting to TeleBT</a></span></dt><dt><span class="section"><a href="#idp58715936">3. Configuring AltosDroid</a></span></dt><dt><span class="section"><a href="#idp58717392">4. AltosDroid Flight Monitoring</a></span></dt><dd><dl><dt><span class="section"><a href="#idp58718704">4.1. Pad</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58732256">5. Downloading Flight Logs</a></span></dt></dl></div><p>
       AltosDroid provides the same flight monitoring capabilities as
       AltosUI, but runs on Android devices and is designed to connect
-      to a TeleBT receiver over Bluetooth&#8482;. Altos Droid monitors
+      to a TeleBT receiver over Bluetooth&#8482;. AltosDroid monitors
       telemetry data, logging it to internal storage in the Android
       device, and presents that data in a UI the same way the 'Monitor
       Flight' window does in AltosUI.
@@ -1141,14 +1488,14 @@ NAR
       This manual will explain how to configure AltosDroid, connect
       to TeleBT, operate the flight monitoring interface and describe
       what the displayed data means.
-    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3912688"></a>1. Installing AltosDroid</h2></div></div></div><p>
-       AltosDroid is included in the Google Play store. To install
-       it on your Android device, open open the Google Play Store
-       application and search for "altosdroid". Make sure you don't
-       have a space between "altos" and "droid" or you probably won't
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58712000"></a>1. Installing AltosDroid</h2></div></div></div><p>
+       AltosDroid is available from the Google Play store. To install
+       it on your Android device, open the Google Play Store
+       application and search for &#8220;altosdroid&#8221;. Make sure you don't
+       have a space between &#8220;altos&#8221; and &#8220;droid&#8221; or you probably won't
        find what you want. That should bring you to the right page
        from which you can download and install the application.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3913648"></a>2. Connecting to TeleBT</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58713936"></a>2. Connecting to TeleBT</h2></div></div></div><p>
        Press the Android 'Menu' button or soft-key to see the
        configuration options available. Select the 'Connect a device'
        option and then the 'Scan for devices' entry at the bottom to
@@ -1158,93 +1505,94 @@ NAR
        Subsequent connections will not require you to enter that
        code, and your 'paired' device will appear in the list without
        scanning.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3914864"></a>3. Configuring AltosDroid</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58715936"></a>3. Configuring AltosDroid</h2></div></div></div><p>
        The only configuration option available for AltosDroid is
        which frequency to listen on. Press the Android 'Menu' button
        or soft-key and pick the 'Select radio frequency' entry. That
        brings up a menu of pre-set radio frequencies; pick the one
        which matches your altimeter.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3915736"></a>4. Altos Droid Flight Monitoring</h2></div></div></div><p>
-       Altos Droid is designed to mimic the AltosUI flight monitoring
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58717392"></a>4. AltosDroid Flight Monitoring</h2></div></div></div><p>
+       AltosDroid is designed to mimic the AltosUI flight monitoring
        display, providing separate tabs for each stage of your rocket
        flight along with a tab containing a map of the local area
        with icons marking the current location of the altimeter and
        the Android device.
-      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp3916536"></a>4.1. Pad</h3></div></div></div><p>
+      </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58718704"></a>4.1. Pad</h3></div></div></div><p>
           The 'Launch Pad' tab shows information used to decide when the
           rocket is ready for flight. The first elements include red/green
           indicators, if any of these is red, you'll want to evaluate
           whether the rocket is ready to launch:
-          </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
-                Battery Voltage. This indicates whether the Li-Po battery
-                powering the TeleMetrum has sufficient charge to last for
-                the duration of the flight. A value of more than
-                3.7V is required for a 'GO' status.
-              </p></li><li class="listitem"><p>
-                Apogee Igniter Voltage. This indicates whether the apogee
-                igniter has continuity. If the igniter has a low
-                resistance, then the voltage measured here will be close
-                to the Li-Po battery voltage. A value greater than 3.2V is
-                required for a 'GO' status.
-              </p></li><li class="listitem"><p>
-                Main Igniter Voltage. This indicates whether the main
-                igniter has continuity. If the igniter has a low
-                resistance, then the voltage measured here will be close
-                to the Li-Po battery voltage. A value greater than 3.2V is
-                required for a 'GO' status.
-              </p></li><li class="listitem"><p>
-               On-board Data Logging. This indicates whether there is
-               space remaining on-board to store flight data for the
-               upcoming flight. If you've downloaded data, but failed
-               to erase flights, there may not be any space
-               left. TeleMetrum can store multiple flights, depending
-               on the configured maximum flight log size. TeleMini
-               stores only a single flight, so it will need to be
-               downloaded and erased after each flight to capture
-               data. This only affects on-board flight logging; the
-               altimeter will still transmit telemetry and fire
-               ejection charges at the proper times.
-             </p></li><li class="listitem"><p>
-                GPS Locked. For a TeleMetrum device, this indicates whether the GPS receiver is
-                currently able to compute position information. GPS requires
-                at least 4 satellites to compute an accurate position.
-              </p></li><li class="listitem"><p>
-                GPS Ready. For a TeleMetrum device, this indicates whether GPS has reported at least
-                10 consecutive positions without losing lock. This ensures
-                that the GPS receiver has reliable reception from the
-                satellites.
-              </p></li></ul></div><p>
-          </p><p>
-            The Launchpad tab also shows the computed launch pad position
-            and altitude, averaging many reported positions to improve the
-            accuracy of the fix.
-          </p><p>
-        </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3922504"></a>5. Downloading Flight Logs</h2></div></div></div><p>
-       Altos Droid always saves every bit of telemetry data it
+          </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Battery Voltage</span></dt><dd><p>
+                 This indicates whether the Li-Po battery
+                 powering the TeleMetrum has sufficient charge to last for
+                 the duration of the flight. A value of more than
+                 3.8V is required for a 'GO' status.
+               </p></dd><dt><span class="term">Apogee Igniter Voltage</span></dt><dd><p>
+                 This indicates whether the apogee
+                 igniter has continuity. If the igniter has a low
+                 resistance, then the voltage measured here will be close
+                 to the Li-Po battery voltage. A value greater than 3.2V is
+                 required for a 'GO' status.
+               </p></dd><dt><span class="term">Main Igniter Voltage</span></dt><dd><p>
+                 This indicates whether the main
+                 igniter has continuity. If the igniter has a low
+                 resistance, then the voltage measured here will be close
+                 to the Li-Po battery voltage. A value greater than 3.2V is
+                 required for a 'GO' status.
+               </p></dd><dt><span class="term">On-board Data Logging</span></dt><dd><p>
+                 This indicates whether there is
+                 space remaining on-board to store flight data for the
+                 upcoming flight. If you've downloaded data, but failed
+                 to erase flights, there may not be any space
+                 left. TeleMetrum can store multiple flights, depending
+                 on the configured maximum flight log size. TeleMini
+                 stores only a single flight, so it will need to be
+                 downloaded and erased after each flight to capture
+                 data. This only affects on-board flight logging; the
+                 altimeter will still transmit telemetry and fire
+                 ejection charges at the proper times.
+               </p></dd><dt><span class="term">GPS Locked</span></dt><dd><p>
+                 For a TeleMetrum or TeleMega device, this indicates whether the GPS receiver is
+                 currently able to compute position information. GPS requires
+                 at least 4 satellites to compute an accurate position.
+               </p></dd><dt><span class="term">GPS Ready</span></dt><dd><p>
+                 For a TeleMetrum or TeleMega device, this indicates whether GPS has reported at least
+                 10 consecutive positions without losing lock. This ensures
+                 that the GPS receiver has reliable reception from the
+                 satellites.
+               </p></dd></dl></div><p>
+       </p><p>
+         The Launchpad tab also shows the computed launch pad position
+         and altitude, averaging many reported positions to improve the
+         accuracy of the fix.
+       </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58732256"></a>5. Downloading Flight Logs</h2></div></div></div><p>
+       AltosDroid always saves every bit of telemetry data it
        receives. To download that to a computer for use with AltosUI,
        simply remove the SD card from your Android device, or connect
        your device to your computer's USB port and browse the files
        on that device. You will find '.telem' files in the TeleMetrum
        directory that will work with AltosUI directly.
-      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp3923520"></a>Chapter 8. Using Altus Metrum Products</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp3923840">1. Being Legal</a></span></dt><dt><span class="section"><a href="#idp3924800">2. In the Rocket</a></span></dt><dt><span class="section"><a href="#idp3926904">3. On the Ground</a></span></dt><dt><span class="section"><a href="#idp3934536">4. Data Analysis</a></span></dt><dt><span class="section"><a href="#idp3936288">5. Future Plans</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3923840"></a>1. Being Legal</h2></div></div></div><p>
+      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp58733920"></a>Chapter 8. Using Altus Metrum Products</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp58734560">1. Being Legal</a></span></dt><dt><span class="section"><a href="#idp58736464">2. In the Rocket</a></span></dt><dt><span class="section"><a href="#idp58738928">3. On the Ground</a></span></dt><dt><span class="section"><a href="#idp58752240">4. Data Analysis</a></span></dt><dt><span class="section"><a href="#idp58754784">5. Future Plans</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58734560"></a>1. Being Legal</h2></div></div></div><p>
         First off, in the US, you need an <a class="ulink" href="http://www.altusmetrum.org/Radio/" target="_top">amateur radio license</a> or
         other authorization to legally operate the radio transmitters that are part
         of our products.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3924800"></a>2. In the Rocket</h2></div></div></div><p>
-          In the rocket itself, you just need a <a class="ulink" href="http://www.altusmetrum.org/TeleMetrum/" target="_top">TeleMetrum</a> or
-         <a class="ulink" href="http://www.altusmetrum.org/TeleMini/" target="_top">TeleMini</a> board and
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58736464"></a>2. In the Rocket</h2></div></div></div><p>
+          In the rocket itself, you just need a flight computer and
           a single-cell, 3.7 volt nominal Li-Po rechargeable battery.  An 
          850mAh battery weighs less than a 9V alkaline battery, and will 
-         run a TeleMetrum for hours.
-         A 110mAh battery weighs less than a triple A battery and will run a TeleMetrum for
-         a few hours, or a TeleMini for much (much) longer.
+         run a TeleMetrum or TeleMega for hours.
+         A 110mAh battery weighs less than a triple A battery and is a good
+         choice for use with TeleMini.
         </p><p>
-          By default, we ship the altimeters with a simple wire antenna.  If your
-          electronics bay or the air-frame it resides within is made of carbon fiber,
-          which is opaque to RF signals, you may choose to have an SMA connector
-          installed so that you can run a coaxial cable to an antenna mounted
-          elsewhere in the rocket.
-        </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3926904"></a>3. On the Ground</h2></div></div></div><p>
+          By default, we ship flight computers with a simple wire antenna.  
+         If your electronics bay or the air-frame it resides within is made 
+         of carbon fiber, which is opaque to RF signals, you may prefer to 
+         install an SMA connector so that you can run a coaxial cable to an 
+         antenna mounted elsewhere in the rocket.  However, note that the 
+         GPS antenna is fixed on all current products, so you really want
+         to install the flight computer in a bay made of RF-transparent
+         materials if at all possible.
+        </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58738928"></a>3. On the Ground</h2></div></div></div><p>
           To receive the data stream from the rocket, you need an antenna and short
           feed-line connected to one of our <a class="ulink" href="http://www.altusmetrum.org/TeleDongle/" target="_top">TeleDongle</a> units.  If possible, use an SMA to BNC 
        adapter instead of feedline between the antenna feedpoint and 
@@ -1256,6 +1604,10 @@ NAR
          The GUI tool, AltosUI, is written in Java and runs across
          Linux, Mac OS and Windows. There's also a suite of C tools
          for Linux which can perform most of the same tasks.
+        </p><p>
+         Alternatively, a TeleBT attached with an SMA to BNC adapter at the
+         feed point of a hand-held yagi used in conjunction with an Android
+         device running AltosDroid makes an outstanding ground station.
         </p><p>
           After the flight, you can use the radio link to extract the more detailed data
           logged in either TeleMetrum or TeleMini devices, or you can use a mini USB cable to plug into the
@@ -1264,31 +1616,34 @@ NAR
           battery, so you'll want one of those anyway... the same cable used by lots
           of digital cameras and other modern electronic stuff will work fine.
         </p><p>
-          If your TeleMetrum-equipped rocket lands out of sight, you may enjoy having a hand-held GPS
-          receiver, so that you can put in a way-point for the last reported rocket
-          position before touch-down.  This makes looking for your rocket a lot like
-          Geo-Caching... just go to the way-point and look around starting from there.
+          If your rocket lands out of sight, you may enjoy having a hand-held 
+         GPS receiver, so that you can put in a way-point for the last 
+         reported rocket position before touch-down.  This makes looking for 
+         your rocket a lot like Geo-Caching... just go to the way-point and 
+         look around starting from there.  AltosDroid on an Android device
+         with GPS receiver works great for this, too!
         </p><p>
-          You may also enjoy having a ham radio "HT" that covers the 70cm band... you
+          You may also enjoy having a ham radio &#8220;HT&#8221; that covers the 70cm band... you
           can use that with your antenna to direction-find the rocket on the ground
           the same way you can use a Walston or Beeline tracker.  This can be handy
           if the rocket is hiding in sage brush or a tree, or if the last GPS position
           doesn't get you close enough because the rocket dropped into a canyon, or
           the wind is blowing it across a dry lake bed, or something like that...  Keith
-          and Bdale both currently own and use the Yaesu VX-7R at launches.
+          currently uses a Yaesu VX-7R, Bdale has a Baofung UV-5R
+         which isn't as nice, but was a whole lot cheaper.
         </p><p>
           So, to recap, on the ground the hardware you'll need includes:
-          </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
-              an antenna and feed-line or adapter
-            </li><li class="listitem">
-              a TeleDongle
-            </li><li class="listitem">
-              a notebook computer
-            </li><li class="listitem">
-              optionally, a hand-held GPS receiver
-            </li><li class="listitem">
-              optionally, an HT or receiver covering 435 MHz
-            </li></ol></div><p>
+          </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+             an antenna and feed-line or adapter
+             </p></li><li class="listitem"><p>
+             a TeleDongle
+             </p></li><li class="listitem"><p>
+             a notebook computer
+             </p></li><li class="listitem"><p>
+             optionally, a hand-held GPS receiver
+             </p></li><li class="listitem"><p>
+             optionally, an HT or receiver covering 435 MHz
+             </p></li></ol></div><p>
         </p><p>
           The best hand-held commercial directional antennas we've found for radio
           direction finding rockets are from
@@ -1299,7 +1654,7 @@ NAR
           TeleMetrum- or TeleMini- equipped rocket when used with a suitable 
          70cm HT.  TeleDongle and an SMA to BNC adapter fit perfectly
          between the driven element and reflector of Arrow antennas.
-        </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3934536"></a>4. Data Analysis</h2></div></div></div><p>
+        </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58752240"></a>4. Data Analysis</h2></div></div></div><p>
           Our software makes it easy to log the data from each flight, both the
           telemetry received during the flight itself, and the more
           complete data log recorded in the flash memory on the altimeter
@@ -1314,23 +1669,19 @@ NAR
           Our ultimate goal is to emit a set of files for each flight that can be
           published as a web page per flight, or just viewed on your local disk with
           a web browser.
-        </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3936288"></a>5. Future Plans</h2></div></div></div><p>
-          In the future, we intend to offer "companion boards" for the rocket 
-         that will plug in to TeleMetrum to collect additional data, provide 
-         more pyro channels, and so forth.  
-        </p><p>
-         Also under design is a new flight computer with more sensors, more
-         pyro channels, and a more powerful radio system designed for use
-         in multi-stage, complex, and extreme altitude projects.
-        </p><p>
-          We are also working on alternatives to TeleDongle.  One is a
-         a stand-alone, hand-held ground terminal that will allow monitoring 
-         the rocket's status, collecting data during flight, and logging data 
-         after flight without the need for a notebook computer on the
-          flight line.  Particularly since it is so difficult to read most 
-         notebook screens in direct sunlight, we think this will be a great 
-         thing to have.  We are also working on a TeleDongle variant with
-         Bluetooth that will work with Android phones and tablets.
+        </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58754784"></a>5. Future Plans</h2></div></div></div><p>
+         We've designed a simple GPS based radio tracker called TeleGPS.  
+         If all goes well, we hope to introduce this in the first
+         half of 2014.
+       </p><p>
+          We have designed and prototyped several &#8220;companion boards&#8221; that 
+         can attach to the companion connector on TeleMetrum and TeleMega
+         flight computers to collect more data, provide more pyro channels, 
+         and so forth.  We do not yet know if or when any of these boards
+         will be produced in enough quantity to sell.  If you have specific
+         interests for data collection or control of events in your rockets
+         beyond the capabilities of our existing productions, please let 
+         us know!
         </p><p>
           Because all of our work is open, both the hardware designs and the 
          software, if you have some great idea for an addition to the current 
@@ -1341,31 +1692,34 @@ NAR
          Watch our 
          <a class="ulink" href="http://altusmetrum.org/" target="_top">web site</a> for more news 
          and information as our family of products evolves!
-        </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp3939448"></a>Chapter 9. Altimeter Installation Recommendations</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp3940432">1. Mounting the Altimeter</a></span></dt><dt><span class="section"><a href="#idp3942768">2. Dealing with the Antenna</a></span></dt><dt><span class="section"><a href="#idp3946752">3. Preserving GPS Reception</a></span></dt><dt><span class="section"><a href="#idp3949136">4. Radio Frequency Interference</a></span></dt><dt><span class="section"><a href="#idp3953208">5. The Barometric Sensor</a></span></dt><dt><span class="section"><a href="#idp3955048">6. Ground Testing</a></span></dt></dl></div><p>
+        </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp58759168"></a>Chapter 9. Altimeter Installation Recommendations</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp58760624">1. Mounting the Altimeter</a></span></dt><dt><span class="section"><a href="#idp58766032">2. Dealing with the Antenna</a></span></dt><dt><span class="section"><a href="#idp58771600">3. Preserving GPS Reception</a></span></dt><dt><span class="section"><a href="#idp58776384">4. Radio Frequency Interference</a></span></dt><dt><span class="section"><a href="#idp58783952">5. The Barometric Sensor</a></span></dt><dt><span class="section"><a href="#idp58786752">6. Ground Testing</a></span></dt></dl></div><p>
       Building high-power rockets that fly safely is hard enough. Mix
       in some sophisticated electronics and a bunch of radio energy
-      and oftentimes you find few perfect solutions. This chapter
+      and some creativity and/or compromise may be required. This chapter
       contains some suggestions about how to install Altus Metrum
-      products into the rocket air-frame, including how to safely and
+      products into a rocket air-frame, including how to safely and
       reliably mix a variety of electronics into the same air-frame.
-    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3940432"></a>1. Mounting the Altimeter</h2></div></div></div><p>
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58760624"></a>1. Mounting the Altimeter</h2></div></div></div><p>
        The first consideration is to ensure that the altimeter is
-       securely fastened to the air-frame. For TeleMetrum, we use
-       nylon standoffs and nylon screws; they're good to at least 50G
-       and cannot cause any electrical issues on the board. For
-       TeleMini, we usually cut small pieces of 1/16" balsa to fit
+       securely fastened to the air-frame. For most of our products, we 
+       prefer nylon standoffs and nylon screws; they're good to at least 50G
+       and cannot cause any electrical issues on the board.  Metal screws
+       and standoffs are fine, too, just be careful to avoid electrical
+       shorts!  For TeleMini v1.0, we usually cut small pieces of 1/16 inch 
+       balsa to fit
        under the screw holes, and then take 2x56 nylon screws and
        screw them through the TeleMini mounting holes, through the
        balsa and into the underlying material.
-      </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
-         Make sure TeleMetrum is aligned precisely along the axis of
-         acceleration so that the accelerometer can accurately
-         capture data during the flight.
-       </li><li class="listitem">
-         Watch for any metal touching components on the
-         board. Shorting out connections on the bottom of the board
-         can cause the altimeter to fail during flight.
-       </li></ol></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3942768"></a>2. Dealing with the Antenna</h2></div></div></div><p>
+      </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+           Make sure accelerometer-equipped products like TeleMetrum and
+           TeleMega are aligned precisely along the axis of
+           acceleration so that the accelerometer can accurately
+           capture data during the flight.
+         </p></li><li class="listitem"><p>
+           Watch for any metal touching components on the
+           board. Shorting out connections on the bottom of the board
+           can cause the altimeter to fail during flight.
+         </p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58766032"></a>2. Dealing with the Antenna</h2></div></div></div><p>
        The antenna supplied is just a piece of solid, insulated,
        wire. If it gets damaged or broken, it can be easily
        replaced. It should be kept straight and not cut; bending or
@@ -1385,7 +1739,7 @@ NAR
        culprit here -- CF is a good conductor and will effectively
        shield the antenna, dramatically reducing signal strength and
        range. Metallic flake paint is another effective shielding
-       material which is to be avoided around any antennas.
+       material which should be avoided around any antennas.
       </p><p>
        If the ebay is large enough, it can be convenient to simply
        mount the altimeter at one end and stretch the antenna out
@@ -1403,31 +1757,31 @@ NAR
        tubing towards the side wall of the rocket and it ends up
        consuming very little space.
       </p><p>
-       If you need to place the antenna at a distance from the
+       If you need to place the UHF antenna at a distance from the
        altimeter, you can replace the antenna with an edge-mounted
        SMA connector, and then run 50&#937; coax from the board to the
        antenna. Building a remote antenna is beyond the scope of this
        manual.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3946752"></a>3. Preserving GPS Reception</h2></div></div></div><p>
-       The GPS antenna and receiver in TeleMetrum are highly
-       sensitive and normally have no trouble tracking enough
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58771600"></a>3. Preserving GPS Reception</h2></div></div></div><p>
+       The GPS antenna and receiver used in TeleMetrum and TeleMega is 
+       highly sensitive and normally have no trouble tracking enough
        satellites to provide accurate position information for
-       recovering the rocket. However, there are many ways to
-       attenuate the GPS signal.
-      </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
-         Conductive tubing or coatings. Carbon fiber and metal
-         tubing, or metallic paint will all dramatically attenuate the
-         GPS signal. We've never heard of anyone successfully
-         receiving GPS from inside these materials.
-       </li><li class="listitem">
-         Metal components near the GPS patch antenna. These will
-         de-tune the patch antenna, changing the resonant frequency
-         away from the L1 carrier and reduce the effectiveness of the
-         antenna. You can place as much stuff as you like beneath the
-         antenna as that's covered with a ground plane. But, keep
-         wires and metal out from above the patch antenna.
-       </li></ol></div><p>
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3949136"></a>4. Radio Frequency Interference</h2></div></div></div><p>
+       recovering the rocket. However, there are many ways the GPS signal
+       can end up attenuated, negatively affecting GPS performance. 
+      </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+           Conductive tubing or coatings. Carbon fiber and metal
+           tubing, or metallic paint will all dramatically attenuate the
+           GPS signal. We've never heard of anyone successfully
+           receiving GPS from inside these materials.
+         </p></li><li class="listitem"><p>
+           Metal components near the GPS patch antenna. These will
+           de-tune the patch antenna, changing the resonant frequency
+           away from the L1 carrier and reduce the effectiveness of the
+           antenna. You can place as much stuff as you like beneath the
+           antenna as that's covered with a ground plane. But, keep
+           wires and metal out from above the patch antenna.
+         </p></li></ol></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58776384"></a>4. Radio Frequency Interference</h2></div></div></div><p>
        Any altimeter will generate RFI; the digital circuits use
        high-frequency clocks that spray radio interference across a
        wide band. Altus Metrum altimeters generate intentional radio
@@ -1442,15 +1796,15 @@ NAR
        Voltages are induced when radio frequency energy is
        transmitted from one circuit to another. Here are things that
        influence the induced voltage and current:
-      </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
-         Keep wires from different circuits apart. Moving circuits
-         further apart will reduce RFI.
-       </li><li class="listitem">
+      </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+           Keep wires from different circuits apart. Moving circuits
+           further apart will reduce RFI.
+         </p></li><li class="listitem"><p>
          Avoid parallel wires from different circuits. The longer two
          wires run parallel to one another, the larger the amount of
          transferred energy. Cross wires at right angles to reduce
          RFI.
-       </li><li class="listitem">
+         </p></li><li class="listitem"><p>
          Twist wires from the same circuits. Two wires the same
          distance from the transmitter will get the same amount of
          induced energy which will then cancel out. Any time you have
@@ -1458,14 +1812,14 @@ NAR
          even out distances and reduce RFI. For altimeters, this
          includes battery leads, switch hookups and igniter
          circuits.
-       </li><li class="listitem">
+         </p></li><li class="listitem"><p>
          Avoid resonant lengths. Know what frequencies are present
          in the environment and avoid having wire lengths near a
-         natural resonant length. Altusmetrum products transmit on the
+         natural resonant length. Altus Metrum products transmit on the
          70cm amateur band, so you should avoid lengths that are a
-         simple ratio of that length; essentially any multiple of 1/4
+         simple ratio of that length; essentially any multiple of ¼
          of the wavelength (17.5cm).
-       </li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3953208"></a>5. The Barometric Sensor</h2></div></div></div><p>
+         </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58783952"></a>5. The Barometric Sensor</h2></div></div></div><p>
        Altusmetrum altimeters measure altitude with a barometric
        sensor, essentially measuring the amount of air above the
        rocket to figure out how high it is. A large number of
@@ -1479,11 +1833,11 @@ NAR
        airflow, have smooth edges, and away from areas of increasing or 
        decreasing pressure.
       </p><p>
-       The barometric sensor in the altimeter is quite sensitive to
-       chemical damage from the products of APCP or BP combustion, so
-       make sure the ebay is carefully sealed from any compartment
-       which contains ejection charges or motors.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3955048"></a>6. Ground Testing</h2></div></div></div><p>
+       All barometric sensors are quite sensitive to chemical damage from 
+       the products of APCP or BP combustion, so make sure the ebay is 
+       carefully sealed from any compartment which contains ejection 
+       charges or motors.
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58786752"></a>6. Ground Testing</h2></div></div></div><p>
        The most important aspect of any installation is careful
        ground testing. Bringing an air-frame up to the LCO table which
        hasn't been ground tested can lead to delays or ejection
@@ -1505,12 +1859,14 @@ NAR
        interface through a TeleDongle to command each charge to
        fire. Make sure the charge is sufficient to robustly separate
        the air-frame and deploy the recovery system.
-      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp3957184"></a>Chapter 10. Updating Device Firmware</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp3959184">1. Updating TeleMetrum Firmware</a></span></dt><dt><span class="section"><a href="#idp3964528">2. Updating TeleMini Firmware</a></span></dt><dt><span class="section"><a href="#idp3969944">3. Updating TeleDongle Firmware</a></span></dt></dl></div><p>
-      The big concept to understand is that you have to use a
-      TeleDongle as a programmer to update a TeleMetrum or TeleMini,
-      and a TeleMetrum or other TeleDongle to program the TeleDongle
-      Due to limited memory resources in the cc1111, we don't support
-      programming directly over USB. 
+      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp58789920"></a>Chapter 10. Updating Device Firmware</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp58793936">1. 
+       Updating TeleMega, TeleMetrum v2 or EasyMini Firmware
+      </a></span></dt><dd><dl><dt><span class="section"><a href="#idp58802752">1.1. Recovering From Self-Flashing Failure</a></span></dt></dl></dd><dt><span class="section"><a href="#idp58811728">2. Pair Programming</a></span></dt><dt><span class="section"><a href="#idp58813168">3. Updating TeleMetrum v1.x Firmware</a></span></dt><dt><span class="section"><a href="#idp58826208">4. Updating TeleMini Firmware</a></span></dt><dt><span class="section"><a href="#idp58839600">5. Updating TeleDongle Firmware</a></span></dt></dl></div><p>
+      TeleMega, TeleMetrum v2 and EasyMini are all programmed directly
+      over their USB connectors (self programming). TeleMetrum v1, TeleMini and
+      TeleDongle are all programmed by using another device as a
+      programmer (pair programming). It's important to recognize which
+      kind of devices you have before trying to reprogram them.
     </p><p>
       You may wish to begin by ensuring you have current firmware images.
       These are distributed as part of the AltOS software bundle that
@@ -1520,59 +1876,129 @@ NAR
       software features.  You can always download the most recent
       version from <a class="ulink" href="http://www.altusmetrum.org/AltOS/" target="_top">http://www.altusmetrum.org/AltOS/</a>.
     </p><p>
-      We recommend updating the altimeter first, before updating TeleDongle.
-    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3959184"></a>1. Updating TeleMetrum Firmware</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+      If you need to update the firmware on a TeleDongle, we recommend 
+      updating the altimeter first, before updating TeleDongle.  However,
+      note that TeleDongle rarely need to be updated.  Any firmware version
+      1.0.1 or later will work, version 1.2.1 may have improved receiver
+      performance slightly.
+    </p><p>
+      Self-programmable devices (TeleMega, TeleMetrum v2 and EasyMini)
+      are reprogrammed by connecting them to your computer over USB
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58793936"></a>1. 
+       Updating TeleMega, TeleMetrum v2 or EasyMini Firmware
+      </h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+           Attach a battery and power switch to the target
+           device. Power up the device.
+         </p></li><li class="listitem"><p>
+           Using a Micro USB cable, connect the target device to your
+           computer's USB socket.
+         </p></li><li class="listitem"><p>
+           Run AltosUI, and select 'Flash Image' from the File menu.
+         </p></li><li class="listitem"><p>
+           Select the target device in the Device Selection dialog.
+         </p></li><li class="listitem"><p>
+           Select the image you want to flash to the device, which
+           should have a name in the form
+           &lt;product&gt;-v&lt;product-version&gt;-&lt;software-version&gt;.ihx, such
+           as TeleMega-v1.0-1.3.0.ihx.
+         </p></li><li class="listitem"><p>
+           Make sure the configuration parameters are reasonable
+           looking. If the serial number and/or RF configuration
+           values aren't right, you'll need to change them.
+         </p></li><li class="listitem"><p>
+           Hit the 'OK' button and the software should proceed to flash
+           the device with new firmware, showing a progress bar.
+         </p></li><li class="listitem"><p>
+           Verify that the device is working by using the 'Configure
+           Altimeter' item to check over the configuration.
+         </p></li></ol></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp58802752"></a>1.1. Recovering From Self-Flashing Failure</h3></div></div></div><p>
+         If the firmware loading fails, it can leave the device
+         unable to boot. Not to worry, you can force the device to
+         start the boot loader instead, which will let you try to
+         flash the device again.
+       </p><p>
+         On each device, connecting two pins from one of the exposed
+         connectors will force the boot loader to start, even if the
+         regular operating system has been corrupted in some way.
+       </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">TeleMega</span></dt><dd><p>
+               Connect pin 6 and pin 1 of the companion connector. Pin 1
+               can be identified by the square pad around it, and then
+               the pins could sequentially across the board. Be very
+               careful to <span class="emphasis"><em>not</em></span> short pin 8 to
+               anything as that is connected directly to the battery. Pin
+               7 carries 3.3V and the board will crash if that is
+               connected to pin 1, but shouldn't damage the board.
+             </p></dd><dt><span class="term">TeleMetrum v2</span></dt><dd><p>
+               Connect pin 6 and pin 1 of the companion connector. Pin 1
+               can be identified by the square pad around it, and then
+               the pins could sequentially across the board. Be very
+               careful to <span class="emphasis"><em>not</em></span> short pin 8 to
+               anything as that is connected directly to the battery. Pin
+               7 carries 3.3V and the board will crash if that is
+               connected to pin 1, but shouldn't damage the board.
+             </p></dd><dt><span class="term">EasyMini</span></dt><dd><p>
+               Connect pin 6 and pin 1 of the debug connector, which is
+               the six holes next to the beeper. Pin 1 can be identified
+               by the square pad around it, and then the pins could
+               sequentially across the board, making Pin 6 the one on the
+               other end of the row.
+             </p></dd></dl></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58811728"></a>2. Pair Programming</h2></div></div></div><p>
+       The big concept to understand is that you have to use a
+       TeleMega, TeleMetrum or TeleDongle as a programmer to update a
+       pair programmed device. Due to limited memory resources in the
+       cc1111, we don't support programming directly over USB for these
+       devices.
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58813168"></a>3. Updating TeleMetrum v1.x Firmware</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
           Find the 'programming cable' that you got as part of the starter
           kit, that has a red 8-pin MicroMaTch connector on one end and a
           red 4-pin MicroMaTch connector on the other end.
-        </li><li class="listitem">
+         </p></li><li class="listitem"><p>
           Take the 2 screws out of the TeleDongle case to get access
           to the circuit board.
-        </li><li class="listitem">
+         </p></li><li class="listitem"><p>
           Plug the 8-pin end of the programming cable to the
           matching connector on the TeleDongle, and the 4-pin end to the
           matching connector on the TeleMetrum.
          Note that each MicroMaTch connector has an alignment pin that
          goes through a hole in the PC board when you have the cable
          oriented correctly.
-        </li><li class="listitem">
+         </p></li><li class="listitem"><p>
           Attach a battery to the TeleMetrum board.
-        </li><li class="listitem">
+         </p></li><li class="listitem"><p>
           Plug the TeleDongle into your computer's USB port, and power
           up the TeleMetrum.
-        </li><li class="listitem">
+         </p></li><li class="listitem"><p>
           Run AltosUI, and select 'Flash Image' from the File menu.
-        </li><li class="listitem">
+         </p></li><li class="listitem"><p>
           Pick the TeleDongle device from the list, identifying it as the
           programming device.
-        </li><li class="listitem">
+         </p></li><li class="listitem"><p>
           Select the image you want put on the TeleMetrum, which should have a
           name in the form telemetrum-v1.2-1.0.0.ihx.  It should be visible
        in the default directory, if not you may have to poke around
        your system to find it.
-        </li><li class="listitem">
+         </p></li><li class="listitem"><p>
           Make sure the configuration parameters are reasonable
           looking. If the serial number and/or RF configuration
           values aren't right, you'll need to change them.
-        </li><li class="listitem">
+         </p></li><li class="listitem"><p>
           Hit the 'OK' button and the software should proceed to flash
           the TeleMetrum with new firmware, showing a progress bar.
-        </li><li class="listitem">
+         </p></li><li class="listitem"><p>
           Confirm that the TeleMetrum board seems to have updated OK, which you
           can do by plugging in to it over USB and using a terminal program
           to connect to the board and issue the 'v' command to check
           the version, etc.
-        </li><li class="listitem">
+         </p></li><li class="listitem"><p>
           If something goes wrong, give it another try.
-        </li></ol></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3964528"></a>2. Updating TeleMini Firmware</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+         </p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58826208"></a>4. Updating TeleMini Firmware</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
          You'll need a special 'programming cable' to reprogram the
-         TeleMini. It's available on the Altus Metrum web store, or
-         you can make your own using an 8-pin MicroMaTch connector on
-         one end and a set of four pins on the other.
-        </li><li class="listitem">
+         TeleMini.  You can make your own using an 8-pin MicroMaTch 
+         connector on one end and a set of four pins on the other.
+        </p></li><li class="listitem"><p>
           Take the 2 screws out of the TeleDongle case to get access
           to the circuit board.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Plug the 8-pin end of the programming cable to the matching
           connector on the TeleDongle, and the 4-pins into the holes
           in the TeleMini circuit board.  Note that the MicroMaTch
@@ -1580,100 +2006,166 @@ NAR
           the PC board when you have the cable oriented correctly, and
           that pin 1 on the TeleMini board is marked with a square pad
           while the other pins have round pads.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Attach a battery to the TeleMini board.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Plug the TeleDongle into your computer's USB port, and power
           up the TeleMini
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Run AltosUI, and select 'Flash Image' from the File menu.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Pick the TeleDongle device from the list, identifying it as the
           programming device.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Select the image you want put on the TeleMini, which should have a
           name in the form telemini-v1.0-1.0.0.ihx.  It should be visible
        in the default directory, if not you may have to poke around
        your system to find it.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Make sure the configuration parameters are reasonable
           looking. If the serial number and/or RF configuration
           values aren't right, you'll need to change them.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Hit the 'OK' button and the software should proceed to flash
           the TeleMini with new firmware, showing a progress bar.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Confirm that the TeleMini board seems to have updated OK, which you
           can do by configuring it over the radio link through the TeleDongle, or
-         letting it come up in "flight" mode and listening for telemetry.
-        </li><li class="listitem">
+         letting it come up in &#8220;flight&#8221; mode and listening for telemetry.
+        </p></li><li class="listitem"><p>
           If something goes wrong, give it another try.
-        </li></ol></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3969944"></a>3. Updating TeleDongle Firmware</h2></div></div></div><p>
+        </p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58839600"></a>5. Updating TeleDongle Firmware</h2></div></div></div><p>
         Updating TeleDongle's firmware is just like updating TeleMetrum or TeleMini
        firmware, but you use either a TeleMetrum or another TeleDongle as the programmer.
-       </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+       </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
           Find the 'programming cable' that you got as part of the starter
           kit, that has a red 8-pin MicroMaTch connector on one end and a
           red 4-pin MicroMaTch connector on the other end.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
          Find the USB cable that you got as part of the starter kit, and
-         plug the "mini" end in to the mating connector on TeleMetrum or TeleDongle.
-        </li><li class="listitem">
+         plug the &#8220;mini&#8221; end in to the mating connector on TeleMetrum or TeleDongle.
+        </p></li><li class="listitem"><p>
           Take the 2 screws out of the TeleDongle case to get access
           to the circuit board.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Plug the 8-pin end of the programming cable to the
           matching connector on the programmer, and the 4-pin end to the
           matching connector on the TeleDongle.
          Note that each MicroMaTch connector has an alignment pin that
          goes through a hole in the PC board when you have the cable
          oriented correctly.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Attach a battery to the TeleMetrum board if you're using one.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Plug both the programmer and the TeleDongle into your computer's USB
          ports, and power up the programmer.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Run AltosUI, and select 'Flash Image' from the File menu.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Pick the programmer device from the list, identifying it as the
           programming device.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Select the image you want put on the TeleDongle, which should have a
           name in the form teledongle-v0.2-1.0.0.ihx.  It should be visible
        in the default directory, if not you may have to poke around
        your system to find it.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Make sure the configuration parameters are reasonable
           looking. If the serial number and/or RF configuration
           values aren't right, you'll need to change them.  The TeleDongle
-         serial number is on the "bottom" of the circuit board, and can
+         serial number is on the &#8220;bottom&#8221; of the circuit board, and can
          usually be read through the translucent blue plastic case without
          needing to remove the board from the case.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Hit the 'OK' button and the software should proceed to flash
           the TeleDongle with new firmware, showing a progress bar.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           Confirm that the TeleDongle board seems to have updated OK, which you
           can do by plugging in to it over USB and using a terminal program
           to connect to the board and issue the 'v' command to check
           the version, etc.  Once you're happy, remove the programming cable
          and put the cover back on the TeleDongle.
-        </li><li class="listitem">
+        </p></li><li class="listitem"><p>
           If something goes wrong, give it another try.
-        </li></ol></div><p>
+        </p></li></ol></div><p>
         Be careful removing the programming cable from the locking 8-pin
         connector on TeleMetrum.  You'll need a fingernail or perhaps a thin
         screwdriver or knife blade to gently pry the locking ears out
         slightly to extract the connector.  We used a locking connector on
         TeleMetrum to help ensure that the cabling to companion boards
         used in a rocket don't ever come loose accidentally in flight.
-      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp3977040"></a>Chapter 11. Hardware Specifications</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp3977360">1. TeleMetrum Specifications</a></span></dt><dt><span class="section"><a href="#idp3983088">2. TeleMini Specifications</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3977360"></a>1. TeleMetrum Specifications</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp58856144"></a>Chapter 11. Hardware Specifications</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp58856784">1. 
+       TeleMega Specifications
+      </a></span></dt><dt><span class="section"><a href="#idp58868016">2. 
+       TeleMetrum v2 Specifications
+      </a></span></dt><dt><span class="section"><a href="#idp58878256">3. TeleMetrum v1 Specifications</a></span></dt><dt><span class="section"><a href="#idp58888496">4. 
+       TeleMini v2.0 Specifications
+      </a></span></dt><dt><span class="section"><a href="#idp58897328">5. 
+       TeleMini v1.0 Specifications
+      </a></span></dt><dt><span class="section"><a href="#idp58906128">6. 
+       EasyMini Specifications
+      </a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58856784"></a>1. 
+       TeleMega Specifications
+      </h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+           Recording altimeter for model rocketry.
+         </p></li><li class="listitem"><p>
+           Supports dual deployment and four auxiliary pyro channels
+           (a total of 6 events).
+         </p></li><li class="listitem"><p>
+           70cm 40mW ham-band transceiver for telemetry down-link.
+         </p></li><li class="listitem"><p>
+           Barometric pressure sensor good to 100k feet MSL.
+         </p></li><li class="listitem"><p>
+           1-axis high-g accelerometer for motor characterization, capable of
+           +/- 102g.
+         </p></li><li class="listitem"><p>
+           9-axis IMU including integrated 3-axis accelerometer,
+           3-axis gyroscope and 3-axis magnetometer.
+         </p></li><li class="listitem"><p>
+           On-board, integrated uBlox Max 7 GPS receiver with 5Hz update rate capability.
+         </p></li><li class="listitem"><p>
+           On-board 8 Megabyte non-volatile memory for flight data storage.
+         </p></li><li class="listitem"><p>
+           USB interface for battery charging, configuration, and data recovery.
+         </p></li><li class="listitem"><p>
+           Fully integrated support for Li-Po rechargeable batteries.
+         </p></li><li class="listitem"><p>
+           Can use either main system Li-Po or optional separate pyro battery
+           to fire e-matches.
+         </p></li><li class="listitem"><p>
+           3.25 x 1.25 inch board designed to fit inside 38mm air-frame coupler tube.
+         </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58868016"></a>2. 
+       TeleMetrum v2 Specifications
+      </h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            Recording altimeter for model rocketry.
          </p></li><li class="listitem"><p>
            Supports dual deployment (can fire 2 ejection charges).
          </p></li><li class="listitem"><p>
-           70cm ham-band transceiver for telemetry down-link.
+           70cm, 40mW ham-band transceiver for telemetry down-link.
+         </p></li><li class="listitem"><p>
+           Barometric pressure sensor good to 100k feet MSL.
+         </p></li><li class="listitem"><p>
+           1-axis high-g accelerometer for motor characterization, capable of
+           +/- 102g.
+         </p></li><li class="listitem"><p>
+           On-board, integrated uBlox Max 7 GPS receiver with 5Hz update rate capability.
+         </p></li><li class="listitem"><p>
+           On-board 8 Megabyte non-volatile memory for flight data storage.
+         </p></li><li class="listitem"><p>
+           USB interface for battery charging, configuration, and data recovery.
+         </p></li><li class="listitem"><p>
+           Fully integrated support for Li-Po rechargeable batteries.
+         </p></li><li class="listitem"><p>
+           Uses Li-Po to fire e-matches, can be modified to support 
+           optional separate pyro battery if needed.
+         </p></li><li class="listitem"><p>
+           2.75 x 1 inch board designed to fit inside 29mm air-frame coupler tube.
+         </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58878256"></a>3. TeleMetrum v1 Specifications</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+           Recording altimeter for model rocketry.
+         </p></li><li class="listitem"><p>
+           Supports dual deployment (can fire 2 ejection charges).
+         </p></li><li class="listitem"><p>
+           70cm, 10mW ham-band transceiver for telemetry down-link.
          </p></li><li class="listitem"><p>
            Barometric pressure sensor good to 45k feet MSL.
          </p></li><li class="listitem"><p>
@@ -1692,12 +2184,36 @@ NAR
            optional separate pyro battery if needed.
          </p></li><li class="listitem"><p>
            2.75 x 1 inch board designed to fit inside 29mm air-frame coupler tube.
-         </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3983088"></a>2. TeleMini Specifications</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+         </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58888496"></a>4. 
+       TeleMini v2.0 Specifications
+      </h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+           Recording altimeter for model rocketry.
+         </p></li><li class="listitem"><p>
+           Supports dual deployment (can fire 2 ejection charges).
+         </p></li><li class="listitem"><p>
+           70cm, 10mW ham-band transceiver for telemetry down-link.
+         </p></li><li class="listitem"><p>
+           Barometric pressure sensor good to 100k feet MSL.
+         </p></li><li class="listitem"><p>
+           On-board 1 megabyte non-volatile memory for flight data storage.
+         </p></li><li class="listitem"><p>
+           USB interface for configuration, and data recovery.
+         </p></li><li class="listitem"><p>
+           Support for Li-Po rechargeable batteries (using an
+           external charger), or any 3.7-15V external battery.
+         </p></li><li class="listitem"><p>
+           Uses Li-Po to fire e-matches, can be modified to support 
+           optional separate pyro battery if needed.
+         </p></li><li class="listitem"><p>
+           1.5 x .8 inch board designed to fit inside 24mm air-frame coupler tube.
+         </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58897328"></a>5. 
+       TeleMini v1.0 Specifications
+      </h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            Recording altimeter for model rocketry.
          </p></li><li class="listitem"><p>
            Supports dual deployment (can fire 2 ejection charges).
          </p></li><li class="listitem"><p>
-           70cm ham-band transceiver for telemetry down-link.
+           70cm, 10mW ham-band transceiver for telemetry down-link.
          </p></li><li class="listitem"><p>
            Barometric pressure sensor good to 45k feet MSL.
          </p></li><li class="listitem"><p>
@@ -1711,35 +2227,60 @@ NAR
            optional separate pyro battery if needed.
          </p></li><li class="listitem"><p>
            1.5 x .5 inch board designed to fit inside 18mm air-frame coupler tube.
-         </p></li></ul></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp3987896"></a>Chapter 12. FAQ</h1></div></div></div><p>
-        TeleMetrum seems to shut off when disconnected from the
-        computer.  Make sure the battery is adequately charged.  Remember the
+         </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58906128"></a>6. 
+       EasyMini Specifications
+      </h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+           Recording altimeter for model rocketry.
+         </p></li><li class="listitem"><p>
+           Supports dual deployment (can fire 2 ejection charges).
+         </p></li><li class="listitem"><p>
+           Barometric pressure sensor good to 100k feet MSL.
+         </p></li><li class="listitem"><p>
+           On-board 1 megabyte non-volatile memory for flight data storage.
+         </p></li><li class="listitem"><p>
+           USB interface for configuration, and data recovery.
+         </p></li><li class="listitem"><p>
+           Support for Li-Po rechargeable batteries (using an
+           external charger), or any 3.7-15V external battery.
+         </p></li><li class="listitem"><p>
+           Uses Li-Po to fire e-matches, can be modified to support 
+           optional separate pyro battery if needed.
+         </p></li><li class="listitem"><p>
+           1.5 x .8 inch board designed to fit inside 24mm air-frame coupler tube.
+         </p></li></ul></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp58914240"></a>Chapter 12. FAQ</h1></div></div></div><p>
+        <span class="emphasis"><em>TeleMetrum seems to shut off when disconnected from the
+        computer.</em></span>  
+       Make sure the battery is adequately charged.  Remember the
         unit will pull more power than the USB port can deliver before the
-        GPS enters "locked" mode.  The battery charges best when TeleMetrum
+        GPS enters &#8220;locked&#8221; mode.  The battery charges best when TeleMetrum
         is turned off.
       </p><p>
-        It's impossible to stop the TeleDongle when it's in "p" mode, I have
-        to unplug the USB cable?  Make sure you have tried to "escape out" of
+        <span class="emphasis"><em>It's impossible to stop the TeleDongle when it's in &#8220;p&#8221; mode, I have
+        to unplug the USB cable? </em></span>
+       Make sure you have tried to &#8220;escape out&#8221; of
         this mode.  If this doesn't work the reboot procedure for the
         TeleDongle *is* to simply unplug it. 'cu' however will retain it's
-        outgoing buffer IF your "escape out" ('~~') does not work.
+        outgoing buffer IF your &#8220;escape out&#8221; ('~~') does not work.
         At this point using either 'ao-view' (or possibly
         'cutemon') instead of 'cu' will 'clear' the issue and allow renewed
         communication.
       </p><p>
-        The amber LED (on the TeleMetrum) lights up when both
-        battery and USB are connected. Does this mean it's charging?
+        <span class="emphasis"><em>The amber LED (on the TeleMetrum) lights up when both
+        battery and USB are connected. Does this mean it's charging? 
+       </em></span>
         Yes, the yellow LED indicates the charging at the 'regular' rate.
         If the led is out but the unit is still plugged into a USB port,
         then the battery is being charged at a 'trickle' rate.
       </p><p>
-        There are no "dit-dah-dah-dit" sound or lights like the manual mentions?
-        That's the "pad" mode.  Weak batteries might be the problem.
-        It is also possible that the TeleMetrum is horizontal and the output
-        is instead a "dit-dit" meaning 'idle'. For TeleMini, it's possible that
-       it received a command packet which would have left it in "pad" mode.
+        <span class="emphasis"><em>There are no &#8220;dit-dah-dah-dit&#8221; sound or lights like the manual 
+       mentions?</em></span>
+        That's the &#8220;pad&#8221; mode.  Weak batteries might be the problem.
+        It is also possible that the flight computer is horizontal and the 
+       output
+        is instead a &#8220;dit-dit&#8221; meaning 'idle'. For TeleMini, it's possible that
+       it received a command packet which would have left it in &#8220;pad&#8221; mode.
       </p><p>
-        How do I save flight data?
+        <span class="emphasis"><em>How do I save flight data?</em></span>
         Live telemetry is written to file(s) whenever AltosUI is connected
         to the TeleDongle.  The file area defaults to ~/TeleMetrum
         but is easily changed using the menus in AltosUI. The files that
@@ -1751,7 +2292,7 @@ NAR
         data after physically retrieving your altimeter.  Make sure to save
         the on-board data after each flight; while the TeleMetrum can store
        multiple flights, you never know when you'll lose the altimeter...
-      </p></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="idp3991640"></a>Appendix A. Notes for Older Software</h1></div></div></div><p>
+      </p></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="idp58923088"></a>Appendix A. Notes for Older Software</h1></div></div></div><p>
       <span class="emphasis"><em>
       Before AltosUI was written, using Altus Metrum devices required
       some finesse with the Linux command line. There was a limited
@@ -1861,17 +2402,17 @@ NAR
       not function due to signal overload in the receivers in each device.
     </p><p>
       Now might be a good time to take a break and read the rest of this
-      manual, particularly about the two "modes" that the altimeters
+      manual, particularly about the two &#8220;modes&#8221; that the altimeters
       can be placed in. TeleMetrum uses the position of the device when booting
-      up will determine whether the unit is in "pad" or "idle" mode. TeleMini
-      enters "idle" mode when it receives a command packet within the first 5 seconds
-      of being powered up, otherwise it enters "pad" mode.
+      up will determine whether the unit is in &#8220;pad&#8221; or &#8220;idle&#8221; mode. TeleMini
+      enters &#8220;idle&#8221; mode when it receives a command packet within the first 5 seconds
+      of being powered up, otherwise it enters &#8220;pad&#8221; mode.
     </p><p>
       You can access an altimeter in idle mode from the TeleDongle's USB
       connection using the radio link
       by issuing a 'p' command to the TeleDongle. Practice connecting and
       disconnecting ('~~' while using 'cu') from the altimeter.  If
-      you cannot escape out of the "p" command, (by using a '~~' when in
+      you cannot escape out of the &#8220;p&#8221; command, (by using a '~~' when in
       CU) then it is likely that your kernel has issues.  Try a newer version.
     </p><p>
       Using this radio link allows you to configure the altimeter, test
@@ -1880,7 +2421,7 @@ NAR
       is in 'idle mode' and then place the
       rocket vertically on the launch pad, walk away and then issue a
       reboot command.  The altimeter will reboot and start sending data
-      having changed to the "pad" mode. If the TeleDongle is not receiving
+      having changed to the &#8220;pad&#8221; mode. If the TeleDongle is not receiving
       this data, you can disconnect 'cu' from the TeleDongle using the
       procedures mentioned above and THEN connect to the TeleDongle from
       inside 'ao-view'. If this doesn't work, disconnect from the
@@ -1927,25 +2468,32 @@ NAR
       the Log and Device menus.  It has a wonderful display of the incoming
       flight data and I am sure you will enjoy what it has to say to you
       once you enable the voice output!
-    </p></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="idp4008072"></a>Appendix B. Drill Templates</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp4008720">1. TeleMetrum template</a></span></dt><dt><span class="section"><a href="#idp4016464">2. TeleMini template</a></span></dt></dl></div><p>
+    </p></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="idp58946464"></a>Appendix B. Drill Templates</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp58947632">1. TeleMega template</a></span></dt><dt><span class="section"><a href="#idp58963600">2. TeleMetrum template</a></span></dt><dt><span class="section"><a href="#idp58967264">3. TeleMini v2/EasyMini template</a></span></dt><dt><span class="section"><a href="#idp58970944">4. TeleMini v1 template</a></span></dt></dl></div><p>
       These images, when printed, provide precise templates for the
       mounting holes in Altus Metrum flight computers
-    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp4008720"></a>1. TeleMetrum template</h2></div></div></div><p>
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58947632"></a>1. TeleMega template</h2></div></div></div><p>
+       TeleMega has overall dimensions of 1.250 x 3.250 inches, and
+       the mounting holes are sized for use with 4-40 or M3 screws.
+      </p><div class="informalfigure"><div class="mediaobject"><a name="TeleMegaTemplate"></a><object type="image/svg+xml" data="telemega-outline.svg"></object></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58963600"></a>2. TeleMetrum template</h2></div></div></div><p>
        TeleMetrum has overall dimensions of 1.000 x 2.750 inches, and the
        mounting holes are sized for use with 4-40 or M3 screws.
-      </p><div class="mediaobject"><a name="TeleMetrumTemplate"></a><object type="image/svg+xml" data="telemetrum.svg"></object></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp4016464"></a>2. TeleMini template</h2></div></div></div><p>
+      </p><div class="informalfigure"><div class="mediaobject"><a name="TeleMetrumTemplate"></a><object type="image/svg+xml" data="telemetrum.svg"></object></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58967264"></a>3. TeleMini v2/EasyMini template</h2></div></div></div><p>
+       TeleMini v2 and EasyMini have overall dimensions of 0.800 x 1.500 inches, and the
+       mounting holes are sized for use with 4-40 or M3 screws.
+      </p><div class="informalfigure"><div class="mediaobject"><a name="MiniTemplate"></a><object type="image/svg+xml" data="easymini-outline.svg"></object></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58970944"></a>4. TeleMini v1 template</h2></div></div></div><p>
        TeleMini has overall dimensions of 0.500 x 1.500 inches, and the
        mounting holes are sized for use with 2-56 or M2 screws.
-      </p><div class="mediaobject"><a name="TeleMiniTemplate"></a><object type="image/svg+xml" data="telemini.svg"></object></div></div></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="idp4018112"></a>Appendix C. Calibration</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp4019088">1. Radio Frequency</a></span></dt><dt><span class="section"><a href="#idp4022408">2. TeleMetrum Accelerometer</a></span></dt></dl></div><p>
-        There are only two calibrations required for a TeleMetrum board, and
-        only one for TeleDongle and TeleMini.  All boards are shipped from
-        the factory pre-calibrated, but the procedures are documented here
-       in case they are ever needed.  Re-calibration is not supported by
-       AltosUI, you must connect to the board with a serial terminal program
-       and interact directly with the on-board command interpreter to effect
-       calibration.
-      </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp4019088"></a>1. Radio Frequency</h2></div></div></div><p>
-          The radio frequency is synthesized from a clock based on the 48 MHz
+      </p><div class="informalfigure"><div class="mediaobject"><a name="TeleMiniTemplate"></a><object type="image/svg+xml" data="telemini.svg"></object></div></div></div></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="idp58974736"></a>Appendix C. Calibration</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp58976288">1. Radio Frequency</a></span></dt><dt><span class="section"><a href="#idp58980832">2. TeleMetrum and TeleMega Accelerometers</a></span></dt></dl></div><p>
+        There are only two calibrations required for TeleMetrum and
+        TeleMega, and only one for TeleDongle, TeleMini and EasyMini.
+        All boards are shipped from the factory pre-calibrated, but
+        the procedures are documented here in case they are ever
+        needed.  Re-calibration is not supported by AltosUI, you must
+        connect to the board with a serial terminal program and
+        interact directly with the on-board command interpreter to
+        effect calibration.
+      </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58976288"></a>1. Radio Frequency</h2></div></div></div><p>
+          The radio frequency is synthesized from a clock based on the
           crystal on the board.  The actual frequency of this oscillator 
           must be measured to generate a calibration constant.  While our 
           GFSK modulation
@@ -1957,13 +2505,14 @@ NAR
           temperature changes is small enough that re-calibration by customers
           should generally not be required.
         </p><p>
-          To calibrate the radio frequency, connect the UHF antenna port to a
-          frequency counter, set the board to 434.550MHz, and use the 'C'
-          command in the on-board command interpreter to generate a CW 
-          carrier.  For TeleMetrum, this is best done over USB.  For TeleMini,
-         note that the only way to escape the 'C' command is via power cycle
-         since the board will no longer be listening for commands once it
-         starts generating a CW carrier.
+          To calibrate the radio frequency, connect the UHF antenna
+          port to a frequency counter, set the board to 434.550MHz,
+          and use the 'C' command in the on-board command interpreter
+          to generate a CW carrier.  For USB-enabled boards, this is
+          best done over USB.  For TeleMini v1, note that the only way
+          to escape the 'C' command is via power cycle since the board
+          will no longer be listening for commands once it starts
+          generating a CW carrier.
        </p><p>
          Wait for the transmitter temperature to stabilize and the frequency 
           to settle down.  Then, divide 434.550 MHz by the
@@ -1973,26 +2522,18 @@ NAR
           command.  Testing with the 'C' command again should show a carrier
           within a few tens of Hertz of the intended frequency.
           As with all 'c' sub-commands, follow this with a 'c w' to write the
-          change to the parameter block in the on-board DataFlash chip.
+          change to the parameter block in the on-board storage chip.
         </p><p>
          Note that any time you re-do the radio frequency calibration, the
          radio frequency is reset to the default 434.550 Mhz.  If you want
          to use another frequency, you will have to set that again after
          calibration is completed.
-       </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp4022408"></a>2. TeleMetrum Accelerometer</h2></div></div></div><p>
-          The TeleMetrum accelerometer we use has its own 5 volt power 
-         supply and
-          the output must be passed through a resistive voltage divider to match
-          the input of our 3.3 volt ADC.  This means that unlike the barometric
-          sensor, the output of the acceleration sensor is not ratio-metric to
-          the ADC converter, and calibration is required.  Explicitly 
-         calibrating the accelerometers also allows us to load any device
-         from a Freescale family that includes at least +/- 40g, 50g, 100g, 
-         and 200g parts.  Using gravity,
-          a simple 2-point calibration yields acceptable results capturing both
-          the different sensitivities and ranges of the different accelerometer
-          parts and any variation in power supply voltages or resistor values
-          in the divider network.
+       </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58980832"></a>2. TeleMetrum and TeleMega Accelerometers</h2></div></div></div><p>
+          While barometric sensors are factory-calibrated,
+          accelerometers are not, and so each must be calibrated once
+          installed in a flight computer.  Explicitly calibrating the
+          accelerometers also allows us to load any compatible device.
+          We perform a two-point calibration using gravity.
         </p><p>
           To calibrate the acceleration sensor, use the 'c a 0' command.  You
           will be prompted to orient the board vertically with the UHF antenna
@@ -2006,110 +2547,152 @@ NAR
           The +1g and -1g calibration points are included in each telemetry
           frame and are part of the header stored in onboard flash to be
          downloaded after flight.  We always store and return raw ADC 
-         samples for each sensor... so nothing is permanently "lost" or 
-         "damaged" if the calibration is poor.
+         samples for each sensor... so nothing is permanently &#8220;lost&#8221; or 
+         &#8220;damaged&#8221; if the calibration is poor.
         </p><p>
          In the unlikely event an accel cal goes badly, it is possible
-         that TeleMetrum may always come up in 'pad mode' and as such not be
-         listening to either the USB or radio link.  If that happens,
-         there is a special hook in the firmware to force the board back
-         in to 'idle mode' so you can re-do the cal.  To use this hook, you
-         just need to ground the SPI clock pin at power-on.  This pin is
-         available as pin 2 on the 8-pin companion connector, and pin 1 is
-         ground.  So either carefully install a fine-gauge wire jumper
-         between the two pins closest to the index hole end of the 8-pin
-         connector, or plug in the programming cable to the 8-pin connector
-         and use a small screwdriver or similar to short the two pins closest
-         to the index post on the 4-pin end of the programming cable, and
-         power up the board.  It should come up in 'idle mode' (two beeps),
-        allowing a re-cal.
-        </p></div></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="idp4027304"></a>Appendix D. Release Notes</h1></div></div></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp4027664"></a>Version 1.21</h2></div></div></div><p>
+         that TeleMetrum or TeleMega may always come up in 'pad mode'
+         and as such not be listening to either the USB or radio link.
+         If that happens, there is a special hook in the firmware to
+         force the board back in to 'idle mode' so you can re-do the
+         cal.  To use this hook, you just need to ground the SPI clock
+         pin at power-on.  This pin is available as pin 2 on the 8-pin
+         companion connector, and pin 1 is ground.  So either
+         carefully install a fine-gauge wire jumper between the two
+         pins closest to the index hole end of the 8-pin connector, or
+         plug in the programming cable to the 8-pin connector and use
+         a small screwdriver or similar to short the two pins closest
+         to the index post on the 4-pin end of the programming cable,
+         and power up the board.  It should come up in 'idle mode'
+         (two beeps), allowing a re-cal.
+        </p></div></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="idp58985936"></a>Appendix D. Release Notes</h1></div></div></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58986576"></a>Version 1.3</h2></div></div></div><p>
+    Version 1.3 is a major release. It adds support for TeleMega,
+    TeleMetrum v2.0, TeleMini v2.0 and EasyMini.
+  </p><p>
+    AltOS Firmware Changes
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+         Add STM32L processor support. This includes enhancements to
+         the scheduler to support products with many threads.
+       </p></li><li class="listitem"><p>
+         Add NXP LPC11U14 processor support.
+       </p></li><li class="listitem"><p>
+         Support additional pyro channels. These are configurable
+         through the UI to handle air starts, staging, additional
+         recovery events and external devices such as cameras.
+       </p></li><li class="listitem"><p>
+         Add 3-axis gyro support for orientation tracking. This
+         integrates the gyros to compute the angle from vertical during
+         flight, allowing the additional pyro events to be controlled
+         by this value.
+       </p></li><li class="listitem"><p>
+         Many more device drivers, including u-Blox Max 7Q GPS,
+         Freescale MMA6555 digital single-axis accelerometer,
+         Invensense MPU6000 3-axis accelerometer + 3 axis gyro,
+         Honeywell HMC5883 3-axis magnetic sensor and the TI CC1120 and
+         CC115L digital FM transceivers
+       </p></li></ul></div><p>
+  </p><p>
+    AltosUI changes
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+         Support TeleMega, TeleMetrum v2.0, TeleMini v2.0 and EasyMini telemetry and log formats.
+       </p></li><li class="listitem"><p>
+         Use preferred units for main deployment height configuration,
+         instead of always doing configuration in meters.
+       </p></li></ul></div><p>
+  </p><p>
+    MicroPeak UI changes
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+         Add 'Download' button to menu bar.
+       </p></li><li class="listitem"><p>
+         Save the last log directory and offer that as the default for new downloads
+       </p></li></ul></div><p>
+  </p></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58988176"></a>Version 1.2.1</h2></div></div></div><p>
     Version 1.2.1 is a minor release. It adds support for TeleBT and
     the AltosDroid application, provides several new features in
     AltosUI and fixes some bugs in the AltOS firmware.
   </p><p>
     AltOS Firmware Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Add support for TeleBT
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        In TeleMini recovery mode (when booted with the outer two
        debug pins connected together), the radio parameters are also
        set back to defaults (434.550MHz, N0CALL, factory radio cal).
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add support for reflashing the SkyTraq GPS chips. This
        requires special host-side code which currently only exists
        for Linux.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Correct Kalman filter model error covariance matrix. The
        values used previously assumed continuous measurements instead
        of discrete measurements.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Fix some bugs in the USB driver for TeleMetrum and TeleDongle
        that affected Windows users.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Adjusted the automatic gain control parameters that affect
        receive performance for TeleDongle. Field tests indicate that this
        may improve receive performance somewhat.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p><p>
     AltosUI Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Handle missing GPS lock in 'Descent' tab. Previously, if the
        GPS position of the pad was unknown, an exception would be
        raised, breaking the Descent tab contents.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Improve the graph, adding tool-tips to show values near the
        cursor and making the displayed set of values configurable,
        adding all of the flight data as options while leaving the
        default settings alone so that the graph starts by showing
        height, speed and acceleration.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Make the initial position of the AltosUI top level window
        configurable. Along with this change, the other windows will
        pop up at 'sensible' places now, instead of on top of one
        another.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add callsign to Monitor idle window and connecting
        dialogs. This makes it clear which callsign is being used so
        that the operator will be aware that it must match the flight
        computer value or no communication will work.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        When downloading flight data, display the block number so that
        the user has some sense of progress. Unfortunately, we don't
        know how many blocks will need to be downloaded, but at least
        it isn't just sitting there doing nothing for a long time.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add GPS data and a map to the graph window. This lets you see
        a complete summary of the flight without needing to 'replay'
        the whole thing.
-      </li></ul></div><p>
-  </p></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp4028224"></a>Version 1.2</h2></div></div></div><p>
+      </p></li></ul></div><p>
+  </p></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58989776"></a>Version 1.2</h2></div></div></div><p>
     Version 1.2 is a major release. It adds support for MicroPeak and
     the MicroPeak USB adapter.
   </p><p>
     AltOS Firmware Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Add MicroPeak support. This includes support for the ATtiny85
        processor and adaptations to the core code to allow for
        devices too small to run the multi-tasking scheduler.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p><p>
     MicroPeak UI changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Added this new application
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p><p>
     Distribution Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Distribute Mac OS X packages in disk image ('.dmg') format to
        greatly simplify installation.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Provide version numbers for the shared Java libraries to
        ensure that upgrades work properly, and to allow for multiple
        Altus Metrum software packages to be installed in the same
        directory at the same time.
-      </li></ul></div><p>
-  </p></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp4028784"></a>Version 1.1.1</h2></div></div></div><p>
+      </p></li></ul></div><p>
+  </p></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58991280"></a>Version 1.1.1</h2></div></div></div><p>
     Version 1.1.1 is a bug-fix release. It fixes a couple of bugs in
     AltosUI and one firmware bug that affects TeleMetrum version 1.0
     boards. Thanks to Bob Brown for help diagnosing the Google Earth
@@ -2117,7 +2700,7 @@ NAR
     Distance value in the Descent tab.
   </p><p>
     AltOS Firmware Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        TeleMetrum v1.0 boards use the AT45DB081D flash memory part to
        store flight data, which is different from later TeleMetrum
        boards. The AltOS v1.1 driver for this chip couldn't erase
@@ -2125,20 +2708,20 @@ NAR
        configuration values. This bug doesn't affect newer TeleMetrum
        boards, and it doesn't affect the safety of rockets flying
        version 1.1 firmware.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p><p>
     AltosUI Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Creating a Google Earth file (KML) from on-board flight data
        (EEPROM) would generate an empty file. The code responsible
        for reading the EEPROM file wasn't ever setting the GPS valid
        bits, and so the KML export code thought there was no GPS data
        in the file.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        The &#8220;Landed&#8221; tab was displaying all values in metric units,
        even when AltosUI was configured to display imperial
        units. Somehow I just missed this tab when doing the units stuff.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        The &#8220;Descent&#8221; tab displays the range to the rocket, which is a
        combination of the over-the-ground distance to the rockets
        current latitude/longitude and the height of the rocket. As
@@ -2147,109 +2730,109 @@ NAR
        eventually land. A new &#8220;Ground Distance&#8221; field has been added
        which displays the distance to a spot right underneath the
        rocket.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Sensor data wasn't being displayed for TeleMini flight
        computers in Monitor Idle mode, including things like battery
        voltage. The code that picked which kinds of data to fetch
        from the flight computer was missing a check for TeleMini when
        deciding whether to fetch the analog sensor data.
-      </li></ul></div><p>
-  </p></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp4029344"></a>Version 1.1</h2></div></div></div><p>
+      </p></li></ul></div><p>
+  </p></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58992784"></a>Version 1.1</h2></div></div></div><p>
     Version 1.1 is a minor release. It provides a few new features in AltosUI
     and the AltOS firmware and fixes bugs.
   </p><p>
     AltOS Firmware Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Add apogee-lockout value. Overrides the apogee detection logic to
        prevent incorrect apogee charge firing.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Fix a bug where the data reported in telemetry packets was
        from 320ms ago.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Force the radio frequency to 434.550MHz when the debug clock
        pin is connected to ground at boot time. This provides a way
        to talk to a TeleMini which is configured to some unknown frequency.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Provide RSSI values for Monitor Idle mode. This makes it easy to check radio
        range without needing to go to flight mode.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Fix a bug which caused the old received telemetry packets to
        be retransmitted over the USB link when the radio was turned
        off and back on.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p><p>
     AltosUI Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Fix a bug that caused GPS ready to happen too quickly. The
        software was using every telemetry packet to signal new GPS
        data, which caused GPS ready to be signalled after 10 packets
        instead of 10 GPS updates.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Fix Google Earth data export to work with recent versions. The
        google earth file loading code got a lot pickier, requiring
        some minor white space changes in the export code.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Make the look-n-feel configurable, providing a choice from
        the available options.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add an 'Age' element to mark how long since a telemetry packet
        has been received. Useful to quickly gauge whether
        communications with the rocket are still active.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add 'Configure Ground Station' dialog to set the radio
        frequency used by a particular TeleDongle without having to go
        through the flight monitor UI.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add configuration for the new apogee-lockout value. A menu provides a list of
        reasonable values, or the value can be set by hand.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Changed how flight data are downloaded. Now there's an initial
        dialog asking which flights to download, and after that
        finishes, a second dialog comes up asking which flights to delete.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Re-compute time spent in each state for the flight graph; this
        figures out the actual boost and landing times instead of
        using the conservative values provide by the flight
        electronics. This improves the accuracy of the boost
        acceleration and main descent rate computations.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Make AltosUI run on Mac OS Lion. The default Java heap space
        was dramatically reduced for this release causing much of the
        UI to fail randomly. This most often affected the satellite
        mapping download and displays.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Change how data are displayed in the 'table' tab of the flight
        monitoring window. This eliminates entries duplicated from the
        header and adds both current altitude and pad altitude, which
        are useful in 'Monitor Idle' mode.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add Imperial units mode to present data in feet instead of
        meters.
-      </li></ul></div><p>
-  </p></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp4029904"></a>Version 1.0.1</h2></div></div></div><p>
+      </p></li></ul></div><p>
+  </p></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58994288"></a>Version 1.0.1</h2></div></div></div><p>
     Version 1.0.1 is a major release, adding support for the TeleMini
     device and lots of new AltosUI features
   </p><p>
     AltOS Firmware Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Add TeleMini v1.0 support. Firmware images for TeleMini are
        included in AltOS releases.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Change telemetry to be encoded in multiple 32-byte packets. This
        enables support for TeleMini and other devices without requiring
        further updates to the TeleDongle firmware.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Support operation of TeleMetrum with the antenna pointing
        aft. Previous firmware versions required the antenna to be
        pointing upwards, now there is a configuration option allowing
        the antenna to point aft, to aid installation in some airframes.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Ability to disable telemetry. For airframes where an antenna
        just isn't possible, or where radio transmissions might cause
        trouble with other electronics, there's a configuration option
        to disable all telemetry. Note that the board will still
        enable the radio link in idle mode.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Arbitrary frequency selection. The radios in Altus Metrum
        devices can be programmed to a wide range of frequencies, so
        instead of limiting devices to 10 pre-selected 'channels', the
@@ -2257,7 +2840,7 @@ NAR
        70cm band. Note that the RF matching circuit on the boards is
        tuned for around 435MHz, so frequencies far from that may
        reduce the available range.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Kalman-filter based flight-tracking. The model based sensor
        fusion approach of a Kalman filter means that AltOS now
        computes apogee much more accurately than before, generally
@@ -2265,31 +2848,31 @@ NAR
        allows the baro-only TeleMini device to correctly identify
        Mach transitions, avoiding the error-prone selection of a Mach
        delay.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p><p>
     AltosUI Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Wait for altimeter when using packet mode. Instead of quicly
        timing out when trying to initialize a packet mode
        configuration connection, AltosUI now waits indefinitely for
        the remote device to appear, providing a cancel button should
        the user get bored. This is necessary as the TeleMini can only
        be placed in "Idle" mode if AltosUI is polling it.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add main/apogee voltage graphs to the data plot. This provides
        a visual indication if the igniters fail before being fired.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Scan for altimeter devices by watching the defined telemetry
        frequencies. This avoids the problem of remembering what
        frequency a device was configured to use, which is especially
        important with TeleMini which does not include a USB connection.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Monitor altimeter state in "Idle" mode. This provides much of
        the information presented in the "Pad" dialog from the Monitor
        Flight command, monitoring the igniters, battery and GPS
        status withing requiring the flight computer to be armed and
        ready for flight.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Pre-load map images from home. For those launch sites which
        don't provide free Wi-Fi, this allows you to download the
        necessary satellite images given the location of the launch
@@ -2298,61 +2881,61 @@ NAR
        you've got a launch site not on that list, please send the
        name of it, latitude and longitude along with a link to the
        web site of the controlling club to the altusmetrum mailing list.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Flight statistics are now displayed in the Graph data
        window. These include max height/speed/accel, average descent
        rates and a few other bits of information. The Graph Data
        window can now be reached from the 'Landed' tab in the Monitor
        Flight window so you can immediately see the results of a
        flight.
-      </li></ul></div><p>
-  </p></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp4030464"></a>Version 0.9.2</h2></div></div></div><p>
+      </p></li></ul></div><p>
+  </p></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58995792"></a>Version 0.9.2</h2></div></div></div><p>
     Version 0.9.2 is an AltosUI bug-fix release, with no firmware changes.
-  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
       Fix plotting problems due to missing file in the Mac OS install image.
-    </li><li class="listitem">
+</p></li><li class="listitem"><p>
       Always read whole eeprom blocks, mark empty records invalid, display parsing errors to user.
-    </li><li class="listitem">
+</p></li><li class="listitem"><p>
       Add software version to Configure AltosUI dialog
-    </li></ul></div></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp4031024"></a>Version 0.9</h2></div></div></div><p>
+</p></li></ul></div></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58997296"></a>Version 0.9</h2></div></div></div><p>
     Version 0.9 adds a few new firmware features and accompanying
     AltosUI changes, along with new hardware support.
-  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
       Support for TeleMetrum v1.1 hardware. Sources for the flash
       memory part used in v1.0 dried up, so v1.1 uses a different part
       which required a new driver and support for explicit flight log
       erasing.
-    </li><li class="listitem">
+</p></li><li class="listitem"><p>
       Multiple flight log support. This stores more than one flight
       log in the on-board flash memory. It also requires the user to
       explicitly erase flights so that you won't lose flight logs just
       because you fly the same board twice in one day.
-    </li><li class="listitem">
+</p></li><li class="listitem"><p>
       Telemetry support for devices with serial number &gt;=
       256. Previous versions used a telemetry packet format that
       provided only 8 bits for the device serial number. This change
       requires that both ends of the telemetry link be running the 0.9
       firmware or they will not communicate.
-    </li></ul></div></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp4031584"></a>Version 0.8</h2></div></div></div><p>
+</p></li></ul></div></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp58998800"></a>Version 0.8</h2></div></div></div><p>
     Version 0.8 offers a major upgrade in the AltosUI
     interface. Significant new features include:
-  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
       Post-flight graphing tool. This lets you explore the behaviour
       of your rocket after flight with a scroll-able and zoom-able
       chart showing the altitude, speed and acceleration of the
       airframe along with events recorded by the flight computer. You
       can export graphs to PNG files, or print them directly.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Real-time moving map which overlays the in-progress flight on
       satellite imagery fetched from Google Maps. This lets you see in
       pictures where your rocket has landed, allowing you to plan
       recovery activities more accurately.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Wireless recovery system testing. Prep your rocket for flight
       and test fire the deployment charges to make sure things work as
       expected. All without threading wires through holes in your
       airframe.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Optimized flight status displays. Each flight state now has it's
       own custom 'tab' in the flight monitoring window so you can
       focus on the most important details. Pre-flight, the system
@@ -2361,51 +2944,51 @@ NAR
       they're all green and your rocket is ready for flight. There are
       also tabs for ascent, descent and landing along with the
       original tabular view of the data.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Monitor multiple flights simultaneously. If you have more than
       one TeleDongle, you can monitor a flight with each one on the
       same computer.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Automatic flight monitoring at startup. Plug TeleDongle into the
       machine before starting AltosUI and it will automatically
       connect to it and prepare to monitor a flight.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Exports Google Earth flight tracks. Using the Keyhole Markup
       Language (.kml) file format, this provides a 3D view of your
       rocket flight through the Google Earth program.
-    </li></ul></div></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp4032144"></a>Version 0.7.1</h2></div></div></div><p>
+    </p></li></ul></div></div><div class="simplesect"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp59000304"></a>Version 0.7.1</h2></div></div></div><p>
 Version 0.7.1 is the first release containing our new cross-platform Java-based user interface. AltosUI can:
-  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
       Receive and log telemetry from a connected TeleDongle
       device. All data received is saved to log files named with the
       current date and the connected rocket serial and flight
       numbers. There is no mode in which telemetry data will not be
       saved.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Download logged data from TeleMetrum devices, either through a
       direct USB connection or over the air through a TeleDongle
       device.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Configure a TeleMetrum device, setting the radio channel,
       callsign, apogee delay and main deploy height. This can be done
       through either a USB connection or over a radio link via a
       TeleDongle device.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Replay a flight in real-time. This takes a saved telemetry log
       or eeprom download and replays it through the user interface so
       you can relive your favorite rocket flights.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Reprogram Altus Metrum devices. Using an Altus Metrum device
       connected via USB, another Altus Metrum device can be
       reprogrammed using the supplied programming cable between the
       two devices.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Export Flight data to a comma-separated-values file. This takes
       either telemetry or on-board flight data and generates data
       suitable for use in external applications. All data is exported
       using standard units so that no device-specific knowledge is
       needed to handle the data.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Speak to you during the flight. Instead of spending the flight
       hunched over your laptop looking at the screen, enjoy the view
       while the computer tells you what&#8217;s going on up there. During
@@ -2414,4 +2997,4 @@ Version 0.7.1 is the first release containing our new cross-platform Java-based
       range information to try and help you find your rocket in the
       air. Once on the ground, the direction and distance are
       reported.
-    </li></ul></div></div></div></div></body></html>
+    </p></li></ul></div></div></div></div></body></html>
index 3751b88d6cfcf36ca61693c0a88c99396af967d7..02cb97e361f7d257794df0e29643857cd1985d26 100644 (file)
Binary files a/AltOS/doc/altusmetrum.pdf and b/AltOS/doc/altusmetrum.pdf differ
diff --git a/AltOS/doc/ascent.png b/AltOS/doc/ascent.png
new file mode 100644 (file)
index 0000000..fd1cd09
Binary files /dev/null and b/AltOS/doc/ascent.png differ
index 6936953d03eff364a095985fb6d90bf5025bb54c..086fa7198cf3259f799572768644079b23290f9a 100644 (file)
@@ -1,10 +1,10 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>AltOS Companion Port</title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article" title="AltOS Companion Port"><div class="titlepage"><div><div><h2 class="title"><a name="idm14833760"></a>AltOS Companion Port</h2></div><div><h3 class="subtitle"><i>Protocol Definitions</i></h3></div><div><div class="author"><h3 class="author"><span class="firstname">Keith</span> <span class="surname">Packard</span></h3></div></div><div><p class="copyright">Copyright © 2012 Keith Packard</p></div><div><div class="legalnotice" title="Legal Notice"><a name="idp108936"></a><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>AltOS Companion Port</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><div><div><h2 class="title"><a name="idm6245264"></a>AltOS Companion Port</h2></div><div><h3 class="subtitle"><i>Protocol Definitions</i></h3></div><div><div class="author"><h3 class="author"><span class="firstname">Keith</span> <span class="surname">Packard</span></h3></div></div><div><p class="copyright">Copyright © 2012 Keith Packard</p></div><div><div class="legalnotice"><a name="idp48058064"></a><p>
        This document is released under the terms of the
        <a class="ulink" href="http://creativecommons.org/licenses/by-sa/3.0/" target="_top">
          Creative Commons ShareAlike 3.0
        </a>
        license.
-      </p></div></div><div><div class="revhistory"><table border="1" width="100%" summary="Revision history"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 0.1</td><td align="left">13 January 2012</td></tr><tr><td align="left" colspan="2">Initial content</td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp110960">1. Companion Port</a></span></dt><dt><span class="section"><a href="#idp775584">2. Companion SPI Protocol</a></span></dt><dt><span class="section"><a href="#idp2087320">3. SPI Message Formats</a></span></dt><dd><dl><dt><span class="section"><a href="#idp2275192">3.1. Command Message</a></span></dt><dt><span class="section"><a href="#idp789920">3.2. SETUP reply message</a></span></dt><dt><span class="section"><a href="#idp195992">3.3. FETCH reply message</a></span></dt></dl></dd><dt><span class="section"><a href="#idp47944">4. History and Motivation</a></span></dt></dl></div><div class="section" title="1. Companion Port"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp110960"></a>1. Companion Port</h2></div></div></div><p>
+      </p></div></div><div><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 0.1</td><td align="left">13 January 2012</td></tr><tr><td align="left" colspan="2">Initial content</td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp47880352">1. Companion Port</a></span></dt><dt><span class="section"><a href="#idp47884848">2. Companion SPI Protocol</a></span></dt><dt><span class="section"><a href="#idp48960080">3. SPI Message Formats</a></span></dt><dd><dl><dt><span class="section"><a href="#idp48961360">3.1. Command Message</a></span></dt><dt><span class="section"><a href="#idp47895456">3.2. SETUP reply message</a></span></dt><dt><span class="section"><a href="#idp47916992">3.3. FETCH reply message</a></span></dt></dl></dd><dt><span class="section"><a href="#idp54642256">4. History and Motivation</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47880352"></a>1. Companion Port</h2></div></div></div><p>
       Many Altus Metrum products come with an eight pin Micro MaTch
       connector, called the Companion Port. This is often used to
       program devices using a programming cable. However, it can also
       (hence the name).
     </p><p>
       The Companion Port provides two different functions:
-      </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+      </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Power. Both battery-level and 3.3V regulated power are
          available. Note that the amount of regulated power is not
          huge; TeleMetrum contains a 150mA regulator and uses, at
          peak, about 120mA or so. For applications needing more than
          a few dozen mA, placing a separate regulator on them and
          using the battery for power is probably a good idea.
-       </li><li class="listitem">
+         </p></li><li class="listitem"><p>
          SPI. The flight computer operates as a SPI master, using
          a protocol defined in this document. Companion boards
          provide a matching SPI slave implementation which supplies
          telemetry information for the radio downlink during flight
-       </li></ul></div><p>
-    </p></div><div class="section" title="2. Companion SPI Protocol"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp775584"></a>2. Companion SPI Protocol</h2></div></div></div><p>
+         </p></li></ul></div><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47884848"></a>2. Companion SPI Protocol</h2></div></div></div><p>
       The flight computer implements a SPI master communications
       channel over the companion port, and uses this to get
       information about a connected companion board and then to get
     </p><p>
       Because of the limits of the AVR processors used in the first
       two companion boards, the SPI data rate is set to 187.5kbaud.
-    </p></div><div class="section" title="3. SPI Message Formats"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp2087320"></a>3. SPI Message Formats</h2></div></div></div>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp48960080"></a>3. SPI Message Formats</h2></div></div></div><p>
     This section first defines the command message format sent from
     the flight computer to the companion board, and then the various
     reply message formats for each type of command message.
-    <div class="section" title="3.1. Command Message"><div class="titlepage"><div><div><h3 class="title"><a name="idp2275192"></a>3.1. Command Message</h3></div></div></div><div class="table"><a name="idp1196016"></a><p class="title"><b>Table 1. Companion Command Message</b></p><div class="table-contents"><table summary="Companion Command Message" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0</td><td align="center">uint8_t</td><td align="left">command</td><td align="left">Command identifier</td></tr><tr><td align="center">1</td><td align="center">uint8_t</td><td align="left">flight_state</td><td align="left">Current flight computer state</td></tr><tr><td align="center">2</td><td align="center">uint16_t</td><td align="left">tick</td><td align="left">Flight computer clock (100 ticks/second)</td></tr><tr><td align="center">4</td><td align="center">uint16_t</td><td align="left">serial</td><td align="left">Flight computer serial number</td></tr><tr><td align="center">6</td><td align="center">uint16_t</td><td align="left">flight</td><td align="left">Flight number</td></tr><tr><td align="center">8</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"><div class="table"><a name="idp781256"></a><p class="title"><b>Table 2. Companion Command Identifiers</b></p><div class="table-contents"><table summary="Companion Command Identifiers" border="1"><colgroup><col align="center" class="Value"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Value</th><th align="left">Name</th><th align="left">Description</th></tr></thead><tbody><tr><td align="center">1</td><td align="left">SETUP</td><td align="left">Supply the flight computer with companion
+    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp48961360"></a>3.1. Command Message</h3></div></div></div><div class="table"><a name="idp48962032"></a><p class="title"><b>Table 1. Companion Command Message</b></p><div class="table-contents"><table summary="Companion Command Message" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0</td><td align="center">uint8_t</td><td align="left">command</td><td align="left">Command identifier</td></tr><tr><td align="center">1</td><td align="center">uint8_t</td><td align="left">flight_state</td><td align="left">Current flight computer state</td></tr><tr><td align="center">2</td><td align="center">uint16_t</td><td align="left">tick</td><td align="left">Flight computer clock (100 ticks/second)</td></tr><tr><td align="center">4</td><td align="center">uint16_t</td><td align="left">serial</td><td align="left">Flight computer serial number</td></tr><tr><td align="center">6</td><td align="center">uint16_t</td><td align="left">flight</td><td align="left">Flight number</td></tr><tr><td align="center">8</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"><div class="table"><a name="idp53502880"></a><p class="title"><b>Table 2. Companion Command Identifiers</b></p><div class="table-contents"><table summary="Companion Command Identifiers" border="1"><colgroup><col align="center" class="Value"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Value</th><th align="left">Name</th><th align="left">Description</th></tr></thead><tbody><tr><td align="center">1</td><td align="left">SETUP</td><td align="left">Supply the flight computer with companion
              information</td></tr><tr><td align="center">2</td><td align="left">FETCH</td><td align="left">Return telemetry information</td></tr><tr><td align="center">3</td><td align="left">NOTIFY</td><td align="left">Tell companion board when flight state
              changes</td></tr></tbody></table></div></div><br class="table-break"><p>
        The flight computer will send a SETUP message shortly after
@@ -74,7 +74,7 @@
        use this to change data collection parameters, disabling data
        logging until the flight starts and terminating it when the
        flight ends.
-      </p></div><div class="section" title="3.2. SETUP reply message"><div class="titlepage"><div><div><h3 class="title"><a name="idp789920"></a>3.2. SETUP reply message</h3></div></div></div><div class="table"><a name="idp790264"></a><p class="title"><b>Table 3. SETUP reply contents</b></p><div class="table-contents"><table summary="SETUP reply contents" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0</td><td align="center">uint16_t</td><td align="left">board_id</td><td align="left">Board identifier</td></tr><tr><td align="center">2</td><td align="center">uint16_t</td><td align="left">board_id_inverse</td><td align="left">~board_id&#8212;used to tell if a board is present</td></tr><tr><td align="center">4</td><td align="center">uint8_t</td><td align="left">update_period</td><td align="left">Minimum time (in 100Hz ticks) between FETCH commands</td></tr><tr><td align="center">5</td><td align="center">uint8_t</td><td align="left">channels</td><td align="left">Number of data channels to retrieve in FETCH command</td></tr><tr><td align="center">6</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47895456"></a>3.2. SETUP reply message</h3></div></div></div><div class="table"><a name="idp47896128"></a><p class="title"><b>Table 3. SETUP reply contents</b></p><div class="table-contents"><table summary="SETUP reply contents" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0</td><td align="center">uint16_t</td><td align="left">board_id</td><td align="left">Board identifier</td></tr><tr><td align="center">2</td><td align="center">uint16_t</td><td align="left">board_id_inverse</td><td align="left">~board_id&#8212;used to tell if a board is present</td></tr><tr><td align="center">4</td><td align="center">uint8_t</td><td align="left">update_period</td><td align="left">Minimum time (in 100Hz ticks) between FETCH commands</td></tr><tr><td align="center">5</td><td align="center">uint8_t</td><td align="left">channels</td><td align="left">Number of data channels to retrieve in FETCH command</td></tr><tr><td align="center">6</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"><p>
        The SETUP reply contains enough information to uniquely
        identify the companion board to the end user as well as for
        the flight computer to know how many data values to expect in
        bit-wise inverse of board_id. Current companion boards use
        USB product ID as the board_id, but the flight computer does
        not interpret this data and so it can be any value.
-      </p></div><div class="section" title="3.3. FETCH reply message"><div class="titlepage"><div><div><h3 class="title"><a name="idp195992"></a>3.3. FETCH reply message</h3></div></div></div><div class="table"><a name="idp196336"></a><p class="title"><b>Table 4. FETCH reply contents</b></p><div class="table-contents"><table summary="FETCH reply contents" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0</td><td align="center">uint16_t</td><td align="left">data0</td><td align="left">0th data item</td></tr><tr><td align="center">2</td><td align="center">uint16_t</td><td align="left">data1</td><td align="left">1st data item</td></tr><tr><td align="center">...</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47916992"></a>3.3. FETCH reply message</h3></div></div></div><div class="table"><a name="idp47917664"></a><p class="title"><b>Table 4. FETCH reply contents</b></p><div class="table-contents"><table summary="FETCH reply contents" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0</td><td align="center">uint16_t</td><td align="left">data0</td><td align="left">0th data item</td></tr><tr><td align="center">2</td><td align="center">uint16_t</td><td align="left">data1</td><td align="left">1st data item</td></tr><tr><td align="center">...</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"><p>
        The FETCH reply contains arbitrary data to be reported over
        the flight computer telemetry link. The number of 16-bit data items
        must match the 'channels' value provided in the SETUP reply
        message.
-      </p></div></div><div class="section" title="4. History and Motivation"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47944"></a>4. History and Motivation</h2></div></div></div><p>
+      </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp54642256"></a>4. History and Motivation</h2></div></div></div><p>
       To allow cross-programming, the original TeleMetrum and
       TeleDongle designs needed to include some kind of
       connector. With that in place, adding the ability to connect
index d10306b1d9e705aa8c67f475124732b1fb65227a..a0e0f6011bd60942c5e40701facea09864b799fd 100644 (file)
Binary files a/AltOS/doc/companion.pdf and b/AltOS/doc/companion.pdf differ
diff --git a/AltOS/doc/configure-altimeter.png b/AltOS/doc/configure-altimeter.png
new file mode 100644 (file)
index 0000000..afb1932
Binary files /dev/null and b/AltOS/doc/configure-altimeter.png differ
diff --git a/AltOS/doc/configure-altosui.png b/AltOS/doc/configure-altosui.png
new file mode 100644 (file)
index 0000000..43fd400
Binary files /dev/null and b/AltOS/doc/configure-altosui.png differ
diff --git a/AltOS/doc/configure-groundstation.png b/AltOS/doc/configure-groundstation.png
new file mode 100644 (file)
index 0000000..9f836e7
Binary files /dev/null and b/AltOS/doc/configure-groundstation.png differ
diff --git a/AltOS/doc/configure-pyro.png b/AltOS/doc/configure-pyro.png
new file mode 100644 (file)
index 0000000..4f03c0a
Binary files /dev/null and b/AltOS/doc/configure-pyro.png differ
diff --git a/AltOS/doc/descent.png b/AltOS/doc/descent.png
new file mode 100644 (file)
index 0000000..0c479e7
Binary files /dev/null and b/AltOS/doc/descent.png differ
diff --git a/AltOS/doc/device-selection.png b/AltOS/doc/device-selection.png
new file mode 100644 (file)
index 0000000..ffd067d
Binary files /dev/null and b/AltOS/doc/device-selection.png differ
diff --git a/AltOS/doc/easymini-top.jpg b/AltOS/doc/easymini-top.jpg
new file mode 100644 (file)
index 0000000..2b9e0a3
Binary files /dev/null and b/AltOS/doc/easymini-top.jpg differ
diff --git a/AltOS/doc/fire-igniter.png b/AltOS/doc/fire-igniter.png
new file mode 100644 (file)
index 0000000..8580457
Binary files /dev/null and b/AltOS/doc/fire-igniter.png differ
diff --git a/AltOS/doc/graph-configure.png b/AltOS/doc/graph-configure.png
new file mode 100644 (file)
index 0000000..b588833
Binary files /dev/null and b/AltOS/doc/graph-configure.png differ
diff --git a/AltOS/doc/graph-map.png b/AltOS/doc/graph-map.png
new file mode 100644 (file)
index 0000000..fd0fb13
Binary files /dev/null and b/AltOS/doc/graph-map.png differ
diff --git a/AltOS/doc/graph-stats.png b/AltOS/doc/graph-stats.png
new file mode 100644 (file)
index 0000000..6f5c979
Binary files /dev/null and b/AltOS/doc/graph-stats.png differ
diff --git a/AltOS/doc/graph.png b/AltOS/doc/graph.png
new file mode 100644 (file)
index 0000000..c7c7b7d
Binary files /dev/null and b/AltOS/doc/graph.png differ
diff --git a/AltOS/doc/landed.png b/AltOS/doc/landed.png
new file mode 100644 (file)
index 0000000..7b4f317
Binary files /dev/null and b/AltOS/doc/landed.png differ
diff --git a/AltOS/doc/launch-pad.png b/AltOS/doc/launch-pad.png
new file mode 100644 (file)
index 0000000..a6f142d
Binary files /dev/null and b/AltOS/doc/launch-pad.png differ
diff --git a/AltOS/doc/load-maps.png b/AltOS/doc/load-maps.png
new file mode 100644 (file)
index 0000000..dc7ea64
Binary files /dev/null and b/AltOS/doc/load-maps.png differ
index 8a0f85c057f22e99d10ab19fcd3ca8ff471abf3c..2f6afb7d8bbe56b0b090acbb56823a2cff9234b3 100644 (file)
@@ -1,10 +1,10 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>MicroPeak Owner's Manual</title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book" title="MicroPeak Owner's Manual"><div class="titlepage"><div><div><h1 class="title"><a name="idm14841928"></a>MicroPeak Owner's Manual</h1></div><div><h2 class="subtitle">A recording altimeter for hobby rocketry</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Keith</span> <span class="surname">Packard</span></h3></div></div><div><p class="copyright">Copyright © 2012 Bdale Garbee and Keith Packard</p></div><div><div class="legalnotice" title="Legal Notice"><a name="idp108880"></a><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>MicroPeak Owner's Manual</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book"><div class="titlepage"><div><div><h1 class="title"><a name="idm6245264"></a>MicroPeak Owner's Manual</h1></div><div><h2 class="subtitle">A recording altimeter for hobby rocketry</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Keith</span> <span class="surname">Packard</span></h3></div></div><div><p class="copyright">Copyright © 2012 Bdale Garbee and Keith Packard</p></div><div><div class="legalnotice"><a name="idp48058064"></a><p>
         This document is released under the terms of the
         <a class="ulink" href="http://creativecommons.org/licenses/by-sa/3.0/" target="_top">
           Creative Commons ShareAlike 3.0
         </a>
         license.
-      </p></div></div><div><div class="revhistory"><table border="1" width="100%" summary="Revision history"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 0.1</td><td align="left">29 October 2012</td></tr><tr><td align="left" colspan="2">
+      </p></div></div><div><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 0.1</td><td align="left">29 October 2012</td></tr><tr><td align="left" colspan="2">
          Initial release with preliminary hardware.
        </td></tr><tr><td align="left">Revision 1.0</td><td align="left">18 November 2012</td></tr><tr><td align="left" colspan="2">
          Updates for version 1.0 release.
          Add documentation for the MicroPeak USB adapter board. Note
          the switch to a Kalman filter for peak altitude
          determination.
-       </td></tr></table></div></div></div><hr></div><div class="acknowledgements" title="Acknowledgements"><div class="titlepage"><div><div><h2 class="title"><a name="idp772792"></a>Acknowledgements</h2></div></div></div>
-    <p>
+       </td></tr></table></div></div></div><hr></div><div class="dedication"><div class="titlepage"><div><div><h1 class="title"><a name="idp47885280"></a>Acknowledgements</h1></div></div></div><p>
       Thanks to John Lyngdal for suggesting that we build something like this.
-    </p>
-    <p>
+    </p><p>
       Have fun using these products, and we hope to meet all of you
       out on the rocket flight line somewhere.
       </p><div class="literallayout"><p><br>
@@ -28,11 +26,10 @@ NAR
 Keith Packard, KD7SQG<br>
 NAR #88757, TRA #12200<br>
       </p></div><p>
-    </p>
-  </div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="#idp774040">1. Quick Start Guide</a></span></dt><dt><span class="chapter"><a href="#idp3062232">2. Handling Precautions</a></span></dt><dt><span class="chapter"><a href="#idp2529968">3. The MicroPeak USB adapter</a></span></dt><dd><dl><dt><span class="section"><a href="#idp2069328">1. Installing the MicroPeak software</a></span></dt><dt><span class="section"><a href="#idp1986896">2. Downloading Micro Peak data</a></span></dt><dt><span class="section"><a href="#idp3318344">3. Analyzing MicroPeak Data</a></span></dt><dt><span class="section"><a href="#idp785616">4. Configuring the MicroPeak application</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp3018560">4. Technical Information</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3018880">1. Barometric Sensor</a></span></dt><dt><span class="section"><a href="#idp3020504">2. Micro-controller</a></span></dt><dt><span class="section"><a href="#idp3022056">3. Lithium Battery</a></span></dt><dt><span class="section"><a href="#idp3023856">4. Atmospheric Model</a></span></dt><dt><span class="section"><a href="#idp3025920">5. Mechanical Considerations</a></span></dt><dt><span class="section"><a href="#idp3027624">6. On-board data storage</a></span></dt><dt><span class="section"><a href="#idp52184">7. MicroPeak Programming Interface</a></span></dt></dl></dd></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>4.1. <a href="#idp3028936">MicroPeak EEPROM Data Storage</a></dt></dl></div><div class="chapter" title="Chapter 1. Quick Start Guide"><div class="titlepage"><div><div><h2 class="title"><a name="idp774040"></a>Chapter 1. Quick Start Guide</h2></div></div></div><p>
+    </p></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="chapter"><a href="#idp48960176">1. Quick Start Guide</a></span></dt><dt><span class="chapter"><a href="#idp48969664">2. Handling Precautions</a></span></dt><dt><span class="chapter"><a href="#idp53493376">3. The MicroPeak USB adapter</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53494704">1. Installing the MicroPeak software</a></span></dt><dt><span class="section"><a href="#idp53497792">2. Downloading Micro Peak data</a></span></dt><dt><span class="section"><a href="#idp53503952">3. Analyzing MicroPeak Data</a></span></dt><dt><span class="section"><a href="#idp47886320">4. Configuring the MicroPeak application</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp47894112">4. Technical Information</a></span></dt><dd><dl><dt><span class="section"><a href="#idp47894784">1. Barometric Sensor</a></span></dt><dt><span class="section"><a href="#idp47897392">2. Micro-controller</a></span></dt><dt><span class="section"><a href="#idp47899744">3. Lithium Battery</a></span></dt><dt><span class="section"><a href="#idp47902528">4. Atmospheric Model</a></span></dt><dt><span class="section"><a href="#idp47904928">5. Mechanical Considerations</a></span></dt><dt><span class="section"><a href="#idp47907680">6. On-board data storage</a></span></dt><dt><span class="section"><a href="#idp54636384">7. MicroPeak Programming Interface</a></span></dt></dl></dd></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>4.1. <a href="#idp47909744">MicroPeak EEPROM Data Storage</a></dt></dl></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp48960176"></a>Chapter 1. Quick Start Guide</h1></div></div></div><p>
       MicroPeak is designed to be easy to use. Requiring no external
       components, flying takes just a few steps
-    </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Install the battery. Fit a CR1025 battery into the plastic
          carrier. The positive (+) terminal should be towards the more
          open side of the carrier. Slip the carrier into the battery
@@ -58,17 +55,17 @@ NAR
        </p></li><li class="listitem"><p>
          Finish preparing the rocket for flight. After the
          previous flight data have been reported, MicroPeak waits for
-         30 seconds before starting to check for launch. This gives
+         one minute before starting to check for launch. This gives
          you time to finish assembling the rocket. As those
          activities might cause pressure changes inside the airframe,
          MicroPeak might accidentally detect boost. If you need to do
-         anything to the airframe after the 30 second window passes,
+         anything to the airframe after the one minute window passes,
          make sure to be careful not to disturb the altimeter. The
-         LED will remain dark during the 30 second delay, but after
+         LED will remain dark during the one minute delay, but after
          that, it will start blinking once every 3 seconds.
        </p></li><li class="listitem"><p>
-         Fly the rocket. Once the rocket passes about 10m in height
-         (32 feet), the micro-controller will record the ground
+         Fly the rocket. Once the rocket passes about 30m in height
+         (100 feet), the micro-controller will record the ground
          pressure and track the pressure seen during the flight. In
          this mode, the LED flickers rapidly. When the rocket lands,
          and the pressure stabilizes, the micro-controller will record
@@ -80,7 +77,7 @@ NAR
          Recover the data. Turn MicroPeak off and then back on. MicroPeak
          will blink out the maximum height for the last flight. Turn
          MicroPeak back off to conserve battery power.
-       </p></li></ul></div></div><div class="chapter" title="Chapter 2. Handling Precautions"><div class="titlepage"><div><div><h2 class="title"><a name="idp3062232"></a>Chapter 2. Handling Precautions</h2></div></div></div><p>
+       </p></li></ul></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp48969664"></a>Chapter 2. Handling Precautions</h1></div></div></div><p>
       All Altus Metrum products are sophisticated electronic devices.  
       When handled gently and properly installed in an air-frame, they
       will deliver impressive results.  However, as with all electronic 
@@ -110,12 +107,12 @@ NAR
       As with all other rocketry electronics, Altus Metrum altimeters must 
       be protected from exposure to corrosive motor exhaust and ejection 
       charge gasses.
-    </p></div><div class="chapter" title="Chapter 3. The MicroPeak USB adapter"><div class="titlepage"><div><div><h2 class="title"><a name="idp2529968"></a>Chapter 3. The MicroPeak USB adapter</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp2069328">1. Installing the MicroPeak software</a></span></dt><dt><span class="section"><a href="#idp1986896">2. Downloading Micro Peak data</a></span></dt><dt><span class="section"><a href="#idp3318344">3. Analyzing MicroPeak Data</a></span></dt><dt><span class="section"><a href="#idp785616">4. Configuring the MicroPeak application</a></span></dt></dl></div><p>
+    </p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp53493376"></a>Chapter 3. The MicroPeak USB adapter</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp53494704">1. Installing the MicroPeak software</a></span></dt><dt><span class="section"><a href="#idp53497792">2. Downloading Micro Peak data</a></span></dt><dt><span class="section"><a href="#idp53503952">3. Analyzing MicroPeak Data</a></span></dt><dt><span class="section"><a href="#idp47886320">4. Configuring the MicroPeak application</a></span></dt></dl></div><p>
       MicroPeak stores barometric pressure information for the first
       48 seconds of the flight in on-board non-volatile memory. The
       contents of this memory can be downloaded to a computer using
       the MicroPeak USB adapter.
-    </p><div class="section" title="1. Installing the MicroPeak software"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp2069328"></a>1. Installing the MicroPeak software</h2></div></div></div><p>
+    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53494704"></a>1. Installing the MicroPeak software</h2></div></div></div><p>
        The MicroPeak application runs on Linux, Mac OS X and
        Windows. You can download the latest version from
        <a class="ulink" href="http://altusmetrum.org/AltOS" target="_top">http://altusmetrum.org/AltOS</a>.
@@ -124,19 +121,24 @@ NAR
        be installed. A compatible version of this driver is included
        with the MicroPeak application, but you may want to download a
        newer version from <a class="ulink" href="http://www.ftdichip.com/FTDrivers.htm" target="_top">http://www.ftdichip.com/FTDrivers.htm</a>.
-      </p></div><div class="section" title="2. Downloading Micro Peak data"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp1986896"></a>2. Downloading Micro Peak data</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53497792"></a>2. Downloading Micro Peak data</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            Connect the MicroPeak USB adapter to a USB cable and plug it
            in to your computer.
          </p></li><li class="listitem"><p>
            Start the MicroPeak application, locate the File menu and
            select the Download entry.
          </p></li><li class="listitem"><p>
-           The MicroPeak USB adapter has a small phototransistor on the 
-           end of the board furthest from the USB connector. Locate
-           this and place the LED on the MicroPeak right over
-           it. Turn on the MicroPeak board and adjust the position
-           until the blue LED on the MicroPeak USB adapter blinks in
-           time with the orange LED on the MicroPeak board.
+           The MicroPeak USB adapter has a small phototransistor on
+           the end of the board furthest from the USB
+           connector. Locate this and place the LED on the MicroPeak
+           directly in contact with it. The MicroPeak LED and the
+           MicroPeak USB adapter photo need to be touching&#8212;even a
+           millimeters of space between them will reduce the light
+           intensity from the LED enough that the phototransistor
+           will not sense it. Turn on the MicroPeak board and adjust
+           the position until the blue LED on the MicroPeak USB
+           adapter blinks in time with the orange LED on the
+           MicroPeak board.
          </p></li><li class="listitem"><p>
            After the maximum flight height is reported, MicroPeak will
            pause for a few seconds, blink the LED four times rapidly
@@ -145,7 +147,7 @@ NAR
            it will present the data in a graph and offer to save the
            data to a file. If not, you can power cycle the MicroPeak
            board and try again.
-         </p></li></ul></div></div><div class="section" title="3. Analyzing MicroPeak Data"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3318344"></a>3. Analyzing MicroPeak Data</h2></div></div></div><p>
+         </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53503952"></a>3. Analyzing MicroPeak Data</h2></div></div></div><p>
        The MicroPeak application can present flight data in the form
        of a graph, a collection of computed statistics or in tabular
        form.
@@ -188,11 +190,11 @@ NAR
        Data tab) to a file, change the application Preferences, Close
        the current window or close all windows and Exit the
        application.
-      </p></div><div class="section" title="4. Configuring the MicroPeak application"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp785616"></a>4. Configuring the MicroPeak application</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47886320"></a>4. Configuring the MicroPeak application</h2></div></div></div><p>
        The MicroPeak application has a few user settings which are
        configured through the Preferences dialog, which can be
        accessed from the File menu.
-      </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+      </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            The Log Directory is where flight data will be saved to
            and loaded from by default. Of course, you can always
            navigate to other directories in the file chooser windows,
@@ -222,7 +224,7 @@ NAR
        Note that MicroPeak shares a subset of the AltosUI
        preferences, so if you use both of these applications, change
        in one application will affect the other.
-      </p></div></div><div class="chapter" title="Chapter 4. Technical Information"><div class="titlepage"><div><div><h2 class="title"><a name="idp3018560"></a>Chapter 4. Technical Information</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp3018880">1. Barometric Sensor</a></span></dt><dt><span class="section"><a href="#idp3020504">2. Micro-controller</a></span></dt><dt><span class="section"><a href="#idp3022056">3. Lithium Battery</a></span></dt><dt><span class="section"><a href="#idp3023856">4. Atmospheric Model</a></span></dt><dt><span class="section"><a href="#idp3025920">5. Mechanical Considerations</a></span></dt><dt><span class="section"><a href="#idp3027624">6. On-board data storage</a></span></dt><dt><span class="section"><a href="#idp52184">7. MicroPeak Programming Interface</a></span></dt></dl></div><div class="section" title="1. Barometric Sensor"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3018880"></a>1. Barometric Sensor</h2></div></div></div><p>
+      </p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idp47894112"></a>Chapter 4. Technical Information</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp47894784">1. Barometric Sensor</a></span></dt><dt><span class="section"><a href="#idp47897392">2. Micro-controller</a></span></dt><dt><span class="section"><a href="#idp47899744">3. Lithium Battery</a></span></dt><dt><span class="section"><a href="#idp47902528">4. Atmospheric Model</a></span></dt><dt><span class="section"><a href="#idp47904928">5. Mechanical Considerations</a></span></dt><dt><span class="section"><a href="#idp47907680">6. On-board data storage</a></span></dt><dt><span class="section"><a href="#idp54636384">7. MicroPeak Programming Interface</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47894784"></a>1. Barometric Sensor</h2></div></div></div><p>
        MicroPeak uses the Measurement Specialties MS5607 sensor. This
        has a range of 120kPa to 1kPa with an absolute accuracy of
        150Pa and a resolution of 2.4Pa.
@@ -236,7 +238,7 @@ NAR
        taken while the altimeter is at rest. Flight pressure is
        computed from a Kalman filter designed to smooth out any minor
        noise in the sensor values. 
-      </p></div><div class="section" title="2. Micro-controller"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3020504"></a>2. Micro-controller</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47897392"></a>2. Micro-controller</h2></div></div></div><p>
        MicroPeak uses an Atmel ATtiny85 micro-controller. This tiny
        CPU contains 8kB of flash for the application, 512B of RAM for
        temporary data storage and 512B of EEPROM for non-volatile
@@ -247,8 +249,8 @@ NAR
        this mode, the chip consumes only .1&#956;A of power. MicroPeak
        uses this mode once the flight has ended to preserve battery
        power.
-      </p></div><div class="section" title="3. Lithium Battery"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3022056"></a>3. Lithium Battery</h2></div></div></div><p>
-       The CR1025 battery used by MicroPeak holes 30mAh of power,
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47899744"></a>3. Lithium Battery</h2></div></div></div><p>
+       The CR1025 battery used by MicroPeak holds 30mAh of power,
        which is sufficient to run for over 40 hours. Because
        MicroPeak powers down on landing, run time includes only time
        sitting on the launch pad or during flight.
@@ -264,7 +266,7 @@ NAR
        battery with MicroPeak. If so, many stores carry CR1025
        batteries as they are commonly used in small electronic
        devices such as flash lights.
-      </p></div><div class="section" title="4. Atmospheric Model"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3023856"></a>4. Atmospheric Model</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47902528"></a>4. Atmospheric Model</h2></div></div></div><p>
        MicroPeak contains a fixed atmospheric model which is used to
        convert barometric pressure into altitude. The model was
        converted into a 469-element piece wise linear approximation
@@ -280,7 +282,7 @@ NAR
        altitude is subtracted from the computed apogee altitude, so
        the resulting height is more accurate than either the ground
        or apogee altitudes.
-      </p></div><div class="section" title="5. Mechanical Considerations"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3025920"></a>5. Mechanical Considerations</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47904928"></a>5. Mechanical Considerations</h2></div></div></div><p>
        MicroPeak is designed to be rugged enough for typical rocketry
        applications. It contains two moving parts, the battery holder
        and the power switch, which were selected for their
@@ -296,7 +298,7 @@ NAR
        any direction. Because it is a sliding switch, orienting the
        switch perpendicular to the direction of rocket travel will
        serve to further protect the switch from launch forces.
-      </p></div><div class="section" title="6. On-board data storage"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3027624"></a>6. On-board data storage</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47907680"></a>6. On-board data storage</h2></div></div></div><p>
        The ATtiny85 has 512 bytes of non-volatile storage, separate
        from the code storage memory. The MicroPeak firmware uses this
        to store information about the last completed
@@ -309,7 +311,7 @@ NAR
        at regular intervals during the flight. This information can
        be extracted from MicroPeak through any AVR programming
        tool.
-      </p><div class="table"><a name="idp3028936"></a><p class="title"><b>Table 4.1. MicroPeak EEPROM Data Storage</b></p><div class="table-contents"><table summary="MicroPeak EEPROM Data Storage" border="1"><colgroup><col align="center" class="Address"><col align="center" class="Size (bytes)"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Address</th><th align="center">Size (bytes)</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0x000</td><td align="center">4</td><td align="left">Average ground pressure (Pa)</td></tr><tr><td align="center">0x004</td><td align="center">4</td><td align="left">Minimum flight pressure (Pa)</td></tr><tr><td align="center">0x008</td><td align="center">2</td><td align="left">Number of in-flight samples</td></tr><tr><td align="center">0x00a &#8230; 0x1fe</td><td align="center">2</td><td align="left">Instantaneous flight pressure (Pa) low 16 bits</td></tr></tbody></table></div></div><br class="table-break"><p>
+      </p><div class="table"><a name="idp47909744"></a><p class="title"><b>Table 4.1. MicroPeak EEPROM Data Storage</b></p><div class="table-contents"><table summary="MicroPeak EEPROM Data Storage" border="1"><colgroup><col align="center" class="Address"><col align="center" class="Size (bytes)"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Address</th><th align="center">Size (bytes)</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0x000</td><td align="center">4</td><td align="left">Average ground pressure (Pa)</td></tr><tr><td align="center">0x004</td><td align="center">4</td><td align="left">Minimum flight pressure (Pa)</td></tr><tr><td align="center">0x008</td><td align="center">2</td><td align="left">Number of in-flight samples</td></tr><tr><td align="center">0x00a &#8230; 0x1fe</td><td align="center">2</td><td align="left">Instantaneous flight pressure (Pa) low 16 bits</td></tr></tbody></table></div></div><br class="table-break"><p>
        All EEPROM data are stored least-significant byte first. The
        instantaneous flight pressure data are stored without the
        upper 16 bits of data. The upper bits can be reconstructed
@@ -329,7 +331,7 @@ NAR
        25°C. So, you can count on the pressure data being accurate,
        but speed or acceleration data computed from this will be
        limited by the accuracy of this clock.
-      </p></div><div class="section" title="7. MicroPeak Programming Interface"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp52184"></a>7. MicroPeak Programming Interface</h2></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp54636384"></a>7. MicroPeak Programming Interface</h2></div></div></div><p>
        MicroPeak exposes a standard 6-pin AVR programming interface,
        but not using the usual 2x3 array of pins on 0.1"
        centers. Instead, there is a single row of tiny 0.60mm ×
index 3dd14760897835ba2281f7962a35ce67f109408f..53797256430a2ddfceff066dfa4026494300353f 100644 (file)
Binary files a/AltOS/doc/micropeak.pdf and b/AltOS/doc/micropeak.pdf differ
index 701275561a458a4cd4764ec3bc6f0a7b3cd65d93..7a1f22ba8cb35b1178c5859f9295a281a7616e64 100644 (file)
@@ -1,36 +1,36 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
 Version 0.7.1 is the first release containing our new cross-platform Java-based user interface. AltosUI can:
-  </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
       Receive and log telemetry from a connected TeleDongle
       device. All data received is saved to log files named with the
       current date and the connected rocket serial and flight
       numbers. There is no mode in which telemetry data will not be
       saved.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Download logged data from TeleMetrum devices, either through a
       direct USB connection or over the air through a TeleDongle
       device.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Configure a TeleMetrum device, setting the radio channel,
       callsign, apogee delay and main deploy height. This can be done
       through either a USB connection or over a radio link via a
       TeleDongle device.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Replay a flight in real-time. This takes a saved telemetry log
       or eeprom download and replays it through the user interface so
       you can relive your favorite rocket flights.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Reprogram Altus Metrum devices. Using an Altus Metrum device
       connected via USB, another Altus Metrum device can be
       reprogrammed using the supplied programming cable between the
       two devices.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Export Flight data to a comma-separated-values file. This takes
       either telemetry or on-board flight data and generates data
       suitable for use in external applications. All data is exported
       using standard units so that no device-specific knowledge is
       needed to handle the data.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Speak to you during the flight. Instead of spending the flight
       hunched over your laptop looking at the screen, enjoy the view
       while the computer tells you what&#8217;s going on up there. During
@@ -39,4 +39,4 @@ Version 0.7.1 is the first release containing our new cross-platform Java-based
       range information to try and help you find your rocket in the
       air. Once on the ground, the direction and distance are
       reported.
-    </li></ul></div></div></body></html>
+    </p></li></ul></div></div></body></html>
index ee4943dffab37b1ff51a1f57ca185af047c58920..8ace7a99d6af3249380a0a4e2007e27fbb31274e 100644 (file)
@@ -1,23 +1,23 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
     Version 0.8 offers a major upgrade in the AltosUI
     interface. Significant new features include:
-  </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
       Post-flight graphing tool. This lets you explore the behaviour
       of your rocket after flight with a scroll-able and zoom-able
       chart showing the altitude, speed and acceleration of the
       airframe along with events recorded by the flight computer. You
       can export graphs to PNG files, or print them directly.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Real-time moving map which overlays the in-progress flight on
       satellite imagery fetched from Google Maps. This lets you see in
       pictures where your rocket has landed, allowing you to plan
       recovery activities more accurately.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Wireless recovery system testing. Prep your rocket for flight
       and test fire the deployment charges to make sure things work as
       expected. All without threading wires through holes in your
       airframe.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Optimized flight status displays. Each flight state now has it's
       own custom 'tab' in the flight monitoring window so you can
       focus on the most important details. Pre-flight, the system
       they're all green and your rocket is ready for flight. There are
       also tabs for ascent, descent and landing along with the
       original tabular view of the data.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Monitor multiple flights simultaneously. If you have more than
       one TeleDongle, you can monitor a flight with each one on the
       same computer.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Automatic flight monitoring at startup. Plug TeleDongle into the
       machine before starting AltosUI and it will automatically
       connect to it and prepare to monitor a flight.
-    </li><li class="listitem">
+    </p></li><li class="listitem"><p>
       Exports Google Earth flight tracks. Using the Keyhole Markup
       Language (.kml) file format, this provides a 3D view of your
       rocket flight through the Google Earth program.
-    </li></ul></div></div></body></html>
+    </p></li></ul></div></div></body></html>
index c4bf75b4ecfa1118b93d0d3f82b7ac3091a2c6b8..9e16524bc6b0bb784b485f1cd220153dbfefceca 100644 (file)
@@ -1,9 +1,9 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
     Version 0.9.2 is an AltosUI bug-fix release, with no firmware changes.
-  </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
       Fix plotting problems due to missing file in the Mac OS install image.
-    </li><li class="listitem">
+</p></li><li class="listitem"><p>
       Always read whole eeprom blocks, mark empty records invalid, display parsing errors to user.
-    </li><li class="listitem">
+</p></li><li class="listitem"><p>
       Add software version to Configure AltosUI dialog
-    </li></ul></div></div></body></html>
+</p></li></ul></div></div></body></html>
index bd17cf4f1c21581f5c3567eef0c7243e012b5de4..f5ed9a758f5d872b0b425be5700c278e5ff315fa 100644 (file)
@@ -1,20 +1,20 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
     Version 0.9 adds a few new firmware features and accompanying
     AltosUI changes, along with new hardware support.
-  </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
       Support for TeleMetrum v1.1 hardware. Sources for the flash
       memory part used in v1.0 dried up, so v1.1 uses a different part
       which required a new driver and support for explicit flight log
       erasing.
-    </li><li class="listitem">
+</p></li><li class="listitem"><p>
       Multiple flight log support. This stores more than one flight
       log in the on-board flash memory. It also requires the user to
       explicitly erase flights so that you won't lose flight logs just
       because you fly the same board twice in one day.
-    </li><li class="listitem">
+</p></li><li class="listitem"><p>
       Telemetry support for devices with serial number &gt;=
       256. Previous versions used a telemetry packet format that
       provided only 8 bits for the device serial number. This change
       requires that both ends of the telemetry link be running the 0.9
       firmware or they will not communicate.
-    </li></ul></div></div></body></html>
+</p></li></ul></div></div></body></html>
index 361ad041939ba464e349793b8cb89f63bc12d999..a58fed657433458154236df78c0b72b3231e83f7 100644 (file)
@@ -1,27 +1,27 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
     Version 1.0.1 is a major release, adding support for the TeleMini
     device and lots of new AltosUI features
   </p><p>
     AltOS Firmware Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Add TeleMini v1.0 support. Firmware images for TeleMini are
        included in AltOS releases.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Change telemetry to be encoded in multiple 32-byte packets. This
        enables support for TeleMini and other devices without requiring
        further updates to the TeleDongle firmware.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Support operation of TeleMetrum with the antenna pointing
        aft. Previous firmware versions required the antenna to be
        pointing upwards, now there is a configuration option allowing
        the antenna to point aft, to aid installation in some airframes.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Ability to disable telemetry. For airframes where an antenna
        just isn't possible, or where radio transmissions might cause
        trouble with other electronics, there's a configuration option
        to disable all telemetry. Note that the board will still
        enable the radio link in idle mode.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Arbitrary frequency selection. The radios in Altus Metrum
        devices can be programmed to a wide range of frequencies, so
        instead of limiting devices to 10 pre-selected 'channels', the
@@ -29,7 +29,7 @@
        70cm band. Note that the RF matching circuit on the boards is
        tuned for around 435MHz, so frequencies far from that may
        reduce the available range.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Kalman-filter based flight-tracking. The model based sensor
        fusion approach of a Kalman filter means that AltOS now
        computes apogee much more accurately than before, generally
        allows the baro-only TeleMini device to correctly identify
        Mach transitions, avoiding the error-prone selection of a Mach
        delay.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p><p>
     AltosUI Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Wait for altimeter when using packet mode. Instead of quicly
        timing out when trying to initialize a packet mode
        configuration connection, AltosUI now waits indefinitely for
        the remote device to appear, providing a cancel button should
        the user get bored. This is necessary as the TeleMini can only
        be placed in "Idle" mode if AltosUI is polling it.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add main/apogee voltage graphs to the data plot. This provides
        a visual indication if the igniters fail before being fired.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Scan for altimeter devices by watching the defined telemetry
        frequencies. This avoids the problem of remembering what
        frequency a device was configured to use, which is especially
        important with TeleMini which does not include a USB connection.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Monitor altimeter state in "Idle" mode. This provides much of
        the information presented in the "Pad" dialog from the Monitor
        Flight command, monitoring the igniters, battery and GPS
        status withing requiring the flight computer to be armed and
        ready for flight.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Pre-load map images from home. For those launch sites which
        don't provide free Wi-Fi, this allows you to download the
        necessary satellite images given the location of the launch
        you've got a launch site not on that list, please send the
        name of it, latitude and longitude along with a link to the
        web site of the controlling club to the altusmetrum mailing list.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Flight statistics are now displayed in the Graph data
        window. These include max height/speed/accel, average descent
        rates and a few other bits of information. The Graph Data
        window can now be reached from the 'Landed' tab in the Monitor
        Flight window so you can immediately see the results of a
        flight.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p></div></body></html>
index 4e33c11260b829c9267a63c3407446fc91497e34..2281d94a20cf0256a3ad3e64f46192ee16cf16ae 100644 (file)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
     Version 1.1.1 is a bug-fix release. It fixes a couple of bugs in
     AltosUI and one firmware bug that affects TeleMetrum version 1.0
     boards. Thanks to Bob Brown for help diagnosing the Google Earth
@@ -6,7 +6,7 @@
     Distance value in the Descent tab.
   </p><p>
     AltOS Firmware Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        TeleMetrum v1.0 boards use the AT45DB081D flash memory part to
        store flight data, which is different from later TeleMetrum
        boards. The AltOS v1.1 driver for this chip couldn't erase
        configuration values. This bug doesn't affect newer TeleMetrum
        boards, and it doesn't affect the safety of rockets flying
        version 1.1 firmware.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p><p>
     AltosUI Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Creating a Google Earth file (KML) from on-board flight data
        (EEPROM) would generate an empty file. The code responsible
        for reading the EEPROM file wasn't ever setting the GPS valid
        bits, and so the KML export code thought there was no GPS data
        in the file.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        The &#8220;Landed&#8221; tab was displaying all values in metric units,
        even when AltosUI was configured to display imperial
        units. Somehow I just missed this tab when doing the units stuff.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        The &#8220;Descent&#8221; tab displays the range to the rocket, which is a
        combination of the over-the-ground distance to the rockets
        current latitude/longitude and the height of the rocket. As
        eventually land. A new &#8220;Ground Distance&#8221; field has been added
        which displays the distance to a spot right underneath the
        rocket.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Sensor data wasn't being displayed for TeleMini flight
        computers in Monitor Idle mode, including things like battery
        voltage. The code that picked which kinds of data to fetch
        from the flight computer was missing a check for TeleMini when
        deciding whether to fetch the analog sensor data.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p></div></body></html>
index a86a5aeb959cc5d53eb50d901759b155b2145591..c1be78878be0b7ac1129c95545075eb529fbee24 100644 (file)
@@ -1,73 +1,73 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
     Version 1.1 is a minor release. It provides a few new features in AltosUI
     and the AltOS firmware and fixes bugs.
   </p><p>
     AltOS Firmware Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Add apogee-lockout value. Overrides the apogee detection logic to
        prevent incorrect apogee charge firing.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Fix a bug where the data reported in telemetry packets was
        from 320ms ago.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Force the radio frequency to 434.550MHz when the debug clock
        pin is connected to ground at boot time. This provides a way
        to talk to a TeleMini which is configured to some unknown frequency.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Provide RSSI values for Monitor Idle mode. This makes it easy to check radio
        range without needing to go to flight mode.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Fix a bug which caused the old received telemetry packets to
        be retransmitted over the USB link when the radio was turned
        off and back on.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p><p>
     AltosUI Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Fix a bug that caused GPS ready to happen too quickly. The
        software was using every telemetry packet to signal new GPS
        data, which caused GPS ready to be signalled after 10 packets
        instead of 10 GPS updates.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Fix Google Earth data export to work with recent versions. The
        google earth file loading code got a lot pickier, requiring
        some minor white space changes in the export code.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Make the look-n-feel configurable, providing a choice from
        the available options.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add an 'Age' element to mark how long since a telemetry packet
        has been received. Useful to quickly gauge whether
        communications with the rocket are still active.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add 'Configure Ground Station' dialog to set the radio
        frequency used by a particular TeleDongle without having to go
        through the flight monitor UI.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add configuration for the new apogee-lockout value. A menu provides a list of
        reasonable values, or the value can be set by hand.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Changed how flight data are downloaded. Now there's an initial
        dialog asking which flights to download, and after that
        finishes, a second dialog comes up asking which flights to delete.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Re-compute time spent in each state for the flight graph; this
        figures out the actual boost and landing times instead of
        using the conservative values provide by the flight
        electronics. This improves the accuracy of the boost
        acceleration and main descent rate computations.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Make AltosUI run on Mac OS Lion. The default Java heap space
        was dramatically reduced for this release causing much of the
        UI to fail randomly. This most often affected the satellite
        mapping download and displays.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Change how data are displayed in the 'table' tab of the flight
        monitoring window. This eliminates entries duplicated from the
        header and adds both current altitude and pad altitude, which
        are useful in 'Monitor Idle' mode.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add Imperial units mode to present data in feet instead of
        meters.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p></div></body></html>
index 7b869cebad0145e89de684137445abdf89a96761..b2943dc7bf8dfae04fef62dfed85d16c3f9c8e61 100644 (file)
@@ -4,58 +4,58 @@
     AltosUI and fixes some bugs in the AltOS firmware.
   </p><p>
     AltOS Firmware Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Add support for TeleBT
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        In TeleMini recovery mode (when booted with the outer two
        debug pins connected together), the radio parameters are also
        set back to defaults (434.550MHz, N0CALL, factory radio cal).
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add support for reflashing the SkyTraq GPS chips. This
        requires special host-side code which currently only exists
        for Linux.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Correct Kalman filter model error covariance matrix. The
        values used previously assumed continuous measurements instead
        of discrete measurements.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Fix some bugs in the USB driver for TeleMetrum and TeleDongle
        that affected Windows users.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Adjusted the automatic gain control parameters that affect
        receive performance for TeleDongle. Field tests indicate that this
        may improve receive performance somewhat.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p><p>
     AltosUI Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Handle missing GPS lock in 'Descent' tab. Previously, if the
        GPS position of the pad was unknown, an exception would be
        raised, breaking the Descent tab contents.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Improve the graph, adding tool-tips to show values near the
        cursor and making the displayed set of values configurable,
        adding all of the flight data as options while leaving the
        default settings alone so that the graph starts by showing
        height, speed and acceleration.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Make the initial position of the AltosUI top level window
        configurable. Along with this change, the other windows will
        pop up at 'sensible' places now, instead of on top of one
        another.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add callsign to Monitor idle window and connecting
        dialogs. This makes it clear which callsign is being used so
        that the operator will be aware that it must match the flight
        computer value or no communication will work.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        When downloading flight data, display the block number so that
        the user has some sense of progress. Unfortunately, we don't
        know how many blocks will need to be downloaded, but at least
        it isn't just sitting there doing nothing for a long time.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Add GPS data and a map to the graph window. This lets you see
        a complete summary of the flight without needing to 'replay'
        the whole thing.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p></div></body></html>
index 3f7453ecc332c8e81caba7574f95accbd7a3af3f..e9a4eb7d23cff4b688a68ffa231deda45792f71d 100644 (file)
@@ -3,25 +3,25 @@
     the MicroPeak USB adapter.
   </p><p>
     AltOS Firmware Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Add MicroPeak support. This includes support for the ATtiny85
        processor and adaptations to the core code to allow for
        devices too small to run the multi-tasking scheduler.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p><p>
     MicroPeak UI changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Added this new application
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p><p>
     Distribution Changes
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Distribute Mac OS X packages in disk image ('.dmg') format to
        greatly simplify installation.
-      </li><li class="listitem">
+      </p></li><li class="listitem"><p>
        Provide version numbers for the shared Java libraries to
        ensure that upgrades work properly, and to allow for multiple
        Altus Metrum software packages to be installed in the same
        directory at the same time.
-      </li></ul></div><p>
+      </p></li></ul></div><p>
   </p></div></body></html>
diff --git a/AltOS/doc/release-notes-1.3.html b/AltOS/doc/release-notes-1.3.html
new file mode 100644 (file)
index 0000000..7000d2b
--- /dev/null
@@ -0,0 +1,42 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><hr></div><p>
+    Version 1.3 is a major release. It adds support for TeleMega,
+    TeleMetrum v2.0, TeleMini v2.0 and EasyMini.
+  </p><p>
+    AltOS Firmware Changes
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+         Add STM32L processor support. This includes enhancements to
+         the scheduler to support products with many threads.
+       </p></li><li class="listitem"><p>
+         Add NXP LPC11U14 processor support.
+       </p></li><li class="listitem"><p>
+         Support additional pyro channels. These are configurable
+         through the UI to handle air starts, staging, additional
+         recovery events and external devices such as cameras.
+       </p></li><li class="listitem"><p>
+         Add 3-axis gyro support for orientation tracking. This
+         integrates the gyros to compute the angle from vertical during
+         flight, allowing the additional pyro events to be controlled
+         by this value.
+       </p></li><li class="listitem"><p>
+         Many more device drivers, including u-Blox Max 7Q GPS,
+         Freescale MMA6555 digital single-axis accelerometer,
+         Invensense MPU6000 3-axis accelerometer + 3 axis gyro,
+         Honeywell HMC5883 3-axis magnetic sensor and the TI CC1120 and
+         CC115L digital FM transceivers
+       </p></li></ul></div><p>
+  </p><p>
+    AltosUI changes
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+         Support TeleMega, TeleMetrum v2.0, TeleMini v2.0 and EasyMini telemetry and log formats.
+       </p></li><li class="listitem"><p>
+         Use preferred units for main deployment height configuration,
+         instead of always doing configuration in meters.
+       </p></li></ul></div><p>
+  </p><p>
+    MicroPeak UI changes
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+         Add 'Download' button to menu bar.
+       </p></li><li class="listitem"><p>
+         Save the last log directory and offer that as the default for new downloads
+       </p></li></ul></div><p>
+  </p></div></body></html>
diff --git a/AltOS/doc/scan-channels.png b/AltOS/doc/scan-channels.png
new file mode 100644 (file)
index 0000000..bf6b6e5
Binary files /dev/null and b/AltOS/doc/scan-channels.png differ
diff --git a/AltOS/doc/site-map.png b/AltOS/doc/site-map.png
new file mode 100644 (file)
index 0000000..a6d3f78
Binary files /dev/null and b/AltOS/doc/site-map.png differ
diff --git a/AltOS/doc/table.png b/AltOS/doc/table.png
new file mode 100644 (file)
index 0000000..86cb988
Binary files /dev/null and b/AltOS/doc/table.png differ
diff --git a/AltOS/doc/telemega-v1.0-top.jpg b/AltOS/doc/telemega-v1.0-top.jpg
new file mode 100644 (file)
index 0000000..709d59f
Binary files /dev/null and b/AltOS/doc/telemega-v1.0-top.jpg differ
diff --git a/AltOS/doc/telemetrum-v1.1-thside.jpg b/AltOS/doc/telemetrum-v1.1-thside.jpg
new file mode 100644 (file)
index 0000000..2ffbdbd
Binary files /dev/null and b/AltOS/doc/telemetrum-v1.1-thside.jpg differ
index dc7c6069c4ff47a5cd5bca8e749ae3090c9ab57a..db76d5df9b0a982ff46ccb89adec66ac062cf712 100644 (file)
@@ -1,10 +1,10 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>AltOS Telemetry</title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article" title="AltOS Telemetry"><div class="titlepage"><div><div><h2 class="title"><a name="idp5944"></a>AltOS Telemetry</h2></div><div><h3 class="subtitle"><i>Packet Definitions</i></h3></div><div><div class="author"><h3 class="author"><span class="firstname">Keith</span> <span class="surname">Packard</span></h3></div></div><div><p class="copyright">Copyright © 2011 Keith Packard</p></div><div><div class="legalnotice" title="Legal Notice"><a name="idp168352"></a><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>AltOS Telemetry</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><div><div><h2 class="title"><a name="idm6244192"></a>AltOS Telemetry</h2></div><div><h3 class="subtitle"><i>Packet Definitions</i></h3></div><div><div class="author"><h3 class="author"><span class="firstname">Keith</span> <span class="surname">Packard</span></h3></div></div><div><p class="copyright">Copyright © 2011 Keith Packard</p></div><div><div class="legalnotice"><a name="idp48059840"></a><p>
        This document is released under the terms of the
        <a class="ulink" href="http://creativecommons.org/licenses/by-sa/3.0/" target="_top">
          Creative Commons ShareAlike 3.0
        </a>
        license.
-      </p></div></div><div><div class="revhistory"><table border="1" width="100%" summary="Revision history"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 0.1</td><td align="left">01 July 2011</td></tr><tr><td align="left" colspan="2">Initial content</td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#idp170376">1. Packet Format Design</a></span></dt><dt><span class="section"><a href="#idp1362904">2. Packet Formats</a></span></dt><dd><dl><dt><span class="section"><a href="#idp2549840">2.1. Packet Header</a></span></dt><dt><span class="section"><a href="#idp2084496">2.2. Sensor Data</a></span></dt><dt><span class="section"><a href="#idp251296">2.3. Configuration Data</a></span></dt><dt><span class="section"><a href="#idp113992">2.4. GPS Location</a></span></dt><dt><span class="section"><a href="#idp3522960">2.5. GPS Satellite Data</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3542464">3. Data Transmission</a></span></dt><dd><dl><dt><span class="section"><a href="#idp3543312">3.1. Modulation Scheme</a></span></dt><dt><span class="section"><a href="#idp3551696">3.2. Error Correction</a></span></dt></dl></dd><dt><span class="section"><a href="#idp3558512">4. TeleDongle packet format</a></span></dt><dt><span class="section"><a href="#idp3569800">5. History and Motivation</a></span></dt></dl></div><div class="section" title="1. Packet Format Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp170376"></a>1. Packet Format Design</h2></div></div></div><p>
+      </p></div></div><div><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 0.1</td><td align="left">01 July 2011</td></tr><tr><td align="left" colspan="2">Initial content</td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#idp47882624">1. Packet Format Design</a></span></dt><dt><span class="section"><a href="#idp47885616">2. Packet Formats</a></span></dt><dd><dl><dt><span class="section"><a href="#idp47886816">2.1. Packet Header</a></span></dt><dt><span class="section"><a href="#idp49832128">2.2. Sensor Data</a></span></dt><dt><span class="section"><a href="#idp53787424">2.3. Configuration Data</a></span></dt><dt><span class="section"><a href="#idp53823040">2.4. GPS Location</a></span></dt><dt><span class="section"><a href="#idp53908608">2.5. GPS Satellite Data</a></span></dt></dl></dd><dt><span class="section"><a href="#idp53949328">3. Data Transmission</a></span></dt><dd><dl><dt><span class="section"><a href="#idp53950736">3.1. Modulation Scheme</a></span></dt><dt><span class="section"><a href="#idp53968144">3.2. Error Correction</a></span></dt></dl></dd><dt><span class="section"><a href="#idp53982352">4. TeleDongle packet format</a></span></dt><dt><span class="section"><a href="#idp54005152">5. History and Motivation</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47882624"></a>1. Packet Format Design</h2></div></div></div><p>
       AltOS telemetry data is split into multiple different packets,
       all the same size, but each includs an identifier so that the
       ground station can distinguish among different types. A single
       All packet types start with a five byte header which encodes the
       device serial number, device clock value and the packet
       type. The remaining 27 bytes encode type-specific data.
-    </p></div><div class="section" title="2. Packet Formats"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp1362904"></a>2. Packet Formats</h2></div></div></div>
-    This section first defines the packet header common to all packets
-    and then the per-packet data layout.
-    <div class="section" title="2.1. Packet Header"><div class="titlepage"><div><div><h3 class="title"><a name="idp2549840"></a>2.1. Packet Header</h3></div></div></div><div class="table"><a name="idp3308064"></a><p class="title"><b>Table 1. Telemetry Packet Header</b></p><div class="table-contents"><table summary="Telemetry Packet Header" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0</td><td align="center">uint16_t</td><td align="left">serial</td><td align="left">Device serial Number</td></tr><tr><td align="center">2</td><td align="center">uint16_t</td><td align="left">tick</td><td align="left">Device time in 100ths of a second</td></tr><tr><td align="center">4</td><td align="center">uint8_t</td><td align="left">type</td><td align="left">Packet type</td></tr><tr><td align="center">5</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp47885616"></a>2. Packet Formats</h2></div></div></div><p>
+      This section first defines the packet header common to all packets
+      and then the per-packet data layout.
+    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp47886816"></a>2.1. Packet Header</h3></div></div></div><div class="table"><a name="idp47887488"></a><p class="title"><b>Table 1. Telemetry Packet Header</b></p><div class="table-contents"><table summary="Telemetry Packet Header" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0</td><td align="center">uint16_t</td><td align="left">serial</td><td align="left">Device serial Number</td></tr><tr><td align="center">2</td><td align="center">uint16_t</td><td align="left">tick</td><td align="left">Device time in 100ths of a second</td></tr><tr><td align="center">4</td><td align="center">uint8_t</td><td align="left">type</td><td align="left">Packet type</td></tr><tr><td align="center">5</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"><p>
       Each packet starts with these five bytes which serve to identify
       which device has transmitted the packet, when it was transmitted
       and what the rest of the packet contains.
-      </p></div><div class="section" title="2.2. Sensor Data"><div class="titlepage"><div><div><h3 class="title"><a name="idp2084496"></a>2.2. Sensor Data</h3></div></div></div><div class="informaltable"><table border="0"><colgroup><col align="center" class="Offset"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="center">0x01</td><td align="left">TeleMetrum Sensor Data</td></tr><tr><td align="center">0x02</td><td align="left">TeleMini Sensor Data</td></tr><tr><td align="center">0x03</td><td align="left">TeleNano Sensor Data</td></tr></tbody></table></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp49832128"></a>2.2. Sensor Data</h3></div></div></div><div class="informaltable"><table border="0"><colgroup><col align="center" class="Offset"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="center">0x01</td><td align="left">TeleMetrum Sensor Data</td></tr><tr><td align="center">0x02</td><td align="left">TeleMini Sensor Data</td></tr><tr><td align="center">0x03</td><td align="left">TeleNano Sensor Data</td></tr></tbody></table></div><p>
        TeleMetrum, TeleMini and TeleNano share this same packet
        format for sensor data. Each uses a distinct packet type so
        that the receiver knows which data values are valid and which
        Sensor Data packets are transmitted once per second on the
        ground, 10 times per second during ascent and once per second
        during descent and landing
-      </p><div class="table"><a name="idp810984"></a><p class="title"><b>Table 2. Sensor Packet Contents</b></p><div class="table-contents"><table summary="Sensor Packet Contents" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">5</td><td align="center">uint8_t</td><td align="left">state</td><td align="left">Flight state</td></tr><tr><td align="center">6</td><td align="center">int16_t</td><td align="left">accel</td><td align="left">accelerometer (TM only)</td></tr><tr><td align="center">8</td><td align="center">int16_t</td><td align="left">pres</td><td align="left">pressure sensor</td></tr><tr><td align="center">10</td><td align="center">int16_t</td><td align="left">temp</td><td align="left">temperature sensor</td></tr><tr><td align="center">12</td><td align="center">int16_t</td><td align="left">v_batt</td><td align="left">battery voltage</td></tr><tr><td align="center">14</td><td align="center">int16_t</td><td align="left">sense_d</td><td align="left">drogue continuity sense (TM/Tm)</td></tr><tr><td align="center">16</td><td align="center">int16_t</td><td align="left">sense_m</td><td align="left">main continuity sense (TM/Tm)</td></tr><tr><td align="center">18</td><td align="center">int16_t</td><td align="left">acceleration</td><td align="left">m/s² * 16</td></tr><tr><td align="center">20</td><td align="center">int16_t</td><td align="left">speed</td><td align="left">m/s * 16</td></tr><tr><td align="center">22</td><td align="center">int16_t</td><td align="left">height</td><td align="left">m</td></tr><tr><td align="center">24</td><td align="center">int16_t</td><td align="left">ground_pres</td><td align="left">Average barometer reading on ground</td></tr><tr><td align="center">26</td><td align="center">int16_t</td><td align="left">ground_accel</td><td align="left">TM</td></tr><tr><td align="center">28</td><td align="center">int16_t</td><td align="left">accel_plus_g</td><td align="left">TM</td></tr><tr><td align="center">30</td><td align="center">int16_t</td><td align="left">accel_minus_g</td><td align="left">TM</td></tr><tr><td align="center">32</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"></div><div class="section" title="2.3. Configuration Data"><div class="titlepage"><div><div><h3 class="title"><a name="idp251296"></a>2.3. Configuration Data</h3></div></div></div><div class="informaltable"><table border="0"><colgroup><col align="center" class="Offset"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="center">0x04</td><td align="left">Configuration Data</td></tr></tbody></table></div><p>
+      </p><div class="table"><a name="idp49844192"></a><p class="title"><b>Table 2. Sensor Packet Contents</b></p><div class="table-contents"><table summary="Sensor Packet Contents" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">5</td><td align="center">uint8_t</td><td align="left">state</td><td align="left">Flight state</td></tr><tr><td align="center">6</td><td align="center">int16_t</td><td align="left">accel</td><td align="left">accelerometer (TM only)</td></tr><tr><td align="center">8</td><td align="center">int16_t</td><td align="left">pres</td><td align="left">pressure sensor</td></tr><tr><td align="center">10</td><td align="center">int16_t</td><td align="left">temp</td><td align="left">temperature sensor</td></tr><tr><td align="center">12</td><td align="center">int16_t</td><td align="left">v_batt</td><td align="left">battery voltage</td></tr><tr><td align="center">14</td><td align="center">int16_t</td><td align="left">sense_d</td><td align="left">drogue continuity sense (TM/Tm)</td></tr><tr><td align="center">16</td><td align="center">int16_t</td><td align="left">sense_m</td><td align="left">main continuity sense (TM/Tm)</td></tr><tr><td align="center">18</td><td align="center">int16_t</td><td align="left">acceleration</td><td align="left">m/s² * 16</td></tr><tr><td align="center">20</td><td align="center">int16_t</td><td align="left">speed</td><td align="left">m/s * 16</td></tr><tr><td align="center">22</td><td align="center">int16_t</td><td align="left">height</td><td align="left">m</td></tr><tr><td align="center">24</td><td align="center">int16_t</td><td align="left">ground_pres</td><td align="left">Average barometer reading on ground</td></tr><tr><td align="center">26</td><td align="center">int16_t</td><td align="left">ground_accel</td><td align="left">TM</td></tr><tr><td align="center">28</td><td align="center">int16_t</td><td align="left">accel_plus_g</td><td align="left">TM</td></tr><tr><td align="center">30</td><td align="center">int16_t</td><td align="left">accel_minus_g</td><td align="left">TM</td></tr><tr><td align="center">32</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53787424"></a>2.3. Configuration Data</h3></div></div></div><div class="informaltable"><table border="0"><colgroup><col align="center" class="Offset"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="center">0x04</td><td align="left">Configuration Data</td></tr></tbody></table></div><p>
        This provides a description of the software installed on the
        flight computer as well as any user-specified configuration data.
       </p><p>
        Configuration data packets are transmitted once per second
        during all phases of the flight
-      </p><div class="table"><a name="idp256184"></a><p class="title"><b>Table 3. Sensor Packet Contents</b></p><div class="table-contents"><table summary="Sensor Packet Contents" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">5</td><td align="center">uint8_t</td><td align="left">type</td><td align="left">Device type</td></tr><tr><td align="center">6</td><td align="center">uint16_t</td><td align="left">flight</td><td align="left">Flight number</td></tr><tr><td align="center">8</td><td align="center">uint8_t</td><td align="left">config_major</td><td align="left">Config major version</td></tr><tr><td align="center">9</td><td align="center">uint8_t</td><td align="left">config_minor</td><td align="left">Config minor version</td></tr><tr><td align="center">10</td><td align="center">uint16_t</td><td align="left">apogee_delay</td><td align="left">Apogee deploy delay in seconds</td></tr><tr><td align="center">12</td><td align="center">uint16_t</td><td align="left">main_deploy</td><td align="left">Main deploy alt in meters</td></tr><tr><td align="center">14</td><td align="center">uint16_t</td><td align="left">flight_log_max</td><td align="left">Maximum flight log size (kB)</td></tr><tr><td align="center">16</td><td align="center">char</td><td align="left">callsign[8]</td><td align="left">Radio operator identifier</td></tr><tr><td align="center">24</td><td align="center">char</td><td align="left">version[8]</td><td align="left">Software version identifier</td></tr><tr><td align="center">32</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"></div><div class="section" title="2.4. GPS Location"><div class="titlepage"><div><div><h3 class="title"><a name="idp113992"></a>2.4. GPS Location</h3></div></div></div><div class="informaltable"><table border="0"><colgroup><col align="center" class="Offset"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="center">0x05</td><td align="left">GPS Location</td></tr></tbody></table></div><p>
+      </p><div class="table"><a name="idp53796640"></a><p class="title"><b>Table 3. Sensor Packet Contents</b></p><div class="table-contents"><table summary="Sensor Packet Contents" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">5</td><td align="center">uint8_t</td><td align="left">type</td><td align="left">Device type</td></tr><tr><td align="center">6</td><td align="center">uint16_t</td><td align="left">flight</td><td align="left">Flight number</td></tr><tr><td align="center">8</td><td align="center">uint8_t</td><td align="left">config_major</td><td align="left">Config major version</td></tr><tr><td align="center">9</td><td align="center">uint8_t</td><td align="left">config_minor</td><td align="left">Config minor version</td></tr><tr><td align="center">10</td><td align="center">uint16_t</td><td align="left">apogee_delay</td><td align="left">Apogee deploy delay in seconds</td></tr><tr><td align="center">12</td><td align="center">uint16_t</td><td align="left">main_deploy</td><td align="left">Main deploy alt in meters</td></tr><tr><td align="center">14</td><td align="center">uint16_t</td><td align="left">flight_log_max</td><td align="left">Maximum flight log size (kB)</td></tr><tr><td align="center">16</td><td align="center">char</td><td align="left">callsign[8]</td><td align="left">Radio operator identifier</td></tr><tr><td align="center">24</td><td align="center">char</td><td align="left">version[8]</td><td align="left">Software version identifier</td></tr><tr><td align="center">32</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53823040"></a>2.4. GPS Location</h3></div></div></div><div class="informaltable"><table border="0"><colgroup><col align="center" class="Offset"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="center">0x05</td><td align="left">GPS Location</td></tr></tbody></table></div><p>
        This packet provides all of the information available from the
        Venus SkyTraq GPS receiver&#8212;position, time, speed and precision
        estimates. 
       </p><p>
        GPS Location packets are transmitted once per second during
        all phases of the flight
-      </p><div class="table"><a name="idp119040"></a><p class="title"><b>Table 4. GPS Location Packet Contents</b></p><div class="table-contents"><table summary="GPS Location Packet Contents" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">5</td><td align="center">uint8_t</td><td align="left">flags</td><td align="left">See GPS Flags table below</td></tr><tr><td align="center">6</td><td align="center">int16_t</td><td align="left">altitude</td><td align="left">m</td></tr><tr><td align="center">8</td><td align="center">int32_t</td><td align="left">latitude</td><td align="left">degrees * 10<sup>7</sup></td></tr><tr><td align="center">12</td><td align="center">int32_t</td><td align="left">longitude</td><td align="left">degrees * 10<sup>7</sup></td></tr><tr><td align="center">16</td><td align="center">uint8_t</td><td align="left">year</td><td class="auto-generated"> </td></tr><tr><td align="center">17</td><td align="center">uint8_t</td><td align="left">month</td><td class="auto-generated"> </td></tr><tr><td align="center">18</td><td align="center">uint8_t</td><td align="left">day</td><td class="auto-generated"> </td></tr><tr><td align="center">19</td><td align="center">uint8_t</td><td align="left">hour</td><td class="auto-generated"> </td></tr><tr><td align="center">20</td><td align="center">uint8_t</td><td align="left">minute</td><td class="auto-generated"> </td></tr><tr><td align="center">21</td><td align="center">uint8_t</td><td align="left">second</td><td class="auto-generated"> </td></tr><tr><td align="center">22</td><td align="center">uint8_t</td><td align="left">pdop</td><td align="left">* 5</td></tr><tr><td align="center">23</td><td align="center">uint8_t</td><td align="left">hdop</td><td align="left">* 5</td></tr><tr><td align="center">24</td><td align="center">uint8_t</td><td align="left">vdop</td><td align="left">* 5</td></tr><tr><td align="center">25</td><td align="center">uint8_t</td><td align="left">mode</td><td align="left">See GPS Mode table below</td></tr><tr><td align="center">26</td><td align="center">uint16_t</td><td align="left">ground_speed</td><td align="left">cm/s</td></tr><tr><td align="center">28</td><td align="center">int16_t</td><td align="left">climb_rate</td><td align="left">cm/s</td></tr><tr><td align="center">30</td><td align="center">uint8_t</td><td align="left">course</td><td align="left">/ 2</td></tr><tr><td align="center">31</td><td align="center">uint8_t</td><td align="left">unused[1]</td><td class="auto-generated"> </td></tr><tr><td align="center">32</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"><p>
+      </p><div class="table"><a name="idp53832704"></a><p class="title"><b>Table 4. GPS Location Packet Contents</b></p><div class="table-contents"><table summary="GPS Location Packet Contents" border="1"><colgroup><col align="center" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">5</td><td align="center">uint8_t</td><td align="left">flags</td><td align="left">See GPS Flags table below</td></tr><tr><td align="center">6</td><td align="center">int16_t</td><td align="left">altitude</td><td align="left">m</td></tr><tr><td align="center">8</td><td align="center">int32_t</td><td align="left">latitude</td><td align="left">degrees * 10<sup>7</sup></td></tr><tr><td align="center">12</td><td align="center">int32_t</td><td align="left">longitude</td><td align="left">degrees * 10<sup>7</sup></td></tr><tr><td align="center">16</td><td align="center">uint8_t</td><td align="left">year</td><td class="auto-generated"> </td></tr><tr><td align="center">17</td><td align="center">uint8_t</td><td align="left">month</td><td class="auto-generated"> </td></tr><tr><td align="center">18</td><td align="center">uint8_t</td><td align="left">day</td><td class="auto-generated"> </td></tr><tr><td align="center">19</td><td align="center">uint8_t</td><td align="left">hour</td><td class="auto-generated"> </td></tr><tr><td align="center">20</td><td align="center">uint8_t</td><td align="left">minute</td><td class="auto-generated"> </td></tr><tr><td align="center">21</td><td align="center">uint8_t</td><td align="left">second</td><td class="auto-generated"> </td></tr><tr><td align="center">22</td><td align="center">uint8_t</td><td align="left">pdop</td><td align="left">* 5</td></tr><tr><td align="center">23</td><td align="center">uint8_t</td><td align="left">hdop</td><td align="left">* 5</td></tr><tr><td align="center">24</td><td align="center">uint8_t</td><td align="left">vdop</td><td align="left">* 5</td></tr><tr><td align="center">25</td><td align="center">uint8_t</td><td align="left">mode</td><td align="left">See GPS Mode table below</td></tr><tr><td align="center">26</td><td align="center">uint16_t</td><td align="left">ground_speed</td><td align="left">cm/s</td></tr><tr><td align="center">28</td><td align="center">int16_t</td><td align="left">climb_rate</td><td align="left">cm/s</td></tr><tr><td align="center">30</td><td align="center">uint8_t</td><td align="left">course</td><td align="left">/ 2</td></tr><tr><td align="center">31</td><td align="center">uint8_t</td><td align="left">unused[1]</td><td class="auto-generated"> </td></tr><tr><td align="center">32</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"><p>
        Packed into a one byte field are status flags and the count of
        satellites used to compute the position fix. Note that this
        number may be lower than the number of satellites being
        tracked; the receiver will not use information from satellites
        with weak signals or which are close enough to the horizon to
        have significantly degraded position accuracy.
-      </p><div class="table"><a name="idp139368"></a><p class="title"><b>Table 5. GPS Flags</b></p><div class="table-contents"><table summary="GPS Flags" border="1"><colgroup><col align="center" class="bits"><col align="left" class="name"><col align="left" class="description"></colgroup><thead><tr><th align="center">Bits</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0-3</td><td align="left">nsats</td><td align="left">Number of satellites in solution</td></tr><tr><td align="center">4</td><td align="left">valid</td><td align="left">GPS solution is valid</td></tr><tr><td align="center">5</td><td align="left">running</td><td align="left">GPS receiver is operational</td></tr><tr><td align="center">6</td><td align="left">date_valid</td><td align="left">Reported date is valid</td></tr><tr><td align="center">7</td><td align="left">course_valid</td><td align="left">ground speed, course and climb rates are valid</td></tr></tbody></table></div></div><br class="table-break"><p>
+      </p><div class="table"><a name="idp53872896"></a><p class="title"><b>Table 5. GPS Flags</b></p><div class="table-contents"><table summary="GPS Flags" border="1"><colgroup><col align="center" class="bits"><col align="left" class="name"><col align="left" class="description"></colgroup><thead><tr><th align="center">Bits</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0-3</td><td align="left">nsats</td><td align="left">Number of satellites in solution</td></tr><tr><td align="center">4</td><td align="left">valid</td><td align="left">GPS solution is valid</td></tr><tr><td align="center">5</td><td align="left">running</td><td align="left">GPS receiver is operational</td></tr><tr><td align="center">6</td><td align="left">date_valid</td><td align="left">Reported date is valid</td></tr><tr><td align="center">7</td><td align="left">course_valid</td><td align="left">ground speed, course and climb rates are valid</td></tr></tbody></table></div></div><br class="table-break"><p>
        Here are all of the valid GPS operational modes. Altus Metrum
        products will only ever report 'N' (not valid), 'A'
        (Autonomous) modes or 'E' (Estimated). The remaining modes
        are either testing modes or require additional data.
-      </p><div class="table"><a name="idp3514016"></a><p class="title"><b>Table 6. GPS Mode</b></p><div class="table-contents"><table summary="GPS Mode" border="1"><colgroup><col align="center" class="value"><col align="center" class="name"><col align="left" class="description"></colgroup><thead><tr><th align="center">Mode</th><th align="center">Name</th><th align="center">Decsription</th></tr></thead><tbody><tr><td align="center">N</td><td align="center">Not Valid</td><td align="left">All data are invalid</td></tr><tr><td align="center">A</td><td align="center">Autonomous mode</td><td align="left">Data are derived from satellite data</td></tr><tr><td align="center">D</td><td align="center">Differential Mode</td><td align="left">
+      </p><div class="table"><a name="idp53890064"></a><p class="title"><b>Table 6. GPS Mode</b></p><div class="table-contents"><table summary="GPS Mode" border="1"><colgroup><col align="center" class="value"><col align="center" class="name"><col align="left" class="description"></colgroup><thead><tr><th align="center">Mode</th><th align="center">Name</th><th align="center">Decsription</th></tr></thead><tbody><tr><td align="center">N</td><td align="center">Not Valid</td><td align="left">All data are invalid</td></tr><tr><td align="center">A</td><td align="center">Autonomous mode</td><td align="left">Data are derived from satellite data</td></tr><tr><td align="center">D</td><td align="center">Differential Mode</td><td align="left">
                  Data are augmented with differential data from a
                  known ground station. The SkyTraq unit in TeleMetrum
                  does not support this mode
                </td></tr><tr><td align="center">E</td><td align="center">Estimated</td><td align="left">
                  Data are estimated using dead reckoning from the
                  last known data
-               </td></tr><tr><td align="center">M</td><td align="center">Manual</td><td align="left">Data were entered manually</td></tr><tr><td align="center">S</td><td align="center">Simulated</td><td align="left">GPS receiver testing mode</td></tr></tbody></table></div></div><br class="table-break"></div><div class="section" title="2.5. GPS Satellite Data"><div class="titlepage"><div><div><h3 class="title"><a name="idp3522960"></a>2.5. GPS Satellite Data</h3></div></div></div><div class="informaltable"><table border="0"><colgroup><col align="center" class="Offset"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="center">0x06</td><td align="left">GPS Satellite Data</td></tr></tbody></table></div><p>
+               </td></tr><tr><td align="center">M</td><td align="center">Manual</td><td align="left">Data were entered manually</td></tr><tr><td align="center">S</td><td align="center">Simulated</td><td align="left">GPS receiver testing mode</td></tr></tbody></table></div></div><br class="table-break"></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53908608"></a>2.5. GPS Satellite Data</h3></div></div></div><div class="informaltable"><table border="0"><colgroup><col align="center" class="Offset"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="center">0x06</td><td align="left">GPS Satellite Data</td></tr></tbody></table></div><p>
        This packet provides space vehicle identifiers and signal
        quality information in the form of a C/N1 number for up to 12
        satellites. The order of the svids is not specified.
       </p><p>
        GPS Satellite data are transmitted once per second during all
        phases of the flight.
-      </p><div class="table"><a name="idp3527696"></a><p class="title"><b>Table 7. GPS Satellite Data Contents</b></p><div class="table-contents"><table summary="GPS Satellite Data Contents" border="1"><colgroup><col align="right" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="right">5</td><td align="center">uint8_t</td><td align="left">channels</td><td align="left">Number of reported satellite information</td></tr><tr><td align="right">6</td><td align="center">sat_info_t</td><td align="left">sats[12]</td><td align="left">See Per-Satellite data table below</td></tr><tr><td align="right">30</td><td align="center">uint8_t</td><td align="left">unused[2]</td><td class="auto-generated"> </td></tr><tr><td align="right">32</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"><div class="table"><a name="idp3535336"></a><p class="title"><b>Table 8. GPS Per-Satellite data (sat_info_t)</b></p><div class="table-contents"><table summary="GPS Per-Satellite data (sat_info_t)" border="1"><colgroup><col align="right" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="right">0</td><td align="center">uint8_t</td><td align="left">svid</td><td align="left">Space Vehicle Identifier</td></tr><tr><td align="right">1</td><td align="center">uint8_t</td><td align="left">c_n_1</td><td align="left">C/N1 signal quality indicator</td></tr><tr><td align="right">2</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="section" title="3. Data Transmission"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3542464"></a>3. Data Transmission</h2></div></div></div><p>
+      </p><div class="table"><a name="idp53918144"></a><p class="title"><b>Table 7. GPS Satellite Data Contents</b></p><div class="table-contents"><table summary="GPS Satellite Data Contents" border="1"><colgroup><col align="right" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="right">5</td><td align="center">uint8_t</td><td align="left">channels</td><td align="left">Number of reported satellite information</td></tr><tr><td align="right">6</td><td align="center">sat_info_t</td><td align="left">sats[12]</td><td align="left">See Per-Satellite data table below</td></tr><tr><td align="right">30</td><td align="center">uint8_t</td><td align="left">unused[2]</td><td class="auto-generated"> </td></tr><tr><td align="right">32</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"><div class="table"><a name="idp53934256"></a><p class="title"><b>Table 8. GPS Per-Satellite data (sat_info_t)</b></p><div class="table-contents"><table summary="GPS Per-Satellite data (sat_info_t)" border="1"><colgroup><col align="right" class="Offset"><col align="center" class="Data Type"><col align="left" class="Name"><col align="left" class="Description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Data Type</th><th align="center">Name</th><th align="center">Description</th></tr></thead><tbody><tr><td align="right">0</td><td align="center">uint8_t</td><td align="left">svid</td><td align="left">Space Vehicle Identifier</td></tr><tr><td align="right">1</td><td align="center">uint8_t</td><td align="left">c_n_1</td><td align="left">C/N1 signal quality indicator</td></tr><tr><td align="right">2</td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53949328"></a>3. Data Transmission</h2></div></div></div><p>
       Altus Metrum devices use the Texas Instruments CC1111
       microcontroller which includes an integrated sub-GHz digital
       transceiver. This transceiver is used to both transmit and
       receive the telemetry packets. This section discusses what
       modulation scheme is used and how this device is configured.
-    </p><div class="section" title="3.1. Modulation Scheme"><div class="titlepage"><div><div><h3 class="title"><a name="idp3543312"></a>3.1. Modulation Scheme</h3></div></div></div><p>
+    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53950736"></a>3.1. Modulation Scheme</h3></div></div></div><p>
        Texas Instruments provides a tool for computing modulation
        parameters given a desired modulation format and basic bit
        rate. For AltOS, the basic bit rate was specified as 38 kBaud,
        resulting in the following signal parmeters:
-      </p><div class="table"><a name="idp3544072"></a><p class="title"><b>Table 9. </b></p><div class="table-contents"><table border="1"><colgroup><col align="center" class="parameter"><col align="center" class="value"><col align="center" class="description"></colgroup><thead><tr><th align="center">Parameter</th><th align="center">Value</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">Modulation</td><td align="center">GFSK</td><td align="center">Gaussian Frequency Shift Keying</td></tr><tr><td align="center">Deviation</td><td align="center">20.507812 kHz</td><td align="center">Frequency modulation</td></tr><tr><td align="center">Data rate</td><td align="center">38.360596 kBaud</td><td align="center">Raw bit rate</td></tr><tr><td align="center">RX Filter Bandwidth</td><td align="center">93.75 kHz</td><td align="center">Receiver Band pass filter bandwidth</td></tr><tr><td align="center">IF Frequency</td><td align="center">140.62 kHz</td><td align="center">Receiver intermediate frequency</td></tr></tbody></table></div></div><br class="table-break"></div><div class="section" title="3.2. Error Correction"><div class="titlepage"><div><div><h3 class="title"><a name="idp3551696"></a>3.2. Error Correction</h3></div></div></div><p>
+      </p><div class="table"><a name="idp53952048"></a><p class="title"><b>Table 9. Modulation Scheme</b></p><div class="table-contents"><table summary="Modulation Scheme" border="1"><colgroup><col align="center" class="parameter"><col align="center" class="value"><col align="center" class="description"></colgroup><thead><tr><th align="center">Parameter</th><th align="center">Value</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">Modulation</td><td align="center">GFSK</td><td align="center">Gaussian Frequency Shift Keying</td></tr><tr><td align="center">Deviation</td><td align="center">20.507812 kHz</td><td align="center">Frequency modulation</td></tr><tr><td align="center">Data rate</td><td align="center">38.360596 kBaud</td><td align="center">Raw bit rate</td></tr><tr><td align="center">RX Filter Bandwidth</td><td align="center">93.75 kHz</td><td align="center">Receiver Band pass filter bandwidth</td></tr><tr><td align="center">IF Frequency</td><td align="center">140.62 kHz</td><td align="center">Receiver intermediate frequency</td></tr></tbody></table></div></div><br class="table-break"></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp53968144"></a>3.2. Error Correction</h3></div></div></div><p>
        The cc1111 provides forward error correction in hardware,
        which AltOS uses to improve reception of weak signals. The
        overall effect of this is to halve the available bandwidth for
        data from 38 kBaud to 19 kBaud.
-      </p><div class="table"><a name="idp3552440"></a><p class="title"><b>Table 10. </b></p><div class="table-contents"><table border="1"><colgroup><col align="center" class="parameter"><col align="center" class="value"><col align="center" class="description"></colgroup><thead><tr><th align="center">Parameter</th><th align="center">Value</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">Error Correction</td><td align="center">Convolutional coding FEC</td><td align="center">1/2 code, constraint length m=4</td></tr><tr><td align="center">Interleaving</td><td align="center">4 x 4</td><td align="center">Reduce effect of noise burst</td></tr><tr><td align="center">Data Whitening</td><td align="center">XOR with 9-bit PNR</td><td align="center">Rotate right with bit 8 = bit 0 xor bit 5, initial
-             value 111111111</td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="section" title="4. TeleDongle packet format"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3558512"></a>4. TeleDongle packet format</h2></div></div></div><p>
+      </p><div class="table"><a name="idp53969440"></a><p class="title"><b>Table 10. Error Correction</b></p><div class="table-contents"><table summary="Error Correction" border="1"><colgroup><col align="center" class="parameter"><col align="center" class="value"><col align="center" class="description"></colgroup><thead><tr><th align="center">Parameter</th><th align="center">Value</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">Error Correction</td><td align="center">Convolutional coding</td><td align="center">1/2 rate, constraint length m=4</td></tr><tr><td align="center">Interleaving</td><td align="center">4 x 4</td><td align="center">Reduce effect of noise burst</td></tr><tr><td align="center">Data Whitening</td><td align="center">XOR with 9-bit PNR</td><td align="center">Rotate right with bit 8 = bit 0 xor bit 5, initial
+             value 111111111</td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp53982352"></a>4. TeleDongle packet format</h2></div></div></div><p>
       TeleDongle does not do any interpretation of the packet data,
       instead it is configured to receive packets of a specified
       length (32 bytes in this case). For each received packet,
       the packet data, two bytes added by the cc1111 radio receiver
       hardware and finally a checksum so that the host software can
       validate that the line was transmitted without any errors.
-    </p><div class="table"><a name="idp3560272"></a><p class="title"><b>Table 11. </b></p><div class="table-contents"><table border="1"><colgroup><col align="center" class="offset"><col align="center" class="name"><col align="center" class="value"><col align="center" class="description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Name</th><th align="center">Example</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0</td><td align="center">length</td><td align="center">22</td><td align="center">Total length of data bytes in the line. Note that
+    </p><div class="table"><a name="idp53985136"></a><p class="title"><b>Table 11. Packet Format</b></p><div class="table-contents"><table summary="Packet Format" border="1"><colgroup><col align="center" class="offset"><col align="center" class="name"><col align="center" class="value"><col align="center" class="description"></colgroup><thead><tr><th align="center">Offset</th><th align="center">Name</th><th align="center">Example</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">0</td><td align="center">length</td><td align="center">22</td><td align="center">Total length of data bytes in the line. Note that
            this includes the added RSSI and status bytes</td></tr><tr><td align="center">1 ·· length-3</td><td align="center">packet</td><td align="center">4f ·· 00</td><td align="center">Bytes of actual packet data</td></tr><tr><td align="center">length-2</td><td align="center">rssi</td><td align="center">3f</td><td align="center">Received signal strength. dBm = rssi / 2 - 74</td></tr><tr><td align="center">length-1</td><td align="center">lqi</td><td align="center">a9</td><td align="center">Link Quality Indicator and CRC status. Bit 7
-           is set when the CRC is correct</td></tr><tr><td align="center">length</td><td align="center">checksum</td><td align="center">88</td><td align="center">(0x5a + sum(bytes 1 ·· length-1)) % 256</td></tr></tbody></table></div></div><br class="table-break"></div><div class="section" title="5. History and Motivation"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp3569800"></a>5. History and Motivation</h2></div></div></div><p>
+           is set when the CRC is correct</td></tr><tr><td align="center">length</td><td align="center">checksum</td><td align="center">88</td><td align="center">(0x5a + sum(bytes 1 ·· length-1)) % 256</td></tr></tbody></table></div></div><br class="table-break"></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp54005152"></a>5. History and Motivation</h2></div></div></div><p>
       The original AltoOS telemetry mechanism encoded everything
       available piece of information on the TeleMetrum hardware into a
       single unified packet. Initially, the packets contained very
index 987f01d122b287fe561da5af760595f168c01f50..8cfee40679dbf22ab1cdcb5c81bb4ece39d62d6f 100644 (file)
Binary files a/AltOS/doc/telemetry.pdf and b/AltOS/doc/telemetry.pdf differ
diff --git a/AltOS/doc/telemini-v1-top.jpg b/AltOS/doc/telemini-v1-top.jpg
new file mode 100644 (file)
index 0000000..f79714c
Binary files /dev/null and b/AltOS/doc/telemini-v1-top.jpg differ
diff --git a/AltOS/doc/telemini-v2-top.jpg b/AltOS/doc/telemini-v2-top.jpg
new file mode 100644 (file)
index 0000000..bc8ae45
Binary files /dev/null and b/AltOS/doc/telemini-v2-top.jpg differ