update docs
authorBdale Garbee <bdale@gag.com>
Fri, 22 Dec 2017 02:50:56 +0000 (19:50 -0700)
committerBdale Garbee <bdale@gag.com>
Fri, 22 Dec 2017 02:50:56 +0000 (19:50 -0700)
22 files changed:
AltOS/doc/altos.html
AltOS/doc/altos.pdf
AltOS/doc/altusmetrum-revhistory.html
AltOS/doc/altusmetrum.html
AltOS/doc/altusmetrum.pdf
AltOS/doc/companion.html
AltOS/doc/companion.pdf
AltOS/doc/easymega-outline.pdf
AltOS/doc/easymini-outline.pdf
AltOS/doc/easymini-revhistory.html
AltOS/doc/easymini.html
AltOS/doc/easymini.pdf
AltOS/doc/micropeak.pdf
AltOS/doc/telegps-outline.pdf
AltOS/doc/telegps.html
AltOS/doc/telegps.pdf
AltOS/doc/telemega-outline.pdf
AltOS/doc/telemetrum-outline.pdf
AltOS/doc/telemetry.html
AltOS/doc/telemetry.pdf
AltOS/doc/telemini-v1-outline.pdf
AltOS/doc/telemini-v3-outline.pdf

index 421fb2e47000c525ab5490691cfef6ccceb481a6..7ca6a09f0487c1b1b54d8357987915bd0247724d 100644 (file)
-<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="idm46302637457168"></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="idm46302611036384"></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.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="#idm46302610177888">1. Overview</a></span></dt><dt><span class="chapter"><a href="#idm46302610940496">2. AltOS Porting Layer</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302610938992">1. Low-level CPU operations</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302610937760">1.1. ao_arch_block_interrupts/ao_arch_release_interrupts</a></span></dt><dt><span class="section"><a href="#idm46302610935712">1.2. ao_arch_save_regs, ao_arch_save_stack,
-       ao_arch_restore_stack</a></span></dt><dt><span class="section"><a href="#idm46302610933424">1.3. ao_arch_wait_interupt</a></span></dt></dl></dd><dt><span class="section"><a href="#idm46302610930880">2. GPIO operations</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302610929712">2.1. GPIO setup</a></span></dt><dt><span class="section"><a href="#idm46302611109712">2.2. Reading and writing GPIO pins</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#idm46302611104464">3. Programming the 8051 with SDCC</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302611102368">1. 8051 memory spaces</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302611100432">1.1. __data</a></span></dt><dt><span class="section"><a href="#idm46302611098256">1.2. __idata</a></span></dt><dt><span class="section"><a href="#idm46302611096816">1.3. __xdata</a></span></dt><dt><span class="section"><a href="#idm46302611095408">1.4. __pdata</a></span></dt><dt><span class="section"><a href="#idm46302611093904">1.5. __code</a></span></dt><dt><span class="section"><a href="#idm46302611092464">1.6. __bit</a></span></dt><dt><span class="section"><a href="#idm46302611090960">1.7. __sfr, __sfr16, __sfr32, __sbit</a></span></dt></dl></dd><dt><span class="section"><a href="#idm46302611089424">2. Function calls on the 8051</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302611087952">2.1. __reentrant functions</a></span></dt><dt><span class="section"><a href="#idm46302611085760">2.2. Non __reentrant functions</a></span></dt><dt><span class="section"><a href="#idm46302611083616">2.3. __interrupt functions</a></span></dt><dt><span class="section"><a href="#idm46302611082048">2.4. __critical functions and statements</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#idm46302611079984">4. Task functions</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302611078928">1. ao_add_task</a></span></dt><dt><span class="section"><a href="#idm46302611076672">2. ao_exit</a></span></dt><dt><span class="section"><a href="#idm46302605188160">3. ao_sleep</a></span></dt><dt><span class="section"><a href="#idm46302605184560">4. ao_wakeup</a></span></dt><dt><span class="section"><a href="#idm46302605181568">5. ao_alarm</a></span></dt><dt><span class="section"><a href="#idm46302605178288">6. ao_start_scheduler</a></span></dt><dt><span class="section"><a href="#idm46302605176320">7. ao_clock_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idm46302605174224">5. Timer Functions</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605172720">1. ao_time</a></span></dt><dt><span class="section"><a href="#idm46302605170688">2. ao_delay</a></span></dt><dt><span class="section"><a href="#idm46302605168768">3. ao_timer_set_adc_interval</a></span></dt><dt><span class="section"><a href="#idm46302605166640">4. ao_timer_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idm46302605164448">6. AltOS Mutexes</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605162576">1. ao_mutex_get</a></span></dt><dt><span class="section"><a href="#idm46302605160736">2. ao_mutex_put</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idm46302605158672">7. DMA engine</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605155232">1. CC1111 DMA Engine</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605154560">1.1. ao_dma_alloc</a></span></dt><dt><span class="section"><a href="#idm46302605152384">1.2. ao_dma_set_transfer</a></span></dt><dt><span class="section"><a href="#idm46302605150112">1.3. ao_dma_start</a></span></dt><dt><span class="section"><a href="#idm46302605148096">1.4. ao_dma_trigger</a></span></dt><dt><span class="section"><a href="#idm46302605146176">1.5. ao_dma_abort</a></span></dt></dl></dd><dt><span class="section"><a href="#idm46302605144032">2. STM32L DMA Engine</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605143360">2.1. ao_dma_alloc</a></span></dt><dt><span class="section"><a href="#idm46302605141360">2.2. ao_dma_set_transfer</a></span></dt><dt><span class="section"><a href="#idm46302605139104">2.3. ao_dma_set_isr</a></span></dt><dt><span class="section"><a href="#idm46302605136944">2.4. ao_dma_start</a></span></dt><dt><span class="section"><a href="#idm46302605134640">2.5. ao_dma_done_transfer</a></span></dt><dt><span class="section"><a href="#idm46302605132656">2.6. ao_dma_abort</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#idm46302605130384">8. Stdio interface</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605128880">1. putchar</a></span></dt><dt><span class="section"><a href="#idm46302605126912">2. getchar</a></span></dt><dt><span class="section"><a href="#idm46302605124816">3. flush</a></span></dt><dt><span class="section"><a href="#idm46302605122784">4. ao_add_stdio</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idm46302605118752">9. Command line interface</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605117344">1. ao_cmd_register</a></span></dt><dt><span class="section"><a href="#idm46302605108608">2. ao_cmd_lex</a></span></dt><dt><span class="section"><a href="#idm46302605106528">3. ao_cmd_put16</a></span></dt><dt><span class="section"><a href="#idm46302605104688">4. ao_cmd_put8</a></span></dt><dt><span class="section"><a href="#idm46302605102800">5. ao_cmd_white</a></span></dt><dt><span class="section"><a href="#idm46302605100736">6. ao_cmd_hex</a></span></dt><dt><span class="section"><a href="#idm46302605098688">7. ao_cmd_decimal</a></span></dt><dt><span class="section"><a href="#idm46302605096592">8. ao_match_word</a></span></dt><dt><span class="section"><a href="#idm46302605094512">9. ao_cmd_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idm46302605092288">10. USB target device</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605090064">1. ao_usb_flush</a></span></dt><dt><span class="section"><a href="#idm46302605087920">2. ao_usb_putchar</a></span></dt><dt><span class="section"><a href="#idm46302605085744">3. ao_usb_pollchar</a></span></dt><dt><span class="section"><a href="#idm46302605083600">4. ao_usb_getchar</a></span></dt><dt><span class="section"><a href="#idm46302605081584">5. ao_usb_disable</a></span></dt><dt><span class="section"><a href="#idm46302605078752">6. ao_usb_enable</a></span></dt><dt><span class="section"><a href="#idm46302605076640">7. ao_usb_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idm46302605074416">11. Serial peripherals</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605072400">1. ao_serial_getchar</a></span></dt><dt><span class="section"><a href="#idm46302605070368">2. ao_serial_putchar</a></span></dt><dt><span class="section"><a href="#idm46302605068400">3. ao_serial_drain</a></span></dt><dt><span class="section"><a href="#idm46302605066400">4. ao_serial_set_speed</a></span></dt><dt><span class="section"><a href="#idm46302605064368">5. ao_serial_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idm46302605062176">12. CC1111 Radio peripheral</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605061504">1. Radio Introduction</a></span></dt><dt><span class="section"><a href="#idm46302605054896">2. ao_radio_set_telemetry</a></span></dt><dt><span class="section"><a href="#idm46302605052800">3. ao_radio_set_packet</a></span></dt><dt><span class="section"><a href="#idm46302605050704">4. ao_radio_set_rdf</a></span></dt><dt><span class="section"><a href="#idm46302605048576">5. ao_radio_idle</a></span></dt><dt><span class="section"><a href="#idm46302605046640">6. ao_radio_get</a></span></dt><dt><span class="section"><a href="#idm46302605044720">7. ao_radio_put</a></span></dt><dt><span class="section"><a href="#idm46302605042944">8. ao_radio_abort</a></span></dt><dt><span class="section"><a href="#idm46302605040992">9. Radio Telemetry</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605039728">9.1. ao_radio_send</a></span></dt><dt><span class="section"><a href="#idm46302605037568">9.2. ao_radio_recv</a></span></dt></dl></dd><dt><span class="section"><a href="#idm46302605035168">10. Radio Direction Finding</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605034048">10.1. ao_radio_rdf</a></span></dt></dl></dd><dt><span class="section"><a href="#idm46302605032016">11. Radio Packet Mode</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605030736">11.1. ao_packet_putchar</a></span></dt><dt><span class="section"><a href="#idm46302605028624">11.2. ao_packet_pollchar</a></span></dt><dt><span class="section"><a href="#idm46302605026656">11.3. ao_packet_slave_start</a></span></dt><dt><span class="section"><a href="#idm46302605024768">11.4. ao_packet_slave_stop</a></span></dt><dt><span class="section"><a href="#idm46302605022912">11.5. ao_packet_slave_init</a></span></dt><dt><span class="section"><a href="#idm46302605020944">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="idm46302610177888"></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
-         design somewhat. Nothing in the target system (rocket flight
-         control) has tight timing requirements, and so this seems like
-         a reasonable compromise.
-         </p></li><li class="listitem"><p>Sleep/wakeup scheduling. Taken directly from ancient
-         Unix designs, these two provide the fundemental scheduling
-         primitive within AltOS.
-         </p></li><li class="listitem"><p>Mutexes. As a locking primitive, mutexes are easier to
-         use than semaphores, at least in my experience.
-         </p></li><li class="listitem"><p>Timers. Tasks can set an alarm which will abort any
-         pending sleep, allowing operations to time-out instead of
-         blocking forever.
-         </p></li></ul></div><p>
-    </p><p>
-      The device drivers and other subsystems in AltOS are
-      conventionally enabled by invoking their _init() function from
-      the 'main' function before that calls
-      ao_start_scheduler(). These functions initialize the pin
-      assignments, add various commands to the command processor and
-      may add tasks to the scheduler to handle the device. A typical
-      main program, thus, looks like:
-      </p><pre class="programlisting">
-       void
-       main(void)
-       {
-               ao_clock_init();
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AltOS</title><link rel="stylesheet" type="text/css" href="am.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /></head><body><div xml:lang="en" class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="idm1"></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><code class="email">&lt;<a class="email" href="mailto:keithp@keithp.com">keithp@keithp.com</a>&gt;</code></div></div><div><p class="copyright">Copyright © 2012 Keith Packard</p></div><div><div class="legalnotice"><a id="idm13"></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><a href="altos-revhistory.html">Revision History</a></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="#_overview">1. Overview</a></span></dt><dt><span class="chapter"><a href="#_altos_porting_layer">2. AltOS Porting Layer</a></span></dt><dd><dl><dt><span class="section"><a href="#_low_level_cpu_operations">2.1. Low-level CPU operations</a></span></dt><dd><dl><dt><span class="section"><a href="#_ao_arch_block_interrupts_ao_arch_release_interrupts">2.1.1. ao_arch_block_interrupts/ao_arch_release_interrupts</a></span></dt><dt><span class="section"><a href="#_ao_arch_save_regs_ao_arch_save_stack_ao_arch_restore_stack">2.1.2. ao_arch_save_regs, ao_arch_save_stack, ao_arch_restore_stack</a></span></dt><dt><span class="section"><a href="#_ao_arch_wait_interupt">2.1.3. ao_arch_wait_interupt</a></span></dt></dl></dd><dt><span class="section"><a href="#_gpio_operations">2.2. GPIO operations</a></span></dt><dd><dl><dt><span class="section"><a href="#_gpio_setup">2.2.1. GPIO setup</a></span></dt><dt><span class="section"><a href="#_reading_and_writing_gpio_pins">2.2.2. Reading and writing GPIO pins</a></span></dt></dl></dd><dt><span class="section"><a href="#_8051_memory_spaces">2.3. 8051 memory spaces</a></span></dt><dd><dl><dt><span class="section"><a href="#_data">2.3.1. __data</a></span></dt><dt><span class="section"><a href="#_idata">2.3.2. __idata</a></span></dt><dt><span class="section"><a href="#_xdata">2.3.3. __xdata</a></span></dt><dt><span class="section"><a href="#_pdata">2.3.4. __pdata</a></span></dt><dt><span class="section"><a href="#_code">2.3.5. __code</a></span></dt><dt><span class="section"><a href="#_bit">2.3.6. __bit</a></span></dt><dt><span class="section"><a href="#_emphasis_sfr_emphasis_sfr16_emphasis_sfr32_emphasis_sbit">2.3.7. <span class="emphasis"><em>sfr, </em></span>sfr16, <span class="emphasis"><em>sfr32, </em></span>sbit</a></span></dt></dl></dd><dt><span class="section"><a href="#_function_calls_on_the_8051">2.4. Function calls on the 8051</a></span></dt><dd><dl><dt><span class="section"><a href="#_reentrant_functions">2.4.1. __reentrant functions</a></span></dt><dt><span class="section"><a href="#_non___reentrant_functions">2.4.2. Non __reentrant functions</a></span></dt><dt><span class="section"><a href="#_interrupt_functions">2.4.3. __interrupt functions</a></span></dt><dt><span class="section"><a href="#_critical_functions_and_statements">2.4.4. __critical functions and statements</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#_task_functions">3. Task functions</a></span></dt><dd><dl><dt><span class="section"><a href="#_ao_add_task">3.1. ao_add_task</a></span></dt><dt><span class="section"><a href="#_ao_exit">3.2. ao_exit</a></span></dt><dt><span class="section"><a href="#_ao_sleep">3.3. ao_sleep</a></span></dt><dt><span class="section"><a href="#_ao_wakeup">3.4. ao_wakeup</a></span></dt><dt><span class="section"><a href="#_ao_alarm">3.5. ao_alarm</a></span></dt><dt><span class="section"><a href="#_ao_start_scheduler">3.6. ao_start_scheduler</a></span></dt><dt><span class="section"><a href="#_ao_clock_init">3.7. ao_clock_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_timer_functions">4. Timer Functions</a></span></dt><dd><dl><dt><span class="section"><a href="#_ao_time">4.1. ao_time</a></span></dt><dt><span class="section"><a href="#_ao_delay">4.2. ao_delay</a></span></dt><dt><span class="section"><a href="#_ao_timer_set_adc_interval">4.3. ao_timer_set_adc_interval</a></span></dt><dt><span class="section"><a href="#_ao_timer_init">4.4. ao_timer_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_altos_mutexes">5. AltOS Mutexes</a></span></dt><dd><dl><dt><span class="section"><a href="#_ao_mutex_get">5.1. ao_mutex_get</a></span></dt><dt><span class="section"><a href="#_ao_mutex_put">5.2. ao_mutex_put</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_dma_engine">6. DMA engine</a></span></dt><dd><dl><dt><span class="section"><a href="#_cc1111_dma_engine">6.1. CC1111 DMA Engine</a></span></dt><dd><dl><dt><span class="section"><a href="#_ao_dma_alloc">6.1.1. ao_dma_alloc</a></span></dt><dt><span class="section"><a href="#_ao_dma_set_transfer">6.1.2. ao_dma_set_transfer</a></span></dt><dt><span class="section"><a href="#_ao_dma_start">6.1.3. ao_dma_start</a></span></dt><dt><span class="section"><a href="#_ao_dma_trigger">6.1.4. ao_dma_trigger</a></span></dt><dt><span class="section"><a href="#_ao_dma_abort">6.1.5. ao_dma_abort</a></span></dt></dl></dd><dt><span class="section"><a href="#_stm32l_dma_engine">6.2. STM32L DMA Engine</a></span></dt><dd><dl><dt><span class="section"><a href="#_ao_dma_alloc_2">6.2.1. ao_dma_alloc</a></span></dt><dt><span class="section"><a href="#_ao_dma_set_transfer_2">6.2.2. ao_dma_set_transfer</a></span></dt><dt><span class="section"><a href="#_ao_dma_set_isr">6.2.3. ao_dma_set_isr</a></span></dt><dt><span class="section"><a href="#_ao_dma_start_2">6.2.4. ao_dma_start</a></span></dt><dt><span class="section"><a href="#_ao_dma_done_transfer">6.2.5. ao_dma_done_transfer</a></span></dt><dt><span class="section"><a href="#_ao_dma_abort_2">6.2.6. ao_dma_abort</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#_stdio_interface">7. Stdio interface</a></span></dt><dd><dl><dt><span class="section"><a href="#_putchar">7.1. putchar</a></span></dt><dt><span class="section"><a href="#_getchar">7.2. getchar</a></span></dt><dt><span class="section"><a href="#_flush">7.3. flush</a></span></dt><dt><span class="section"><a href="#_ao_add_stdio">7.4. ao_add_stdio</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_command_line_interface">8. Command line interface</a></span></dt><dd><dl><dt><span class="section"><a href="#_ao_cmd_register">8.1. ao_cmd_register</a></span></dt><dt><span class="section"><a href="#_ao_cmd_lex">8.2. ao_cmd_lex</a></span></dt><dt><span class="section"><a href="#_ao_cmd_put16">8.3. ao_cmd_put16</a></span></dt><dt><span class="section"><a href="#_ao_cmd_put8">8.4. ao_cmd_put8</a></span></dt><dt><span class="section"><a href="#_ao_cmd_white">8.5. ao_cmd_white</a></span></dt><dt><span class="section"><a href="#_ao_cmd_hex">8.6. ao_cmd_hex</a></span></dt><dt><span class="section"><a href="#_ao_cmd_decimal">8.7. ao_cmd_decimal</a></span></dt><dt><span class="section"><a href="#_ao_match_word">8.8. ao_match_word</a></span></dt><dt><span class="section"><a href="#_ao_cmd_init">8.9. ao_cmd_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_usb_target_device">9. USB target device</a></span></dt><dd><dl><dt><span class="section"><a href="#_ao_usb_flush">9.1. ao_usb_flush</a></span></dt><dt><span class="section"><a href="#_ao_usb_putchar">9.2. ao_usb_putchar</a></span></dt><dt><span class="section"><a href="#_ao_usb_pollchar">9.3. ao_usb_pollchar</a></span></dt><dt><span class="section"><a href="#_ao_usb_getchar">9.4. ao_usb_getchar</a></span></dt><dt><span class="section"><a href="#_ao_usb_disable">9.5. ao_usb_disable</a></span></dt><dt><span class="section"><a href="#_ao_usb_enable">9.6. ao_usb_enable</a></span></dt><dt><span class="section"><a href="#_ao_usb_init">9.7. ao_usb_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_serial_peripherals">10. Serial peripherals</a></span></dt><dd><dl><dt><span class="section"><a href="#_ao_serial_getchar">10.1. ao_serial_getchar</a></span></dt><dt><span class="section"><a href="#_ao_serial_putchar">10.2. ao_serial_putchar</a></span></dt><dt><span class="section"><a href="#_ao_serial_drain">10.3. ao_serial_drain</a></span></dt><dt><span class="section"><a href="#_ao_serial_set_speed">10.4. ao_serial_set_speed</a></span></dt><dt><span class="section"><a href="#_ao_serial_init">10.5. ao_serial_init</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_cc1111_cc1120_cc1200_radio_peripheral">11. CC1111/CC1120/CC1200 Radio peripheral</a></span></dt><dd><dl><dt><span class="section"><a href="#_radio_introduction">11.1. Radio Introduction</a></span></dt><dt><span class="section"><a href="#_ao_radio_set_telemetry">11.2. ao_radio_set_telemetry</a></span></dt><dt><span class="section"><a href="#_ao_radio_set_packet">11.3. ao_radio_set_packet</a></span></dt><dt><span class="section"><a href="#_ao_radio_set_rdf">11.4. ao_radio_set_rdf</a></span></dt><dt><span class="section"><a href="#_ao_radio_idle">11.5. ao_radio_idle</a></span></dt><dt><span class="section"><a href="#_ao_radio_get">11.6. ao_radio_get</a></span></dt><dt><span class="section"><a href="#_ao_radio_put">11.7. ao_radio_put</a></span></dt><dt><span class="section"><a href="#_ao_radio_abort">11.8. ao_radio_abort</a></span></dt><dt><span class="section"><a href="#_radio_telemetry">11.9. Radio Telemetry</a></span></dt><dd><dl><dt><span class="section"><a href="#_ao_radio_send">11.9.1. ao_radio_send</a></span></dt><dt><span class="section"><a href="#_ao_radio_recv">11.9.2. ao_radio_recv</a></span></dt></dl></dd><dt><span class="section"><a href="#_radio_direction_finding">11.10. Radio Direction Finding</a></span></dt><dd><dl><dt><span class="section"><a href="#_ao_radio_rdf">11.10.1. ao_radio_rdf</a></span></dt></dl></dd><dt><span class="section"><a href="#_radio_packet_mode">11.11. Radio Packet Mode</a></span></dt><dd><dl><dt><span class="section"><a href="#_ao_packet_putchar">11.11.1. ao_packet_putchar</a></span></dt><dt><span class="section"><a href="#_ao_packet_pollchar">11.11.2. ao_packet_pollchar</a></span></dt><dt><span class="section"><a href="#_ao_packet_slave_start">11.11.3. ao_packet_slave_start</a></span></dt><dt><span class="section"><a href="#_ao_packet_slave_stop">11.11.4. ao_packet_slave_stop</a></span></dt><dt><span class="section"><a href="#_ao_packet_slave_init">11.11.5. ao_packet_slave_init</a></span></dt><dt><span class="section"><a href="#_ao_packet_master_init">11.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 id="_overview"></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">
+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.
+</li><li class="listitem">
+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.
+</li><li class="listitem">
+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.
+</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">
+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.
+</li><li class="listitem">
+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
+design somewhat. Nothing in the target system (rocket flight
+control) has tight timing requirements, and so this seems like
+a reasonable compromise.
+</li><li class="listitem">
+Sleep/wakeup scheduling. Taken directly from ancient
+Unix designs, these two provide the fundemental scheduling
+primitive within AltOS.
+</li><li class="listitem">
+Mutexes. As a locking primitive, mutexes are easier to
+use than semaphores, at least in my experience.
+</li><li class="listitem">
+Timers. Tasks can set an alarm which will abort any
+pending sleep, allowing operations to time-out instead of
+blocking forever.
+</li></ul></div><p>The device drivers and other subsystems in AltOS are
+conventionally enabled by invoking their _init() function from
+the <span class="emphasis"><em>main</em></span> function before that calls
+ao_start_scheduler(). These functions initialize the pin
+assignments, add various commands to the command processor and
+may add tasks to the scheduler to handle the device. A typical
+main program, thus, looks like:</p><pre class="literallayout">void
+main(void)
+{
+        ao_clock_init();
 
-               /* Turn on the LED until the system is stable */
-               ao_led_init(LEDS_AVAILABLE);
-               ao_led_on(AO_LED_RED);
-               ao_timer_init();
-               ao_cmd_init();
-               ao_usb_init();
-               ao_monitor_init(AO_LED_GREEN, TRUE);
-               ao_rssi_init(AO_LED_RED);
-               ao_radio_init();
-               ao_packet_slave_init();
-               ao_packet_master_init();
-               #if HAS_DBG
-               ao_dbg_init();
-               #endif
-               ao_config_init();
-               ao_start_scheduler();
-       }
-      </pre><p>
-      As you can see, a long sequence of subsystems are initialized
-      and then the scheduler is started.
-    </p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="idm46302610940496"></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="#idm46302610938992">1. Low-level CPU operations</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302610937760">1.1. ao_arch_block_interrupts/ao_arch_release_interrupts</a></span></dt><dt><span class="section"><a href="#idm46302610935712">1.2. ao_arch_save_regs, ao_arch_save_stack,
-       ao_arch_restore_stack</a></span></dt><dt><span class="section"><a href="#idm46302610933424">1.3. ao_arch_wait_interupt</a></span></dt></dl></dd><dt><span class="section"><a href="#idm46302610930880">2. GPIO operations</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302610929712">2.1. GPIO setup</a></span></dt><dt><span class="section"><a href="#idm46302611109712">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="idm46302610938992"></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="idm46302610937760"></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="idm46302610935712"></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);
+        /* Turn on the LED until the system is stable */
+        ao_led_init(LEDS_AVAILABLE);
+        ao_led_on(AO_LED_RED);
+        ao_timer_init();
+        ao_cmd_init();
+        ao_usb_init();
+        ao_monitor_init(AO_LED_GREEN, TRUE);
+        ao_rssi_init(AO_LED_RED);
+        ao_radio_init();
+        ao_packet_slave_init();
+        ao_packet_master_init();
+#if HAS_DBG
+        ao_dbg_init();
+#endif
+        ao_config_init();
+        ao_start_scheduler();
+}</pre><p>As you can see, a long sequence of subsystems are initialized
+and then the scheduler is started.</p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_altos_porting_layer"></a>Chapter 2. AltOS Porting Layer</h1></div></div></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 id="_low_level_cpu_operations"></a>2.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 id="_ao_arch_block_interrupts_ao_arch_release_interrupts"></a>2.1.1. ao_arch_block_interrupts/ao_arch_release_interrupts</h3></div></div></div><pre class="literallayout">static inline void
+ao_arch_block_interrupts(void);
 
-         static inline void
-         ao_arch_save_stack(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 id="_ao_arch_save_regs_ao_arch_save_stack_ao_arch_restore_stack"></a>2.1.2. ao_arch_save_regs, ao_arch_save_stack, ao_arch_restore_stack</h3></div></div></div><pre class="literallayout">static inline void
+ao_arch_save_regs(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="idm46302610933424"></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="idm46302610930880"></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="idm46302610929712"></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="idm46302610927744"></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="idm46302611115152"></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="idm46302611109712"></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="idm46302611108640"></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="idm46302611106800"></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="idm46302611104464"></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="#idm46302611102368">1. 8051 memory spaces</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302611100432">1.1. __data</a></span></dt><dt><span class="section"><a href="#idm46302611098256">1.2. __idata</a></span></dt><dt><span class="section"><a href="#idm46302611096816">1.3. __xdata</a></span></dt><dt><span class="section"><a href="#idm46302611095408">1.4. __pdata</a></span></dt><dt><span class="section"><a href="#idm46302611093904">1.5. __code</a></span></dt><dt><span class="section"><a href="#idm46302611092464">1.6. __bit</a></span></dt><dt><span class="section"><a href="#idm46302611090960">1.7. __sfr, __sfr16, __sfr32, __sbit</a></span></dt></dl></dd><dt><span class="section"><a href="#idm46302611089424">2. Function calls on the 8051</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302611087952">2.1. __reentrant functions</a></span></dt><dt><span class="section"><a href="#idm46302611085760">2.2. Non __reentrant functions</a></span></dt><dt><span class="section"><a href="#idm46302611083616">2.3. __interrupt functions</a></span></dt><dt><span class="section"><a href="#idm46302611082048">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
-      spaces. Furthermore, accessing stack variables is slow, and the
-      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><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="idm46302611102368"></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
-       space, and so it's possible to convert any address into a
-       unique 16-bit address. SDCC doesn't know this, and so a
-       'global' address to SDCC consumes 3 bytes of memory, 1 byte as
-       a tag indicating the memory space and 2 bytes of offset within
-       that space. AltOS avoids these 3-byte addresses as much as
-       possible; using them involves a function call per byte
-       access. The result is that nearly every variable declaration
-       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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302611100432"></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
-         confuse things further, the 8 general registers in the
-         CPU are actually stored in this memory space. There are
-         magic instructions to 'bank switch' among 4 banks of
-         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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302611098256"></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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302611096816"></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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302611095408"></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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302611093904"></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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302611092464"></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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302611090960"></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, its type and the
-         address it lives at. No memory is allocated for these
-         variables.
-       </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302611089424"></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
-       memory. Just like fortran. This makes these functions
-       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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302611087952"></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
-         variables get allocated on the stack. This ensures that
-         these values are not overwritten by another invocation of
-         the function.
-       </p><p>
-         Functions which use significant amounts of space for
-         arguments and/or local variables and which are not often
-         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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302611085760"></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
-         consuming __data space for infrequently used variables in
-         frequently used functions.
-       </p><p>
-         All library functions called by SDCC, including functions
-         for multiplying and dividing large data types, are
-         non-reentrant. Because of this, interrupt handlers must not
-         invoke any library functions, including the multiply and
-         divide code.
-       </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302611083616"></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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302611082048"></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
-         execution. Individual statements may also be marked as
-         __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. 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="idm46302611079984"></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="#idm46302611078928">1. ao_add_task</a></span></dt><dt><span class="section"><a href="#idm46302611076672">2. ao_exit</a></span></dt><dt><span class="section"><a href="#idm46302605188160">3. ao_sleep</a></span></dt><dt><span class="section"><a href="#idm46302605184560">4. ao_wakeup</a></span></dt><dt><span class="section"><a href="#idm46302605181568">5. ao_alarm</a></span></dt><dt><span class="section"><a href="#idm46302605178288">6. ao_start_scheduler</a></span></dt><dt><span class="section"><a href="#idm46302605176320">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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302611078928"></a>1. ao_add_task</h2></div></div></div><pre class="programlisting">
-       void
-       ao_add_task(__xdata struct ao_task * task,
-                   void (*start)(void),
-                   __code char *name);
-      </pre><p>
-       This initializes the statically allocated task structure,
-       assigns a name to it (not used for anything but the task
-       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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302611076672"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605188160"></a>3. ao_sleep</h2></div></div></div><pre class="programlisting">
-       void
-       ao_sleep(__xdata void *wchan)
-      </pre><p>
-       This suspends the current task until 'wchan' is signaled
-       by ao_wakeup, or until the timeout, set by ao_alarm,
-       fires. If 'wchan' is signaled, ao_sleep returns 0, otherwise
-       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 around the block of code. Here's a complete
-       example:
-       </p><pre class="programlisting">
-         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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605184560"></a>4. ao_wakeup</h2></div></div></div><pre class="programlisting">
-       void
-       ao_wakeup(__xdata void *wchan)
-      </pre><p>
-       Wake all tasks blocked on 'wchan'. This makes them
-       available to be run again, but does not actually switch
-       to another task. Here's an example of using this:
-       </p><pre class="programlisting">
-         if (RFIF &amp; RFIF_IM_DONE) {
-                 ao_radio_done = 1;
-                 ao_wakeup(&amp;ao_radio_done);
-                 RFIF &amp;= ~RFIF_IM_DONE;
-         }
-       </pre><p>
-       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="idm46302605181568"></a>5. ao_alarm</h2></div></div></div><pre class="programlisting">
-       void
-       ao_alarm(uint16_t delay);
+static inline void
+ao_arch_save_stack(void);
 
-       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. 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);
-         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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605178288"></a>6. ao_start_scheduler</h2></div></div></div><pre class="programlisting">
-       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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605176320"></a>7. ao_clock_init</h2></div></div></div><pre class="programlisting">
-       void
-       ao_clock_init(void);
-      </pre><p>
-       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="idm46302605174224"></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="#idm46302605172720">1. ao_time</a></span></dt><dt><span class="section"><a href="#idm46302605170688">2. ao_delay</a></span></dt><dt><span class="section"><a href="#idm46302605168768">3. ao_timer_set_adc_interval</a></span></dt><dt><span class="section"><a href="#idm46302605166640">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 sensors to
-      collect current data readings. Doing this from the ISR ensures
-      that the values are sampled at a regular rate, independent
-      of any scheduling jitter.
-    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605172720"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605170688"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605168768"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605166640"></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. 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="idm46302605164448"></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="#idm46302605162576">1. ao_mutex_get</a></span></dt><dt><span class="section"><a href="#idm46302605160736">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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605162576"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605160736"></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"><div class="titlepage"><div><div><h1 class="title"><a name="idm46302605158672"></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="#idm46302605155232">1. CC1111 DMA Engine</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605154560">1.1. ao_dma_alloc</a></span></dt><dt><span class="section"><a href="#idm46302605152384">1.2. ao_dma_set_transfer</a></span></dt><dt><span class="section"><a href="#idm46302605150112">1.3. ao_dma_start</a></span></dt><dt><span class="section"><a href="#idm46302605148096">1.4. ao_dma_trigger</a></span></dt><dt><span class="section"><a href="#idm46302605146176">1.5. ao_dma_abort</a></span></dt></dl></dd><dt><span class="section"><a href="#idm46302605144032">2. STM32L DMA Engine</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605143360">2.1. ao_dma_alloc</a></span></dt><dt><span class="section"><a href="#idm46302605141360">2.2. ao_dma_set_transfer</a></span></dt><dt><span class="section"><a href="#idm46302605139104">2.3. ao_dma_set_isr</a></span></dt><dt><span class="section"><a href="#idm46302605136944">2.4. ao_dma_start</a></span></dt><dt><span class="section"><a href="#idm46302605134640">2.5. ao_dma_done_transfer</a></span></dt><dt><span class="section"><a href="#idm46302605132656">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,
-      AltOS will simply panic.
-    </p><p>
-      During operation, the DMA engine is initialized with the
-      transfer parameters. Then it is started, at which point it
-      awaits a suitable event to start copying data. When copying data
-      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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605155232"></a>1. CC1111 DMA Engine</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302605154560"></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="idm46302605152384"></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="idm46302605150112"></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="idm46302605148096"></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="idm46302605146176"></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 transaction, 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="idm46302605144032"></a>2. STM32L DMA Engine</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302605143360"></a>2.1. ao_dma_alloc</h3></div></div></div><pre class="programlisting">
-         uint8_t ao_dma_done[];
+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 id="_ao_arch_wait_interupt"></a>2.1.3. ao_arch_wait_interupt</h3></div></div></div><pre class="literallayout">#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 id="_gpio_operations"></a>2.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 id="_gpio_setup"></a>2.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 id="_ao_enable_output"></a>ao_enable_output</h4></div></div></div><pre class="literallayout">#define ao_enable_output(port, bit, pin, value)</pre><p>Set the specified port+bit (also called <span class="emphasis"><em>pin</em></span>)
+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 id="_ao_enable_input"></a>ao_enable_input</h4></div></div></div><pre class="literallayout">#define ao_enable_input(port, bit, mode)</pre><p>Sets the specified port/bit to be an input
+pin. <span class="emphasis"><em>mode</em></span> 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">
+AO_EXTI_MODE_PULL_UP. Apply a pull-up to the
+pin; a disconnected pin will read as 1.
+</li><li class="listitem">
+AO_EXTI_MODE_PULL_DOWN. Apply a pull-down to
+the pin; a disconnected pin will read as 0.
+</li><li class="listitem">
+0. Don’t apply either a pull-up or
+pull-down. A disconnected pin will read an
+undetermined value.
+</li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_reading_and_writing_gpio_pins"></a>2.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 id="_ao_gpio_set"></a>ao_gpio_set</h4></div></div></div><pre class="literallayout">#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 id="_ao_gpio_get"></a>ao_gpio_get</h4></div></div></div><pre class="literallayout">#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.
+== Programming the 8051 with SDCC</p><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
+spaces. Furthermore, accessing stack variables is slow, and
+the 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><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></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_8051_memory_spaces"></a>2.3. 8051 memory spaces</h2></div></div></div><p>The <span class="emphasis"><em>data/</em></span>xdata/__code memory spaces below were completely
+separate in the original 8051 design. In the cc1111, this
+isn’t true—they all live in a single unified 64kB address
+space, and so it’s possible to convert any address into a
+unique 16-bit address. SDCC doesn’t know this, and so a
+<span class="emphasis"><em>global</em></span> address to SDCC consumes 3 bytes of memory, 1 byte as
+a tag indicating the memory space and 2 bytes of offset within
+that space. AltOS avoids these 3-byte addresses as much as
+possible; using them involves a function call per byte
+access. The result is that nearly every variable declaration
+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"><div class="titlepage"><div><div><h3 class="title"><a id="_data"></a>2.3.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
+confuse things further, the 8 general registers in the
+CPU are actually stored in this memory space. There are
+magic instructions to <span class="emphasis"><em>bank switch</em></span> among 4 banks of
+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"><div class="titlepage"><div><div><h3 class="title"><a id="_idata"></a>2.3.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"><div class="titlepage"><div><div><h3 class="title"><a id="_xdata"></a>2.3.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"><div class="titlepage"><div><div><h3 class="title"><a id="_pdata"></a>2.3.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"><div class="titlepage"><div><div><h3 class="title"><a id="_code"></a>2.3.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 <span class="emphasis"><em>code</em></span>
+access opcodes. Anything read-only should live in this space.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_bit"></a>2.3.6. __bit</h3></div></div></div><p>The 8051 has 128 bits of bit-addressible memory that
+lives in the <span class="emphasis"><em>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 </em></span>data segment.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_emphasis_sfr_emphasis_sfr16_emphasis_sfr32_emphasis_sbit"></a>2.3.7. <span class="emphasis"><em>sfr, </em></span>sfr16, <span class="emphasis"><em>sfr32, </em></span>sbit</h3></div></div></div><p>Access to physical registers in the device use this mode
+which declares the variable name, its type and the
+address it lives at. No memory is allocated for these
+variables.</p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_function_calls_on_the_8051"></a>2.4. 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
+memory. Just like fortran. This makes these functions
+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"><div class="titlepage"><div><div><h3 class="title"><a id="_reentrant_functions"></a>2.4.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
+variables get allocated on the stack. This ensures that
+these values are not overwritten by another invocation of
+the function.</p><p>Functions which use significant amounts of space for
+arguments and/or local variables and which are not often
+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"><div class="titlepage"><div><div><h3 class="title"><a id="_non___reentrant_functions"></a>2.4.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
+<span class="emphasis"><em>xdata, </em></span>pdata or <span class="emphasis"><em>data space as desired. This can avoid
+consuming </em></span>data space for infrequently used variables in
+frequently used functions.</p><p>All library functions called by SDCC, including functions
+for multiplying and dividing large data types, are
+non-reentrant. Because of this, interrupt handlers must not
+invoke any library functions, including the multiply and
+divide code.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_interrupt_functions"></a>2.4.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 <span class="emphasis"><em>reti</em></span> 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"><div class="titlepage"><div><div><h3 class="title"><a id="_critical_functions_and_statements"></a>2.4.4. __critical functions and statements</h3></div></div></div><p>SDCC has built-in support for suspending interrupts during
+critical code. Functions marked as <span class="emphasis"><em>critical will have
+interrupts suspended for the whole period of
+execution. Individual statements may also be marked as
+</em></span>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. 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 id="_task_functions"></a>Chapter 3. Task functions</h1></div></div></div><p>This chapter documents how to create, destroy and schedule
+AltOS tasks.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_add_task"></a>3.1. ao_add_task</h2></div></div></div><pre class="literallayout">void
+ao_add_task(__xdata struct ao_task * task,
+            void (*start)(void),
+            __code char *name);</pre><p>This initializes the statically allocated task structure,
+assigns a name to it (not used for anything but the task
+display), and the start address. It does not switch to the
+new task. <span class="emphasis"><em>start</em></span> must not ever return; there is no place
+to return to.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_exit"></a>3.2. ao_exit</h2></div></div></div><pre class="literallayout">void
+ao_exit(void)</pre><p>This terminates the current task.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_sleep"></a>3.3. ao_sleep</h2></div></div></div><pre class="literallayout">void
+ao_sleep(__xdata void *wchan)</pre><p>This suspends the current task until <span class="emphasis"><em>wchan</em></span> is signaled
+by ao_wakeup, or until the timeout, set by ao_alarm,
+fires. If <span class="emphasis"><em>wchan</em></span> is signaled, ao_sleep returns 0, otherwise
+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 around the block of code. Here’s a complete
+example:</p><pre class="literallayout">ao_arch_block_interrupts();
+while (!ao_radio_done)
+        ao_sleep(&amp;amp;ao_radio_done);
+ao_arch_release_interrupts();</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_wakeup"></a>3.4. ao_wakeup</h2></div></div></div><pre class="literallayout">void
+ao_wakeup(__xdata void *wchan)</pre><p>Wake all tasks blocked on <span class="emphasis"><em>wchan</em></span>. This makes them
+available to be run again, but does not actually switch
+to another task. Here’s an example of using this:</p><pre class="literallayout">if (RFIF &amp;amp; RFIF_IM_DONE) {
+        ao_radio_done = 1;
+        ao_wakeup(&amp;amp;ao_radio_done);
+        RFIF &amp;amp;= ~RFIF_IM_DONE;
+}</pre><p>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 id="_ao_alarm"></a>3.5. ao_alarm</h2></div></div></div><pre class="literallayout">void
+ao_alarm(uint16_t delay);
 
-         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="idm46302605141360"></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="idm46302605139104"></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="idm46302605136944"></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="idm46302605134640"></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="idm46302605132656"></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 transaction, 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="idm46302605130384"></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="#idm46302605128880">1. putchar</a></span></dt><dt><span class="section"><a href="#idm46302605126912">2. getchar</a></span></dt><dt><span class="section"><a href="#idm46302605124816">3. flush</a></span></dt><dt><span class="section"><a href="#idm46302605122784">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 locally 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="idm46302605128880"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605126912"></a>2. getchar</h2></div></div></div><pre class="programlisting">
-       char
-       getchar(void)
-      </pre><p>
-       Reads a single character from any of the available
-       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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605124816"></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.
-      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605122784"></a>4. ao_add_stdio</h2></div></div></div><pre class="programlisting">
-       void
-       ao_add_stdio(char (*pollchar)(void),
-                          void (*putchar)(char),
-                          void (*flush)(void))
-      </pre><p>
-       This adds another console device to the available
-       list.
-      </p><p>
-       'pollchar' returns either an available character or
-       AO_READ_AGAIN if none is available. Significantly, it does
-       not block. The device driver must set 'ao_stdin_ready' to
-       1 and call ao_wakeup(&amp;ao_stdin_ready) when it receives
-       input to tell getchar that more data is available, at
-       which point 'pollchar' will be called again.
-      </p><p>
-       'putchar' queues a character for output, flushing if the output buffer is
-       full. It may block in this case.
-      </p><p>
-       '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"><div class="titlepage"><div><div><h1 class="title"><a name="idm46302605118752"></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="#idm46302605117344">1. ao_cmd_register</a></span></dt><dt><span class="section"><a href="#idm46302605108608">2. ao_cmd_lex</a></span></dt><dt><span class="section"><a href="#idm46302605106528">3. ao_cmd_put16</a></span></dt><dt><span class="section"><a href="#idm46302605104688">4. ao_cmd_put8</a></span></dt><dt><span class="section"><a href="#idm46302605102800">5. ao_cmd_white</a></span></dt><dt><span class="section"><a href="#idm46302605100736">6. ao_cmd_hex</a></span></dt><dt><span class="section"><a href="#idm46302605098688">7. ao_cmd_decimal</a></span></dt><dt><span class="section"><a href="#idm46302605096592">8. ao_match_word</a></span></dt><dt><span class="section"><a href="#idm46302605094512">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, 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="idm46302605117344"></a>1. ao_cmd_register</h2></div></div></div><pre class="programlisting">
-       void
-       ao_cmd_register(__code struct ao_cmds *cmds)
-      </pre><p>
-       This registers a set of commands with the command
-       parser. There is a fixed limit on the number of command
-       sets, the system will panic if too many are registered.
-       Each command is defined by a struct ao_cmds entry:
-       </p><pre class="programlisting">
-         struct ao_cmds {
-                 char          cmd;
-                 void          (*func)(void);
-                 const char    *help;
-         };
-       </pre><p>
-       'cmd' is the character naming the command. 'func' is the
-       function to invoke and 'help' is a string displayed by the
-       '?' 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 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><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><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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605108608"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605106528"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605104688"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605102800"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605100736"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605098688"></a>7. ao_cmd_decimal</h2></div></div></div><pre class="programlisting">
-       void
-       ao_cmd_decimal(void)
-      </pre><p>
-       This reads a 32-bit decimal value from the command
-       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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605096592"></a>8. ao_match_word</h2></div></div></div><pre class="programlisting">
-       uint8_t
-       ao_match_word(__code char *word)
-      </pre><p>
-       This checks to make sure that 'word' occurs on the command
-       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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605094512"></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"><div class="titlepage"><div><div><h1 class="title"><a name="idm46302605092288"></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="#idm46302605090064">1. ao_usb_flush</a></span></dt><dt><span class="section"><a href="#idm46302605087920">2. ao_usb_putchar</a></span></dt><dt><span class="section"><a href="#idm46302605085744">3. ao_usb_pollchar</a></span></dt><dt><span class="section"><a href="#idm46302605083600">4. ao_usb_getchar</a></span></dt><dt><span class="section"><a href="#idm46302605081584">5. ao_usb_disable</a></span></dt><dt><span class="section"><a href="#idm46302605078752">6. ao_usb_enable</a></span></dt><dt><span class="section"><a href="#idm46302605076640">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
-      has native drivers for Linux, Windows and Mac OS X. It would be
-      easy to change the code to provide an alternate target device if
-      necessary.
-    </p><p>
-      To the rest of the system, the USB device looks like a simple
-      two-way byte stream. It can be hooked into the command line
-      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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605090064"></a>1. ao_usb_flush</h2></div></div></div><pre class="programlisting">
-       void
-       ao_usb_flush(void);
-      </pre><p>
-       Flushes any pending USB output. This queues an 'IN' packet
-       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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605087920"></a>2. ao_usb_putchar</h2></div></div></div><pre class="programlisting">
-       void
-       ao_usb_putchar(char c);
-      </pre><p>
-       If there is a pending 'IN' packet awaiting delivery to the
-       host, this blocks until that has been fetched. Then, this
-       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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605085744"></a>3. ao_usb_pollchar</h2></div></div></div><pre class="programlisting">
-       char
-       ao_usb_pollchar(void);
-      </pre><p>
-       If there are no characters remaining in the last 'OUT'
-       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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605083600"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605081584"></a>5. ao_usb_disable</h2></div></div></div><pre class="programlisting">
-       void
-       ao_usb_disable(void);
-      </pre><p>
-       This turns off the USB controller. It will no longer
-       respond to host requests, nor return characters. Calling
-       any of the i/o routines while the USB device is disabled
-       is undefined, and likely to break things. Disabling the
-       USB device when not needed saves power.
-      </p><p>
-       Note that neither TeleDongle nor TeleMetrum are able to
-       signal to the USB host that they have disconnected, so
-       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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605078752"></a>6. ao_usb_enable</h2></div></div></div><pre class="programlisting">
-       void
-       ao_usb_enable(void);
-      </pre><p>
-       This turns the USB controller on again after it has been
-       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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605076640"></a>7. ao_usb_init</h2></div></div></div><pre class="programlisting">
-       void
-       ao_usb_init(void);
-      </pre><p>
-       This turns the USB controller on, adds a task to handle
-       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"><div class="titlepage"><div><div><h1 class="title"><a name="idm46302605074416"></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="#idm46302605072400">1. ao_serial_getchar</a></span></dt><dt><span class="section"><a href="#idm46302605070368">2. ao_serial_putchar</a></span></dt><dt><span class="section"><a href="#idm46302605068400">3. ao_serial_drain</a></span></dt><dt><span class="section"><a href="#idm46302605066400">4. ao_serial_set_speed</a></span></dt><dt><span class="section"><a href="#idm46302605064368">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
-      in 8-bits, no parity, 1 stop bit framing. The default
-      configuration has clock settings for 4800, 9600 and 57600 baud
-      operation. Additional speeds can be added by computing
-      appropriate clock values.
-    </p><p>
-      To prevent loss of data, AltOS provides receive and transmit
-      fifos of 32 characters each.
-    </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605072400"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605070368"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605068400"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605066400"></a>4. ao_serial_set_speed</h2></div></div></div><pre class="programlisting">
-       void
-       ao_serial_set_speed(uint8_t speed);
-      </pre><p>
-       Changes the serial baud rate to one of
-       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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605064368"></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"><div class="titlepage"><div><div><h1 class="title"><a name="idm46302605062176"></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="#idm46302605061504">1. Radio Introduction</a></span></dt><dt><span class="section"><a href="#idm46302605054896">2. ao_radio_set_telemetry</a></span></dt><dt><span class="section"><a href="#idm46302605052800">3. ao_radio_set_packet</a></span></dt><dt><span class="section"><a href="#idm46302605050704">4. ao_radio_set_rdf</a></span></dt><dt><span class="section"><a href="#idm46302605048576">5. ao_radio_idle</a></span></dt><dt><span class="section"><a href="#idm46302605046640">6. ao_radio_get</a></span></dt><dt><span class="section"><a href="#idm46302605044720">7. ao_radio_put</a></span></dt><dt><span class="section"><a href="#idm46302605042944">8. ao_radio_abort</a></span></dt><dt><span class="section"><a href="#idm46302605040992">9. Radio Telemetry</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605039728">9.1. ao_radio_send</a></span></dt><dt><span class="section"><a href="#idm46302605037568">9.2. ao_radio_recv</a></span></dt></dl></dd><dt><span class="section"><a href="#idm46302605035168">10. Radio Direction Finding</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605034048">10.1. ao_radio_rdf</a></span></dt></dl></dd><dt><span class="section"><a href="#idm46302605032016">11. Radio Packet Mode</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46302605030736">11.1. ao_packet_putchar</a></span></dt><dt><span class="section"><a href="#idm46302605028624">11.2. ao_packet_pollchar</a></span></dt><dt><span class="section"><a href="#idm46302605026656">11.3. ao_packet_slave_start</a></span></dt><dt><span class="section"><a href="#idm46302605024768">11.4. ao_packet_slave_stop</a></span></dt><dt><span class="section"><a href="#idm46302605022912">11.5. ao_packet_slave_init</a></span></dt><dt><span class="section"><a href="#idm46302605020944">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="idm46302605061504"></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="idm46302605054896"></a>2. ao_radio_set_telemetry</h2></div></div></div><pre class="programlisting">
-         void
-         ao_radio_set_telemetry(void);
-       </pre><p>
-         Configures the radio to send or receive telemetry
-         packets. This includes packet length, modulation scheme and
-         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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605052800"></a>3. ao_radio_set_packet</h2></div></div></div><pre class="programlisting">
-         void
-         ao_radio_set_packet(void);
-       </pre><p>
-         Configures the radio to send or receive packet data.  This
-         includes packet length, modulation scheme and 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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605050704"></a>4. ao_radio_set_rdf</h2></div></div></div><pre class="programlisting">
-         void
-         ao_radio_set_rdf(void);
-       </pre><p>
-         Configures the radio to send RDF 'packets'. An RDF 'packet'
-         is a sequence of hex 0x55 bytes sent at a base bit rate of
-         2kbps using a 5kHz deviation. All of the error correction
-         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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605048576"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605046640"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605044720"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605042944"></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><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605040992"></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="idm46302605039728"></a>9.1. ao_radio_send</h3></div></div></div><pre class="programlisting">
-         void
-         ao_radio_send(__xdata struct ao_telemetry *telemetry);
-       </pre><p>
-         This sends the specific telemetry packet, waiting for the
-         transmission to complete. The radio must have been set to
-         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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302605037568"></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>
-         This blocks waiting for a telemetry packet to be received.
-         The radio must have been set to telemetry mode. This
-         function calls ao_radio_get() before receiving, and
-         ao_radio_put() afterwards, to correctly serialize access
-         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></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605035168"></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="idm46302605034048"></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></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46302605032016"></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="idm46302605030736"></a>11.1. ao_packet_putchar</h3></div></div></div><pre class="programlisting">
-         void
-         ao_packet_putchar(char c);
-       </pre><p>
-         If the output queue is full, this first blocks waiting for
-         that data to be delivered. Then, queues a character for
-         packet transmission. On the master side, this will
-         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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302605028624"></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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302605026656"></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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302605024768"></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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302605022912"></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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46302605020944"></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></div></body></html>
+void
+ao_clear_alarm(void);</pre><p>Schedules an alarm to fire in at least <span class="emphasis"><em>delay</em></span>
+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="literallayout">ao_alarm(ao_packet_master_delay);
+ao_arch_block_interrupts();
+while (!ao_radio_dma_done)
+if (ao_sleep(&amp;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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_start_scheduler"></a>3.6. ao_start_scheduler</h2></div></div></div><pre class="literallayout">void
+ao_start_scheduler(void);</pre><p>This is called from <span class="emphasis"><em>main</em></span> when the system is all
+initialized and ready to run. It will not return.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_clock_init"></a>3.7. ao_clock_init</h2></div></div></div><pre class="literallayout">void
+ao_clock_init(void);</pre><p>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 id="_timer_functions"></a>Chapter 4. Timer Functions</h1></div></div></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 sensors to
+collect current data readings. Doing this from the ISR ensures
+that the values are sampled at a regular rate, independent
+of any scheduling jitter.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_time"></a>4.1. ao_time</h2></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_delay"></a>4.2. ao_delay</h2></div></div></div><pre class="literallayout">void
+ao_delay(uint16_t ticks);</pre><p>Suspend the current task for at least <span class="emphasis"><em>ticks</em></span> clock units.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_timer_set_adc_interval"></a>4.3. ao_timer_set_adc_interval</h2></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_timer_init"></a>4.4. ao_timer_init</h2></div></div></div><pre class="literallayout">void
+ao_timer_init(void)</pre><p>This turns on the 100Hz tick. It is required for any of the
+time-based functions to work. It should be called by <span class="emphasis"><em>main</em></span>
+before ao_start_scheduler.</p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_altos_mutexes"></a>Chapter 5. AltOS Mutexes</h1></div></div></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—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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_mutex_get"></a>5.1. ao_mutex_get</h2></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_mutex_put"></a>5.2. ao_mutex_put</h2></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h1 class="title"><a id="_dma_engine"></a>Chapter 6. DMA engine</h1></div></div></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,
+AltOS will simply panic.</p><p>During operation, the DMA engine is initialized with the
+transfer parameters. Then it is started, at which point it
+awaits a suitable event to start copying data. When copying data
+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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_cc1111_dma_engine"></a>6.1. CC1111 DMA Engine</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_ao_dma_alloc"></a>6.1.1. ao_dma_alloc</h3></div></div></div><pre class="literallayout">uint8_t
+ao_dma_alloc(__xdata uint8_t *done)</pre><p>Allocate a DMA engine, returning the
+identifier.  <span class="emphasis"><em>done</em></span> 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 id="_ao_dma_set_transfer"></a>6.1.2. ao_dma_set_transfer</h3></div></div></div><pre class="literallayout">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 <span class="emphasis"><em>srcaddr</em></span> to <span class="emphasis"><em>dstaddr</em></span> for <span class="emphasis"><em>count</em></span>
+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 id="_ao_dma_start"></a>6.1.3. ao_dma_start</h3></div></div></div><pre class="literallayout">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 id="_ao_dma_trigger"></a>6.1.4. ao_dma_trigger</h3></div></div></div><pre class="literallayout">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 id="_ao_dma_abort"></a>6.1.5. ao_dma_abort</h3></div></div></div><pre class="literallayout">void
+ao_dma_abort(uint8_t id)</pre><p>Terminate any in-progress DMA transaction,
+marking its <span class="emphasis"><em>done</em></span> 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 id="_stm32l_dma_engine"></a>6.2. STM32L DMA Engine</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_ao_dma_alloc_2"></a>6.2.1. ao_dma_alloc</h3></div></div></div><pre class="literallayout">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 id="_ao_dma_set_transfer_2"></a>6.2.2. ao_dma_set_transfer</h3></div></div></div><pre class="literallayout">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 <span class="emphasis"><em>peripheral</em></span> and <span class="emphasis"><em>memory</em></span> for
+<span class="emphasis"><em>count</em></span> units. <span class="emphasis"><em>ccr</em></span> 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 id="_ao_dma_set_isr"></a>6.2.3. ao_dma_set_isr</h3></div></div></div><pre class="literallayout">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 id="_ao_dma_start_2"></a>6.2.4. ao_dma_start</h3></div></div></div><pre class="literallayout">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.  <span class="emphasis"><em>ao_dma_done[index]</em></span>
+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 id="_ao_dma_done_transfer"></a>6.2.5. ao_dma_done_transfer</h3></div></div></div><pre class="literallayout">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 id="_ao_dma_abort_2"></a>6.2.6. ao_dma_abort</h3></div></div></div><pre class="literallayout">void
+ao_dma_abort(uint8_t id)</pre><p>Terminate any in-progress DMA transaction,
+marking its <span class="emphasis"><em>done</em></span> variable with the
+AO_DMA_ABORTED bit.</p></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_stdio_interface"></a>Chapter 7. Stdio interface</h1></div></div></div><p>AltOS offers a stdio interface over USB, serial and the RF
+packet link. This provides for control of the device locally 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 id="_putchar"></a>7.1. putchar</h2></div></div></div><pre class="literallayout">void
+putchar(char c)</pre><p>Delivers a single character to the current console
+device.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_getchar"></a>7.2. getchar</h2></div></div></div><pre class="literallayout">char
+getchar(void)</pre><p>Reads a single character from any of the available
+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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_flush"></a>7.3. flush</h2></div></div></div><pre class="literallayout">void
+flush(void)</pre><p>Flushes the current console device output buffer. Any
+pending characters will be delivered to the target device.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_add_stdio"></a>7.4. ao_add_stdio</h2></div></div></div><pre class="literallayout">void
+ao_add_stdio(char (*pollchar)(void),
+void (*putchar)(char),
+void (*flush)(void))</pre><p>This adds another console device to the available
+list.</p><p><span class="emphasis"><em>pollchar</em></span> returns either an available character or
+AO_READ_AGAIN if none is available. Significantly, it does
+not block. The device driver must set <span class="emphasis"><em>ao_stdin_ready</em></span> to
+1 and call ao_wakeup(&amp;ao_stdin_ready) when it receives
+input to tell getchar that more data is available, at
+which point <span class="emphasis"><em>pollchar</em></span> will be called again.</p><p><span class="emphasis"><em>putchar</em></span> queues a character for output, flushing if the output buffer is
+full. It may block in this case.</p><p><span class="emphasis"><em>flush</em></span> 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"><div class="titlepage"><div><div><h1 class="title"><a id="_command_line_interface"></a>Chapter 8. Command line interface</h1></div></div></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, 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 id="_ao_cmd_register"></a>8.1. ao_cmd_register</h2></div></div></div><pre class="literallayout">void
+ao_cmd_register(__code struct ao_cmds *cmds)</pre><p>This registers a set of commands with the command
+parser. There is a fixed limit on the number of command
+sets, the system will panic if too many are registered.
+Each command is defined by a struct ao_cmds entry:</p><pre class="literallayout">struct ao_cmds {
+        char            cmd;
+        void            (*func)(void);
+        const char      *help;
+};</pre><p><span class="emphasis"><em>cmd</em></span> is the character naming the command. <span class="emphasis"><em>func</em></span> is the
+function to invoke and <span class="emphasis"><em>help</em></span> is a string displayed by the
+<span class="emphasis"><em>?</em></span> command. Syntax errors found while executing <span class="emphasis"><em>func</em></span>
+should be indicated by modifying the global ao_cmd_status
+variable with one of the following values:</p><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ao_cmd_success
+</span></dt><dd>
+The command was parsed successfully. There is no need
+to assign this value, it is the default.
+</dd><dt><span class="term">
+ao_cmd_lex_error
+</span></dt><dd>
+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.
+</dd><dt><span class="term">
+ao_syntax_error
+</span></dt><dd>
+The command line is invalid for some reason other than
+invalid tokens.
+</dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_cmd_lex"></a>8.2. ao_cmd_lex</h2></div></div></div><pre class="literallayout">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 (<span class="emphasis"><em>\n</em></span>)
+character.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_cmd_put16"></a>8.3. ao_cmd_put16</h2></div></div></div><pre class="literallayout">void
+ao_cmd_put16(uint16_t v);</pre><p>Writes <span class="emphasis"><em>v</em></span> as four hexadecimal characters.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_cmd_put8"></a>8.4. ao_cmd_put8</h2></div></div></div><pre class="literallayout">void
+ao_cmd_put8(uint8_t v);</pre><p>Writes <span class="emphasis"><em>v</em></span> as two hexadecimal characters.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_cmd_white"></a>8.5. ao_cmd_white</h2></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_cmd_hex"></a>8.6. ao_cmd_hex</h2></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_cmd_decimal"></a>8.7. ao_cmd_decimal</h2></div></div></div><pre class="literallayout">void
+ao_cmd_decimal(void)</pre><p>This reads a 32-bit decimal value from the command
+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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_match_word"></a>8.8. ao_match_word</h2></div></div></div><pre class="literallayout">uint8_t
+ao_match_word(__code char *word)</pre><p>This checks to make sure that <span class="emphasis"><em>word</em></span> occurs on the
+command line. It does not skip leading white space. If
+<span class="emphasis"><em>word</em></span> 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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_cmd_init"></a>8.9. ao_cmd_init</h2></div></div></div><pre class="literallayout">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 <span class="emphasis"><em>main</em></span> before
+ao_start_scheduler.</p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_usb_target_device"></a>Chapter 9. USB target device</h1></div></div></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 has native drivers for Linux, Windows and Mac OS
+X. It would be easy to change the code to provide an alternate
+target device if necessary.</p><p>To the rest of the system, the USB device looks like a simple
+two-way byte stream. It can be hooked into the command line
+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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_usb_flush"></a>9.1. ao_usb_flush</h2></div></div></div><pre class="literallayout">void
+ao_usb_flush(void);</pre><p>Flushes any pending USB output. This queues an <span class="emphasis"><em>IN</em></span>
+packet 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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_usb_putchar"></a>9.2. ao_usb_putchar</h2></div></div></div><pre class="literallayout">void
+ao_usb_putchar(char c);</pre><p>If there is a pending <span class="emphasis"><em>IN</em></span> packet awaiting delivery to
+the host, this blocks until that has been
+fetched. Then, this adds a byte to the pending IN
+packet for delivery to the USB host. If the USB packet
+is full, this queues the <span class="emphasis"><em>IN</em></span> packet for delivery.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_usb_pollchar"></a>9.3. ao_usb_pollchar</h2></div></div></div><pre class="literallayout">char
+ao_usb_pollchar(void);</pre><p>If there are no characters remaining in the last <span class="emphasis"><em>OUT</em></span>
+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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_usb_getchar"></a>9.4. ao_usb_getchar</h2></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_usb_disable"></a>9.5. ao_usb_disable</h2></div></div></div><pre class="literallayout">void
+ao_usb_disable(void);</pre><p>This turns off the USB controller. It will no longer
+respond to host requests, nor return
+characters. Calling any of the i/o routines while the
+USB device is disabled is undefined, and likely to
+break things. Disabling the USB device when not needed
+saves power.</p><p>Note that neither TeleDongle v0.2 nor TeleMetrum v1
+are able to signal to the USB host that they have
+disconnected, so 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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_usb_enable"></a>9.6. ao_usb_enable</h2></div></div></div><pre class="literallayout">void
+ao_usb_enable(void);</pre><p>This turns the USB controller on again after it has
+been 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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_usb_init"></a>9.7. ao_usb_init</h2></div></div></div><pre class="literallayout">void
+ao_usb_init(void);</pre><p>This turns the USB controller on, adds a task to
+handle 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"><div class="titlepage"><div><div><h1 class="title"><a id="_serial_peripherals"></a>Chapter 10. Serial peripherals</h1></div></div></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 in 8-bits, no parity, 1 stop bit framing. The default
+configuration has clock settings for 4800, 9600 and 57600 baud
+operation. Additional speeds can be added by computing
+appropriate clock values.</p><p>To prevent loss of data, AltOS provides receive and transmit
+fifos of 32 characters each.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_serial_getchar"></a>10.1. ao_serial_getchar</h2></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_serial_putchar"></a>10.2. ao_serial_putchar</h2></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_serial_drain"></a>10.3. ao_serial_drain</h2></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_serial_set_speed"></a>10.4. ao_serial_set_speed</h2></div></div></div><pre class="literallayout">void
+ao_serial_set_speed(uint8_t speed);</pre><p>Changes the serial baud rate to one of
+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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_serial_init"></a>10.5. ao_serial_init</h2></div></div></div><pre class="literallayout">void
+ao_serial_init(void)</pre><p>Initializes the serial peripheral. Call this from <span class="emphasis"><em>main</em></span>
+before jumping to ao_start_scheduler. The default speed
+setting is AO_SERIAL_SPEED_4800.</p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_cc1111_cc1120_cc1200_radio_peripheral"></a>Chapter 11. CC1111/CC1120/CC1200 Radio peripheral</h1></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_radio_introduction"></a>11.1. Radio Introduction</h2></div></div></div><p>The CC1111, CC1120 and CC1200 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">
+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.
+</li><li class="listitem">
+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.
+</li></ol></div><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
+<span class="emphasis"><em>idle</em></span> 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><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+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.
+</li></ol></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_radio_set_telemetry"></a>11.2. ao_radio_set_telemetry</h2></div></div></div><pre class="literallayout">void
+ao_radio_set_telemetry(void);</pre><p>Configures the radio to send or receive telemetry
+packets. This includes packet length, modulation scheme and
+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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_radio_set_packet"></a>11.3. ao_radio_set_packet</h2></div></div></div><pre class="literallayout">void
+ao_radio_set_packet(void);</pre><p>Configures the radio to send or receive packet data.  This
+includes packet length, modulation scheme and 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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_radio_set_rdf"></a>11.4. ao_radio_set_rdf</h2></div></div></div><pre class="literallayout">void
+ao_radio_set_rdf(void);</pre><p>Configures the radio to send RDF <span class="emphasis"><em>packets</em></span>. An RDF <span class="emphasis"><em>packet</em></span>
+is a sequence of hex 0x55 bytes sent at a base bit rate of
+2kbps using a 5kHz deviation. All of the error correction
+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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_radio_idle"></a>11.5. ao_radio_idle</h2></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_radio_get"></a>11.6. ao_radio_get</h2></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_radio_put"></a>11.7. ao_radio_put</h2></div></div></div><pre class="literallayout">void
+ao_radio_put(void);</pre><p>Releases the radio mutex.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ao_radio_abort"></a>11.8. ao_radio_abort</h2></div></div></div><pre class="literallayout">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><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_radio_telemetry"></a>11.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 id="_ao_radio_send"></a>11.9.1. ao_radio_send</h3></div></div></div><pre class="literallayout">void
+ao_radio_send(__xdata struct ao_telemetry *telemetry);</pre><p>This sends the specific telemetry packet, waiting for the
+transmission to complete. The radio must have been set to
+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"><div class="titlepage"><div><div><h3 class="title"><a id="_ao_radio_recv"></a>11.9.2. ao_radio_recv</h3></div></div></div><pre class="literallayout">void
+ao_radio_recv(__xdata struct ao_radio_recv *radio);</pre><p>This blocks waiting for a telemetry packet to be received.
+The radio must have been set to telemetry mode. This
+function calls ao_radio_get() before receiving, and
+ao_radio_put() afterwards, to correctly serialize access
+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></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_radio_direction_finding"></a>11.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 id="_ao_radio_rdf"></a>11.10.1. ao_radio_rdf</h3></div></div></div><pre class="literallayout">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></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_radio_packet_mode"></a>11.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 id="_ao_packet_putchar"></a>11.11.1. ao_packet_putchar</h3></div></div></div><pre class="literallayout">void
+ao_packet_putchar(char c);</pre><p>If the output queue is full, this first blocks waiting for
+that data to be delivered. Then, queues a character for
+packet transmission. On the master side, this will
+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"><div class="titlepage"><div><div><h3 class="title"><a id="_ao_packet_pollchar"></a>11.11.2. ao_packet_pollchar</h3></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h3 class="title"><a id="_ao_packet_slave_start"></a>11.11.3. ao_packet_slave_start</h3></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h3 class="title"><a id="_ao_packet_slave_stop"></a>11.11.4. ao_packet_slave_stop</h3></div></div></div><pre class="literallayout">void
+ao_packet_slave_stop(void);</pre><p>Disables the packet slave task, stopping the radio receiver.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_ao_packet_slave_init"></a>11.11.5. ao_packet_slave_init</h3></div></div></div><pre class="literallayout">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"><div class="titlepage"><div><div><h3 class="title"><a id="_ao_packet_master_init"></a>11.11.6. ao_packet_master_init</h3></div></div></div><pre class="literallayout">void
+ao_packet_master_init(void);</pre><p>Adds the <span class="emphasis"><em>p</em></span> packet forward command to start packet mode.</p></div></div></div></div></body></html>
\ No newline at end of file
index a6bf9010eccf0ad3d7e472892bec5cd808c50cfc..36eca075271f3a6dc3f6af8fe65ef57fa67e49af 100644 (file)
Binary files a/AltOS/doc/altos.pdf and b/AltOS/doc/altos.pdf differ
index becc94b36ba2b03e0dc1ebfd4bf74f9734ba1eec..48b79637c3fae3170b3fe72b9d0ad60612002a15 100644 (file)
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Revision History</title><link rel="stylesheet" type="text/css" href="am.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /></head><body><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><strong>Revision History</strong></th></tr><tr><td align="left">Revision 1.8.3</td><td align="left">11 Dec 2017</td></tr><tr><td align="left" colspan="2">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Revision History</title><link rel="stylesheet" type="text/css" href="am.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /></head><body><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><strong>Revision History</strong></th></tr><tr><td align="left">Revision 1.8.4</td><td align="left">20 Dec 2017</td></tr><tr><td align="left" colspan="2">
+      Support EasyMini v2.0 hardware.
+    </td></tr><tr><td align="left">Revision 1.8.3</td><td align="left">11 Dec 2017</td></tr><tr><td align="left" colspan="2">
       Support TeleMega v3.0 hardware. Fix one firmware bug affecting
       all flight computers and another two affecting TeleMega and
       EasyMega. Several new AltosUI graphing features.
index ee9335427e69f0baeb5c68b22a40dc8131bdfff9..69e25f81721cd95a37d72759ad710cfa473cb5e7 100644 (file)
@@ -19,7 +19,7 @@ collaborators, and we certainly appreciate this level of
 contribution!</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="blockquote"><blockquote class="blockquote"><div class="literallayout"><p>Bdale Garbee, KB0G<br />
 NAR #87103, TRA #12201</p></div></blockquote></div><div class="blockquote"><blockquote class="blockquote"><div class="literallayout"><p>Keith Packard, KD7SQG<br />
-NAR #88757, TRA #12200</p></div></blockquote></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="#_introduction_and_overview">1. Introduction and Overview</a></span></dt><dt><span class="chapter"><a href="#_getting_started">2. Getting Started</a></span></dt><dd><dl><dt><span class="section"><a href="#_batteries">2.1. Batteries</a></span></dt><dt><span class="section"><a href="#_ground_station_hardware">2.2. Ground Station Hardware</a></span></dt><dt><span class="section"><a href="#_linux_mac_windows_ground_station_software">2.3. Linux/Mac/Windows Ground Station Software</a></span></dt><dt><span class="section"><a href="#_android_ground_station_software">2.4. Android Ground Station Software</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_using_altus_metrum_hardware">3. Using Altus Metrum Hardware</a></span></dt><dd><dl><dt><span class="section"><a href="#_wiring_and_electrical_interference">3.1. Wiring and Electrical Interference</a></span></dt><dt><span class="section"><a href="#_hooking_up_lithium_polymer_batteries">3.2. Hooking Up Lithium Polymer Batteries</a></span></dt><dt><span class="section"><a href="#_hooking_up_pyro_charges">3.3. Hooking Up Pyro Charges</a></span></dt><dt><span class="section"><a href="#_hooking_up_a_power_switch">3.4. Hooking Up a Power Switch</a></span></dt><dt><span class="section"><a href="#_understanding_beeps">3.5. Understanding Beeps</a></span></dt><dt><span class="section"><a href="#_turning_on_the_power">3.6. Turning On the Power</a></span></dt><dt><span class="section"><a href="#_using_an_external_active_switch_circuit">3.7. Using an External Active Switch Circuit</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery">3.8. Using a Separate Pyro Battery</a></span></dt><dt><span class="section"><a href="#_using_a_different_kind_of_battery">3.9. Using a Different Kind of Battery</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_telemetrum">4. TeleMetrum</a></span></dt><dd><dl><dt><span class="section"><a href="#_telemetrum_screw_terminals">4.1. TeleMetrum Screw Terminals</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery_with_telemetrum">4.2. Using a Separate Pyro Battery with TeleMetrum</a></span></dt><dt><span class="section"><a href="#_using_an_active_switch_with_telemetrum">4.3. Using an Active Switch with TeleMetrum</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_telemini">5. TeleMini</a></span></dt><dd><dl><dt><span class="section"><a href="#_telemini_v3_screw_terminals">5.1. TeleMini v3 Screw Terminals</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery_with_telemini_v3">5.2. Using a Separate Pyro Battery with TeleMini v3</a></span></dt><dt><span class="section"><a href="#_using_an_active_switch_with_telemini_v3">5.3. Using an Active Switch with TeleMini v3</a></span></dt><dt><span class="section"><a href="#_telemini_v1">5.4. TeleMini v1</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_easymini">6. EasyMini</a></span></dt><dd><dl><dt><span class="section"><a href="#_easymini_screw_terminals">6.1. EasyMini Screw Terminals</a></span></dt><dt><span class="section"><a href="#_connecting_a_battery_to_easymini">6.2. Connecting A Battery To EasyMini</a></span></dt><dt><span class="section"><a href="#_charging_lithium_batteries">6.3. Charging Lithium Batteries</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery_with_easymini">6.4. Using a Separate Pyro Battery with EasyMini</a></span></dt><dt><span class="section"><a href="#_using_an_active_switch_with_easymini">6.5. Using an Active Switch with EasyMini</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_telemega">7. TeleMega</a></span></dt><dd><dl><dt><span class="section"><a href="#_telemega_screw_terminals">7.1. TeleMega Screw Terminals</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery_with_telemega">7.2. Using a Separate Pyro Battery with TeleMega</a></span></dt><dt><span class="section"><a href="#_using_only_one_battery_with_telemega">7.3. Using Only One Battery With TeleMega</a></span></dt><dt><span class="section"><a href="#_using_an_active_switch_with_telemega">7.4. Using an Active Switch with TeleMega</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_easymega">8. EasyMega</a></span></dt><dd><dl><dt><span class="section"><a href="#_easymega_screw_terminals">8.1. EasyMega Screw Terminals</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery_with_easymega">8.2. Using a Separate Pyro Battery with EasyMega</a></span></dt><dt><span class="section"><a href="#_using_only_one_battery_with_easymega">8.3. Using Only One Battery With EasyMega</a></span></dt><dt><span class="section"><a href="#_using_an_active_switch_with_easymega">8.4. Using an Active Switch with EasyMega</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_installation">9. Installation</a></span></dt><dt><span class="chapter"><a href="#_using_altus_metrum_products">10. Using Altus Metrum Products</a></span></dt><dd><dl><dt><span class="section"><a href="#_being_legal">10.1. Being Legal</a></span></dt><dt><span class="section"><a href="#_in_the_rocket">10.2. In the Rocket</a></span></dt><dt><span class="section"><a href="#_on_the_ground">10.3. On the Ground</a></span></dt><dt><span class="section"><a href="#_data_analysis">10.4. Data Analysis</a></span></dt><dt><span class="section"><a href="#_future_plans">10.5. Future Plans</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_altosui">11. AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#_monitor_flight">11.1. Monitor Flight</a></span></dt><dd><dl><dt><span class="section"><a href="#_launch_pad">11.1.1. Launch Pad</a></span></dt><dt><span class="section"><a href="#_ascent">11.1.2. Ascent</a></span></dt><dt><span class="section"><a href="#_descent">11.1.3. Descent</a></span></dt><dt><span class="section"><a href="#_landed">11.1.4. Landed</a></span></dt><dt><span class="section"><a href="#_table">11.1.5. Table</a></span></dt><dt><span class="section"><a href="#_site_map">11.1.6. Site Map</a></span></dt><dt><span class="section"><a href="#_igniter">11.1.7. Igniter</a></span></dt></dl></dd><dt><span class="section"><a href="#_save_flight_data">11.2. Save Flight Data</a></span></dt><dt><span class="section"><a href="#_replay_flight">11.3. Replay Flight</a></span></dt><dt><span class="section"><a href="#_graph_data">11.4. Graph Data</a></span></dt><dd><dl><dt><span class="section"><a href="#_flight_graph">11.4.1. Flight Graph</a></span></dt><dt><span class="section"><a href="#_configure_graph">11.4.2. Configure Graph</a></span></dt><dt><span class="section"><a href="#_flight_statistics">11.4.3. Flight Statistics</a></span></dt><dt><span class="section"><a href="#_map">11.4.4. Map</a></span></dt></dl></dd><dt><span class="section"><a href="#_export_data">11.5. Export Data</a></span></dt><dd><dl><dt><span class="section"><a href="#_comma_separated_value_format">11.5.1. Comma Separated Value Format</a></span></dt><dt><span class="section"><a href="#_keyhole_markup_language_for_google_earth">11.5.2. Keyhole Markup Language (for Google Earth)</a></span></dt></dl></dd><dt><span class="section"><a href="#_configure_altimeter">11.6. Configure Altimeter</a></span></dt><dd><dl><dt><span class="section"><a href="#_main_deploy_altitude">11.6.1. Main Deploy Altitude</a></span></dt><dt><span class="section"><a href="#_apogee_delay">11.6.2. Apogee Delay</a></span></dt><dt><span class="section"><a href="#_apogee_lockout">11.6.3. Apogee Lockout</a></span></dt><dt><span class="section"><a href="#_frequency">11.6.4. Frequency</a></span></dt><dt><span class="section"><a href="#_rf_calibration">11.6.5. RF Calibration</a></span></dt><dt><span class="section"><a href="#_telemetry_rdf_aprs_enable">11.6.6. Telemetry/RDF/APRS Enable</a></span></dt><dt><span class="section"><a href="#_telemetry_baud_rate">11.6.7. Telemetry baud rate</a></span></dt><dt><span class="section"><a href="#_aprs_interval">11.6.8. APRS Interval</a></span></dt><dt><span class="section"><a href="#_aprs_ssid">11.6.9. APRS SSID</a></span></dt><dt><span class="section"><a href="#_aprs_format">11.6.10. APRS Format</a></span></dt><dt><span class="section"><a href="#_callsign">11.6.11. Callsign</a></span></dt><dt><span class="section"><a href="#_maximum_flight_log_size">11.6.12. Maximum Flight Log Size</a></span></dt><dt><span class="section"><a href="#_ignitor_firing_mode">11.6.13. Ignitor Firing Mode</a></span></dt><dt><span class="section"><a href="#_pad_orientation">11.6.14. Pad Orientation</a></span></dt><dt><span class="section"><a href="#_beeper_frequency">11.6.15. Beeper Frequency</a></span></dt><dt><span class="section"><a href="#_logging_trigger_motion">11.6.16. Logging Trigger Motion</a></span></dt><dt><span class="section"><a href="#_position_reporting_interval">11.6.17. Position Reporting Interval</a></span></dt><dt><span class="section"><a href="#_calibrate_accelerometer">11.6.18. Calibrate Accelerometer</a></span></dt><dt><span class="section"><a href="#_configure_pyro_channels">11.6.19. Configure Pyro Channels</a></span></dt></dl></dd><dt><span class="section"><a href="#_configure_altosui">11.7. Configure AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#_voice_settings">11.7.1. Voice Settings</a></span></dt><dt><span class="section"><a href="#_log_directory">11.7.2. Log Directory</a></span></dt><dt><span class="section"><a href="#_callsign_2">11.7.3. Callsign</a></span></dt><dt><span class="section"><a href="#_imperial_units">11.7.4. Imperial Units</a></span></dt><dt><span class="section"><a href="#_serial_debug">11.7.5. Serial Debug</a></span></dt><dt><span class="section"><a href="#_font_size">11.7.6. Font size</a></span></dt><dt><span class="section"><a href="#_look_amp_feel">11.7.7. Look &amp; feel</a></span></dt><dt><span class="section"><a href="#_menu_position">11.7.8. Menu position</a></span></dt><dt><span class="section"><a href="#_map_cache_size">11.7.9. Map Cache Size</a></span></dt><dt><span class="section"><a href="#_manage_frequencies">11.7.10. Manage Frequencies</a></span></dt></dl></dd><dt><span class="section"><a href="#_configure_groundstation">11.8. Configure Groundstation</a></span></dt><dd><dl><dt><span class="section"><a href="#_frequency_2">11.8.1. Frequency</a></span></dt><dt><span class="section"><a href="#_rf_calibration_2">11.8.2. RF Calibration</a></span></dt><dt><span class="section"><a href="#_telemetry_rate">11.8.3. Telemetry Rate</a></span></dt></dl></dd><dt><span class="section"><a href="#_flash_image">11.9. Flash Image</a></span></dt><dt><span class="section"><a href="#_fire_igniter">11.10. Fire Igniter</a></span></dt><dt><span class="section"><a href="#_scan_channels">11.11. Scan Channels</a></span></dt><dt><span class="section"><a href="#_load_maps">11.12. Load Maps</a></span></dt><dt><span class="section"><a href="#_monitor_idle">11.13. Monitor Idle</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_altosdroid">12. AltosDroid</a></span></dt><dd><dl><dt><span class="section"><a href="#_installing_altosdroid">12.1. Installing AltosDroid</a></span></dt><dt><span class="section"><a href="#_charging_telebt_battery">12.2. Charging TeleBT Battery</a></span></dt><dt><span class="section"><a href="#_connecting_to_telebt_over_bluetooth">12.3. Connecting to TeleBT over Bluetooth™</a></span></dt><dt><span class="section"><a href="#_connecting_to_teledongle_or_telebt_over_usb">12.4. Connecting to TeleDongle or TeleBT over USB</a></span></dt><dt><span class="section"><a href="#_altosdroid_menu">12.5. AltosDroid Menu</a></span></dt><dt><span class="section"><a href="#_setup">12.6. Setup</a></span></dt><dt><span class="section"><a href="#_idle_mode">12.7. Idle Mode</a></span></dt><dt><span class="section"><a href="#_altosdroid_flight_monitoring">12.8. AltosDroid Flight Monitoring</a></span></dt><dt><span class="section"><a href="#_pad">12.9. Pad</a></span></dt><dt><span class="section"><a href="#_flight">12.10. Flight</a></span></dt><dt><span class="section"><a href="#_recover">12.11. Recover</a></span></dt><dt><span class="section"><a href="#_map_2">12.12. Map</a></span></dt><dt><span class="section"><a href="#_downloading_flight_logs">12.13. Downloading Flight Logs</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_system_operation">A. System Operation</a></span></dt><dd><dl><dt><span class="section"><a href="#_firmware_modes">A.1. Firmware Modes</a></span></dt><dt><span class="section"><a href="#_gps">A.2. GPS</a></span></dt><dt><span class="section"><a href="#_controlling_an_altimeter_over_the_radio_link">A.3. Controlling An Altimeter Over The Radio Link</a></span></dt><dt><span class="section"><a href="#_ground_testing">A.4. Ground Testing</a></span></dt><dt><span class="section"><a href="#_radio_link">A.5. Radio Link</a></span></dt><dt><span class="section"><a href="#_aprs">A.6. APRS</a></span></dt><dt><span class="section"><a href="#_configurable_parameters">A.7. Configurable Parameters</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_handling_precautions">B. Handling Precautions</a></span></dt><dt><span class="appendix"><a href="#_updating_device_firmware">C. Updating Device Firmware</a></span></dt><dd><dl><dt><span class="section"><a href="#_updating_telemega_telemetrum_v2_easymega_easymini_or_teledongle_v3_firmware">C.1. Updating TeleMega, TeleMetrum v2, EasyMega, EasyMini or TeleDongle v3 Firmware</a></span></dt><dd><dl><dt><span class="section"><a href="#_recovering_from_self_flashing_failure">C.1.1. Recovering From Self-Flashing Failure</a></span></dt></dl></dd><dt><span class="section"><a href="#_pair_programming">C.2. Pair Programming</a></span></dt><dd><dl><dt><span class="section"><a href="#_updating_telemetrum_v1_x_firmware">C.2.1. Updating TeleMetrum v1.x Firmware</a></span></dt><dt><span class="section"><a href="#_updating_telemini_v1_0_firmware">C.2.2. Updating TeleMini v1.0 Firmware</a></span></dt><dt><span class="section"><a href="#_updating_teledongle_v0_2_firmware">C.2.3. Updating TeleDongle v0.2 Firmware</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="#_flight_data_recording">D. Flight Data Recording</a></span></dt><dt><span class="appendix"><a href="#_altus_metrum_hardware_specifications">E. Altus Metrum Hardware Specifications</a></span></dt><dt><span class="appendix"><a href="#_release_notes">F. Release Notes</a></span></dt><dd><dl><dt><span class="section"><a href="#_release_notes_for_version_1_8_3">F.1. Release Notes for Version 1.8.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos">F.1.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications">F.1.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_2">F.2. Release Notes for Version 1.8.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_2">F.2.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_2">F.2.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_1">F.3. Release Notes for Version 1.8.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_3">F.3.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_3">F.3.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8">F.4. Release Notes for Version 1.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_4">F.4.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_4">F.4.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_7">F.5. Release Notes for Version 1.7</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_5">F.5.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_5">F.5.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_8">F.6. Release Notes for Version 1.6.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_6">F.6.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications">F.6.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_5">F.7. Release Notes for Version 1.6.5</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_7">F.7.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications_2">F.7.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_4">F.8. Release Notes for Version 1.6.4</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_8">F.8.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications_3">F.8.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt><dt><span class="section"><a href="#_documentation">F.8.3. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_3">F.9. Release Notes for Version 1.6.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_9">F.9.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_6">F.9.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_altosdroid_2">F.9.3. AltosDroid</a></span></dt><dt><span class="section"><a href="#_documentation_2">F.9.4. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_2">F.10. Release Notes for Version 1.6.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_10">F.10.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_7">F.10.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_documentation_3">F.10.3. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_1">F.11. Release Notes for Version 1.6.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_11">F.11.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_8">F.11.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_altosdroid_3">F.11.3. AltosDroid</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6">F.12. Release Notes for Version 1.6</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_12">F.12.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_9">F.12.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_5">F.13. Release Notes for Version 1.5</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_13">F.13.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_10">F.13.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_4_2">F.14. Release Notes for Version 1.4.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_and_telegps_applications_11">F.14.1. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_4_1">F.15. Release Notes for Version 1.4.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_and_telegps_applications_12">F.15.1. AltosUI and TeleGPS Applications:</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_4">F.16. Release Notes for Version 1.4</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_14">F.16.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application">F.16.2. AltosUI Application</a></span></dt><dt><span class="section"><a href="#_telegps_application">F.16.3. TeleGPS Application</a></span></dt><dt><span class="section"><a href="#_documentation_4">F.16.4. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_3_2">F.17. Release Notes for Version 1.3.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_15">F.17.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application_2">F.17.2. AltosUI Application</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_3_1">F.18. Release Notes for Version 1.3.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_16">F.18.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application_3">F.18.2. AltosUI Application</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_3">F.19. Release Notes for Version 1.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_17">F.19.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application_4">F.19.2. AltosUI Application</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_2_1">F.20. Release Notes for Version 1.2.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_18">F.20.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application_5">F.20.2. AltosUI Application</a></span></dt><dt><span class="section"><a href="#_altosdroid_4">F.20.3. AltosDroid</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_2">F.21. Release Notes for Version 1.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_19">F.21.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_micropeak_application">F.21.2. AltosUI and MicroPeak Application</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_1">F.22. Release Notes for Version 1.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_20">F.22.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_2">F.22.2. AltosUI</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_1_2">F.23. Release Notes for Version 1.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_21">F.23.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_3">F.23.2. AltosUI</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_0_1">F.24. Release Notes for Version 1.0.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_22">F.24.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application_6">F.24.2. AltosUI Application</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_0_9_2">F.25. Release Notes for Version 0.9.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_4">F.25.1. AltosUI</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_0_9">F.26. Release Notes for Version 0.9</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_23">F.26.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application_7">F.26.2. AltosUI Application</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_0_8">F.27. Release Notes for Version 0.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_application_8">F.27.1. AltosUI Application:</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_0_7_1">F.28. Release Notes for Version 0.7.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_application_9">F.28.1. AltosUI Application</a></span></dt></dl></dd></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>4.1. <a href="#idm446">TeleMetrum v2 Board</a></dt><dt>4.2. <a href="#idm453">TeleMetrum v1 Board</a></dt><dt>5.1. <a href="#idm539">TeleMini v3 Board</a></dt><dt>5.2. <a href="#idm623">TeleMini v1 Board</a></dt><dt>6.1. <a href="#idm632">EasyMini Board</a></dt><dt>7.1. <a href="#idm734">TeleMega Board</a></dt><dt>8.1. <a href="#idm904">EasyMega Board</a></dt><dt>11.1. <a href="#idm1122">AltosUI Main Window</a></dt><dt>11.2. <a href="#idm1133">Device Selection Dialog</a></dt><dt>11.3. <a href="#idm1161">Monitor Flight Launch Pad View</a></dt><dt>11.4. <a href="#idm1201">Monitor Flight Ascent View</a></dt><dt>11.5. <a href="#idm1214">Monitor Flight Descent View</a></dt><dt>11.6. <a href="#idm1227">Monitor Flight Landed View</a></dt><dt>11.7. <a href="#idm1242">Monitor Flight Table View</a></dt><dt>11.8. <a href="#idm1252">Monitor Flight Site Map View</a></dt><dt>11.9. <a href="#idm1267">Monitor Flight Additional Igniter View</a></dt><dt>11.10. <a href="#idm1297">Flight Data Graph</a></dt><dt>11.11. <a href="#idm1308">Flight Graph Configuration</a></dt><dt>11.12. <a href="#idm1327">Flight Statistics</a></dt><dt>11.13. <a href="#idm1337">Flight Map</a></dt><dt>11.14. <a href="#idm1358">Altimeter Configuration</a></dt><dt>11.15. <a href="#idm1474">Additional Pyro Channel Configuration</a></dt><dt>11.16. <a href="#idm1551">Configure AltosUI Dialog</a></dt><dt>11.17. <a href="#idm1604">Configure Groundstation Dialog</a></dt><dt>11.18. <a href="#idm1644">Fire Igniter Window</a></dt><dt>11.19. <a href="#idm1663">Scan Channels Window</a></dt><dt>11.20. <a href="#idm1673">Load Maps Window</a></dt><dt>11.21. <a href="#idm1706">Monitor Idle Window</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>3.1. <a href="#idm208">AltOS Modes</a></dt><dt>3.2. <a href="#idm316">Pad/Idle Indications</a></dt><dt>3.3. <a href="#idm371">Pad Radio Indications</a></dt><dt>4.1. <a href="#idm473">TeleMetrum Screw Terminals</a></dt><dt>5.1. <a href="#idm556">TeleMini v3 Screw Terminals</a></dt><dt>6.1. <a href="#idm644">EasyMini Screw Terminals</a></dt><dt>7.1. <a href="#idm754">TeleMega Screw Terminals</a></dt><dt>8.1. <a href="#idm915">EasyMega Screw Terminals</a></dt><dt>A.1. <a href="#idm2042">Altus Metrum APRS Comments</a></dt><dt>D.1. <a href="#idm2293">Data Storage on Altus Metrum altimeters</a></dt><dt>E.1. <a href="#idm2388">Altus Metrum Flight Computer Electronics</a></dt><dt>E.2. <a href="#idm2581">Altus Metrum Flight Computer Mechanical Components</a></dt></dl></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_introduction_and_overview"></a>Chapter 1. Introduction and Overview</h1></div></div></div><p>Welcome to the Altus Metrum community!  Our circuits and software reflect
+NAR #88757, TRA #12200</p></div></blockquote></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="#_introduction_and_overview">1. Introduction and Overview</a></span></dt><dt><span class="chapter"><a href="#_getting_started">2. Getting Started</a></span></dt><dd><dl><dt><span class="section"><a href="#_batteries">2.1. Batteries</a></span></dt><dt><span class="section"><a href="#_ground_station_hardware">2.2. Ground Station Hardware</a></span></dt><dt><span class="section"><a href="#_linux_mac_windows_ground_station_software">2.3. Linux/Mac/Windows Ground Station Software</a></span></dt><dt><span class="section"><a href="#_android_ground_station_software">2.4. Android Ground Station Software</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_using_altus_metrum_hardware">3. Using Altus Metrum Hardware</a></span></dt><dd><dl><dt><span class="section"><a href="#_wiring_and_electrical_interference">3.1. Wiring and Electrical Interference</a></span></dt><dt><span class="section"><a href="#_hooking_up_lithium_polymer_batteries">3.2. Hooking Up Lithium Polymer Batteries</a></span></dt><dt><span class="section"><a href="#_hooking_up_pyro_charges">3.3. Hooking Up Pyro Charges</a></span></dt><dt><span class="section"><a href="#_hooking_up_a_power_switch">3.4. Hooking Up a Power Switch</a></span></dt><dt><span class="section"><a href="#_understanding_beeps">3.5. Understanding Beeps</a></span></dt><dt><span class="section"><a href="#_turning_on_the_power">3.6. Turning On the Power</a></span></dt><dt><span class="section"><a href="#_using_an_external_active_switch_circuit">3.7. Using an External Active Switch Circuit</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery">3.8. Using a Separate Pyro Battery</a></span></dt><dt><span class="section"><a href="#_using_a_different_kind_of_battery">3.9. Using a Different Kind of Battery</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_telemetrum">4. TeleMetrum</a></span></dt><dd><dl><dt><span class="section"><a href="#_telemetrum_screw_terminals">4.1. TeleMetrum Screw Terminals</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery_with_telemetrum">4.2. Using a Separate Pyro Battery with TeleMetrum</a></span></dt><dt><span class="section"><a href="#_using_an_active_switch_with_telemetrum">4.3. Using an Active Switch with TeleMetrum</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_telemini">5. TeleMini</a></span></dt><dd><dl><dt><span class="section"><a href="#_telemini_v3_screw_terminals">5.1. TeleMini v3 Screw Terminals</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery_with_telemini_v3">5.2. Using a Separate Pyro Battery with TeleMini v3</a></span></dt><dt><span class="section"><a href="#_using_an_active_switch_with_telemini_v3">5.3. Using an Active Switch with TeleMini v3</a></span></dt><dt><span class="section"><a href="#_telemini_v1">5.4. TeleMini v1</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_easymini">6. EasyMini</a></span></dt><dd><dl><dt><span class="section"><a href="#_easymini_screw_terminals">6.1. EasyMini Screw Terminals</a></span></dt><dt><span class="section"><a href="#_connecting_a_battery_to_easymini">6.2. Connecting A Battery To EasyMini</a></span></dt><dt><span class="section"><a href="#_charging_lithium_batteries">6.3. Charging Lithium Batteries</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery_with_easymini">6.4. Using a Separate Pyro Battery with EasyMini</a></span></dt><dt><span class="section"><a href="#_using_an_active_switch_with_easymini">6.5. Using an Active Switch with EasyMini</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_telemega">7. TeleMega</a></span></dt><dd><dl><dt><span class="section"><a href="#_telemega_screw_terminals">7.1. TeleMega Screw Terminals</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery_with_telemega">7.2. Using a Separate Pyro Battery with TeleMega</a></span></dt><dt><span class="section"><a href="#_using_only_one_battery_with_telemega">7.3. Using Only One Battery With TeleMega</a></span></dt><dt><span class="section"><a href="#_using_an_active_switch_with_telemega">7.4. Using an Active Switch with TeleMega</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_easymega">8. EasyMega</a></span></dt><dd><dl><dt><span class="section"><a href="#_easymega_screw_terminals">8.1. EasyMega Screw Terminals</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery_with_easymega">8.2. Using a Separate Pyro Battery with EasyMega</a></span></dt><dt><span class="section"><a href="#_using_only_one_battery_with_easymega">8.3. Using Only One Battery With EasyMega</a></span></dt><dt><span class="section"><a href="#_using_an_active_switch_with_easymega">8.4. Using an Active Switch with EasyMega</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_installation">9. Installation</a></span></dt><dt><span class="chapter"><a href="#_using_altus_metrum_products">10. Using Altus Metrum Products</a></span></dt><dd><dl><dt><span class="section"><a href="#_being_legal">10.1. Being Legal</a></span></dt><dt><span class="section"><a href="#_in_the_rocket">10.2. In the Rocket</a></span></dt><dt><span class="section"><a href="#_on_the_ground">10.3. On the Ground</a></span></dt><dt><span class="section"><a href="#_data_analysis">10.4. Data Analysis</a></span></dt><dt><span class="section"><a href="#_future_plans">10.5. Future Plans</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_altosui">11. AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#_monitor_flight">11.1. Monitor Flight</a></span></dt><dd><dl><dt><span class="section"><a href="#_launch_pad">11.1.1. Launch Pad</a></span></dt><dt><span class="section"><a href="#_ascent">11.1.2. Ascent</a></span></dt><dt><span class="section"><a href="#_descent">11.1.3. Descent</a></span></dt><dt><span class="section"><a href="#_landed">11.1.4. Landed</a></span></dt><dt><span class="section"><a href="#_table">11.1.5. Table</a></span></dt><dt><span class="section"><a href="#_site_map">11.1.6. Site Map</a></span></dt><dt><span class="section"><a href="#_igniter">11.1.7. Igniter</a></span></dt></dl></dd><dt><span class="section"><a href="#_save_flight_data">11.2. Save Flight Data</a></span></dt><dt><span class="section"><a href="#_replay_flight">11.3. Replay Flight</a></span></dt><dt><span class="section"><a href="#_graph_data">11.4. Graph Data</a></span></dt><dd><dl><dt><span class="section"><a href="#_flight_graph">11.4.1. Flight Graph</a></span></dt><dt><span class="section"><a href="#_configure_graph">11.4.2. Configure Graph</a></span></dt><dt><span class="section"><a href="#_flight_statistics">11.4.3. Flight Statistics</a></span></dt><dt><span class="section"><a href="#_map">11.4.4. Map</a></span></dt></dl></dd><dt><span class="section"><a href="#_export_data">11.5. Export Data</a></span></dt><dd><dl><dt><span class="section"><a href="#_comma_separated_value_format">11.5.1. Comma Separated Value Format</a></span></dt><dt><span class="section"><a href="#_keyhole_markup_language_for_google_earth">11.5.2. Keyhole Markup Language (for Google Earth)</a></span></dt></dl></dd><dt><span class="section"><a href="#_configure_altimeter">11.6. Configure Altimeter</a></span></dt><dd><dl><dt><span class="section"><a href="#_main_deploy_altitude">11.6.1. Main Deploy Altitude</a></span></dt><dt><span class="section"><a href="#_apogee_delay">11.6.2. Apogee Delay</a></span></dt><dt><span class="section"><a href="#_apogee_lockout">11.6.3. Apogee Lockout</a></span></dt><dt><span class="section"><a href="#_frequency">11.6.4. Frequency</a></span></dt><dt><span class="section"><a href="#_rf_calibration">11.6.5. RF Calibration</a></span></dt><dt><span class="section"><a href="#_telemetry_rdf_aprs_enable">11.6.6. Telemetry/RDF/APRS Enable</a></span></dt><dt><span class="section"><a href="#_telemetry_baud_rate">11.6.7. Telemetry baud rate</a></span></dt><dt><span class="section"><a href="#_aprs_interval">11.6.8. APRS Interval</a></span></dt><dt><span class="section"><a href="#_aprs_ssid">11.6.9. APRS SSID</a></span></dt><dt><span class="section"><a href="#_aprs_format">11.6.10. APRS Format</a></span></dt><dt><span class="section"><a href="#_callsign">11.6.11. Callsign</a></span></dt><dt><span class="section"><a href="#_maximum_flight_log_size">11.6.12. Maximum Flight Log Size</a></span></dt><dt><span class="section"><a href="#_ignitor_firing_mode">11.6.13. Ignitor Firing Mode</a></span></dt><dt><span class="section"><a href="#_pad_orientation">11.6.14. Pad Orientation</a></span></dt><dt><span class="section"><a href="#_beeper_frequency">11.6.15. Beeper Frequency</a></span></dt><dt><span class="section"><a href="#_logging_trigger_motion">11.6.16. Logging Trigger Motion</a></span></dt><dt><span class="section"><a href="#_position_reporting_interval">11.6.17. Position Reporting Interval</a></span></dt><dt><span class="section"><a href="#_calibrate_accelerometer">11.6.18. Calibrate Accelerometer</a></span></dt><dt><span class="section"><a href="#_configure_pyro_channels">11.6.19. Configure Pyro Channels</a></span></dt></dl></dd><dt><span class="section"><a href="#_configure_altosui">11.7. Configure AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#_voice_settings">11.7.1. Voice Settings</a></span></dt><dt><span class="section"><a href="#_log_directory">11.7.2. Log Directory</a></span></dt><dt><span class="section"><a href="#_callsign_2">11.7.3. Callsign</a></span></dt><dt><span class="section"><a href="#_imperial_units">11.7.4. Imperial Units</a></span></dt><dt><span class="section"><a href="#_serial_debug">11.7.5. Serial Debug</a></span></dt><dt><span class="section"><a href="#_font_size">11.7.6. Font size</a></span></dt><dt><span class="section"><a href="#_look_amp_feel">11.7.7. Look &amp; feel</a></span></dt><dt><span class="section"><a href="#_menu_position">11.7.8. Menu position</a></span></dt><dt><span class="section"><a href="#_map_cache_size">11.7.9. Map Cache Size</a></span></dt><dt><span class="section"><a href="#_manage_frequencies">11.7.10. Manage Frequencies</a></span></dt></dl></dd><dt><span class="section"><a href="#_configure_groundstation">11.8. Configure Groundstation</a></span></dt><dd><dl><dt><span class="section"><a href="#_frequency_2">11.8.1. Frequency</a></span></dt><dt><span class="section"><a href="#_rf_calibration_2">11.8.2. RF Calibration</a></span></dt><dt><span class="section"><a href="#_telemetry_rate">11.8.3. Telemetry Rate</a></span></dt></dl></dd><dt><span class="section"><a href="#_flash_image">11.9. Flash Image</a></span></dt><dt><span class="section"><a href="#_fire_igniter">11.10. Fire Igniter</a></span></dt><dt><span class="section"><a href="#_scan_channels">11.11. Scan Channels</a></span></dt><dt><span class="section"><a href="#_load_maps">11.12. Load Maps</a></span></dt><dt><span class="section"><a href="#_monitor_idle">11.13. Monitor Idle</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_altosdroid">12. AltosDroid</a></span></dt><dd><dl><dt><span class="section"><a href="#_installing_altosdroid">12.1. Installing AltosDroid</a></span></dt><dt><span class="section"><a href="#_charging_telebt_battery">12.2. Charging TeleBT Battery</a></span></dt><dt><span class="section"><a href="#_connecting_to_telebt_over_bluetooth">12.3. Connecting to TeleBT over Bluetooth™</a></span></dt><dt><span class="section"><a href="#_connecting_to_teledongle_or_telebt_over_usb">12.4. Connecting to TeleDongle or TeleBT over USB</a></span></dt><dt><span class="section"><a href="#_altosdroid_menu">12.5. AltosDroid Menu</a></span></dt><dt><span class="section"><a href="#_setup">12.6. Setup</a></span></dt><dt><span class="section"><a href="#_idle_mode">12.7. Idle Mode</a></span></dt><dt><span class="section"><a href="#_altosdroid_flight_monitoring">12.8. AltosDroid Flight Monitoring</a></span></dt><dt><span class="section"><a href="#_pad">12.9. Pad</a></span></dt><dt><span class="section"><a href="#_flight">12.10. Flight</a></span></dt><dt><span class="section"><a href="#_recover">12.11. Recover</a></span></dt><dt><span class="section"><a href="#_map_2">12.12. Map</a></span></dt><dt><span class="section"><a href="#_downloading_flight_logs">12.13. Downloading Flight Logs</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_system_operation">A. System Operation</a></span></dt><dd><dl><dt><span class="section"><a href="#_firmware_modes">A.1. Firmware Modes</a></span></dt><dt><span class="section"><a href="#_gps">A.2. GPS</a></span></dt><dt><span class="section"><a href="#_controlling_an_altimeter_over_the_radio_link">A.3. Controlling An Altimeter Over The Radio Link</a></span></dt><dt><span class="section"><a href="#_ground_testing">A.4. Ground Testing</a></span></dt><dt><span class="section"><a href="#_radio_link">A.5. Radio Link</a></span></dt><dt><span class="section"><a href="#_aprs">A.6. APRS</a></span></dt><dt><span class="section"><a href="#_configurable_parameters">A.7. Configurable Parameters</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_handling_precautions">B. Handling Precautions</a></span></dt><dt><span class="appendix"><a href="#_updating_device_firmware">C. Updating Device Firmware</a></span></dt><dd><dl><dt><span class="section"><a href="#_updating_telemega_telemetrum_v2_easymega_easymini_or_teledongle_v3_firmware">C.1. Updating TeleMega, TeleMetrum v2, EasyMega, EasyMini or TeleDongle v3 Firmware</a></span></dt><dd><dl><dt><span class="section"><a href="#_recovering_from_self_flashing_failure">C.1.1. Recovering From Self-Flashing Failure</a></span></dt></dl></dd><dt><span class="section"><a href="#_pair_programming">C.2. Pair Programming</a></span></dt><dd><dl><dt><span class="section"><a href="#_updating_telemetrum_v1_x_firmware">C.2.1. Updating TeleMetrum v1.x Firmware</a></span></dt><dt><span class="section"><a href="#_updating_telemini_v1_0_firmware">C.2.2. Updating TeleMini v1.0 Firmware</a></span></dt><dt><span class="section"><a href="#_updating_teledongle_v0_2_firmware">C.2.3. Updating TeleDongle v0.2 Firmware</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="#_flight_data_recording">D. Flight Data Recording</a></span></dt><dt><span class="appendix"><a href="#_altus_metrum_hardware_specifications">E. Altus Metrum Hardware Specifications</a></span></dt><dt><span class="appendix"><a href="#_release_notes">F. Release Notes</a></span></dt><dd><dl><dt><span class="section"><a href="#_release_notes_for_version_1_8_4">F.1. Release Notes for Version 1.8.4</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos">F.1.1. AltOS</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_3">F.2. Release Notes for Version 1.8.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_2">F.2.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications">F.2.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_2">F.3. Release Notes for Version 1.8.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_3">F.3.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_2">F.3.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_1">F.4. Release Notes for Version 1.8.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_4">F.4.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_3">F.4.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8">F.5. Release Notes for Version 1.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_5">F.5.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_4">F.5.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_7">F.6. Release Notes for Version 1.7</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_6">F.6.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_5">F.6.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_8">F.7. Release Notes for Version 1.6.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_7">F.7.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications">F.7.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_5">F.8. Release Notes for Version 1.6.5</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_8">F.8.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications_2">F.8.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_4">F.9. Release Notes for Version 1.6.4</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_9">F.9.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications_3">F.9.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt><dt><span class="section"><a href="#_documentation">F.9.3. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_3">F.10. Release Notes for Version 1.6.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_10">F.10.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_6">F.10.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_altosdroid_2">F.10.3. AltosDroid</a></span></dt><dt><span class="section"><a href="#_documentation_2">F.10.4. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_2">F.11. Release Notes for Version 1.6.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_11">F.11.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_7">F.11.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_documentation_3">F.11.3. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_1">F.12. Release Notes for Version 1.6.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_12">F.12.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_8">F.12.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_altosdroid_3">F.12.3. AltosDroid</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6">F.13. Release Notes for Version 1.6</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_13">F.13.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_9">F.13.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_5">F.14. Release Notes for Version 1.5</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_14">F.14.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_10">F.14.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_4_2">F.15. Release Notes for Version 1.4.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_and_telegps_applications_11">F.15.1. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_4_1">F.16. Release Notes for Version 1.4.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_and_telegps_applications_12">F.16.1. AltosUI and TeleGPS Applications:</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_4">F.17. Release Notes for Version 1.4</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_15">F.17.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application">F.17.2. AltosUI Application</a></span></dt><dt><span class="section"><a href="#_telegps_application">F.17.3. TeleGPS Application</a></span></dt><dt><span class="section"><a href="#_documentation_4">F.17.4. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_3_2">F.18. Release Notes for Version 1.3.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_16">F.18.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application_2">F.18.2. AltosUI Application</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_3_1">F.19. Release Notes for Version 1.3.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_17">F.19.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application_3">F.19.2. AltosUI Application</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_3">F.20. Release Notes for Version 1.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_18">F.20.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application_4">F.20.2. AltosUI Application</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_2_1">F.21. Release Notes for Version 1.2.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_19">F.21.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application_5">F.21.2. AltosUI Application</a></span></dt><dt><span class="section"><a href="#_altosdroid_4">F.21.3. AltosDroid</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_2">F.22. Release Notes for Version 1.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_20">F.22.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_micropeak_application">F.22.2. AltosUI and MicroPeak Application</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_1">F.23. Release Notes for Version 1.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_21">F.23.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_2">F.23.2. AltosUI</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_1_2">F.24. Release Notes for Version 1.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_22">F.24.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_3">F.24.2. AltosUI</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_0_1">F.25. Release Notes for Version 1.0.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_23">F.25.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application_6">F.25.2. AltosUI Application</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_0_9_2">F.26. Release Notes for Version 0.9.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_4">F.26.1. AltosUI</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_0_9">F.27. Release Notes for Version 0.9</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_24">F.27.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application_7">F.27.2. AltosUI Application</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_0_8">F.28. Release Notes for Version 0.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_application_8">F.28.1. AltosUI Application:</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_0_7_1">F.29. Release Notes for Version 0.7.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_application_9">F.29.1. AltosUI Application</a></span></dt></dl></dd></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>4.1. <a href="#idm450">TeleMetrum v2 Board</a></dt><dt>4.2. <a href="#idm457">TeleMetrum v1 Board</a></dt><dt>5.1. <a href="#idm543">TeleMini v3 Board</a></dt><dt>5.2. <a href="#idm627">TeleMini v1 Board</a></dt><dt>6.1. <a href="#idm636">EasyMini Board</a></dt><dt>7.1. <a href="#idm738">TeleMega Board</a></dt><dt>8.1. <a href="#idm908">EasyMega Board</a></dt><dt>11.1. <a href="#idm1126">AltosUI Main Window</a></dt><dt>11.2. <a href="#idm1137">Device Selection Dialog</a></dt><dt>11.3. <a href="#idm1165">Monitor Flight Launch Pad View</a></dt><dt>11.4. <a href="#idm1205">Monitor Flight Ascent View</a></dt><dt>11.5. <a href="#idm1218">Monitor Flight Descent View</a></dt><dt>11.6. <a href="#idm1231">Monitor Flight Landed View</a></dt><dt>11.7. <a href="#idm1246">Monitor Flight Table View</a></dt><dt>11.8. <a href="#idm1256">Monitor Flight Site Map View</a></dt><dt>11.9. <a href="#idm1271">Monitor Flight Additional Igniter View</a></dt><dt>11.10. <a href="#idm1301">Flight Data Graph</a></dt><dt>11.11. <a href="#idm1312">Flight Graph Configuration</a></dt><dt>11.12. <a href="#idm1331">Flight Statistics</a></dt><dt>11.13. <a href="#idm1341">Flight Map</a></dt><dt>11.14. <a href="#idm1362">Altimeter Configuration</a></dt><dt>11.15. <a href="#idm1478">Additional Pyro Channel Configuration</a></dt><dt>11.16. <a href="#idm1555">Configure AltosUI Dialog</a></dt><dt>11.17. <a href="#idm1608">Configure Groundstation Dialog</a></dt><dt>11.18. <a href="#idm1648">Fire Igniter Window</a></dt><dt>11.19. <a href="#idm1667">Scan Channels Window</a></dt><dt>11.20. <a href="#idm1677">Load Maps Window</a></dt><dt>11.21. <a href="#idm1710">Monitor Idle Window</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>3.1. <a href="#idm212">AltOS Modes</a></dt><dt>3.2. <a href="#idm320">Pad/Idle Indications</a></dt><dt>3.3. <a href="#idm375">Pad Radio Indications</a></dt><dt>4.1. <a href="#idm477">TeleMetrum Screw Terminals</a></dt><dt>5.1. <a href="#idm560">TeleMini v3 Screw Terminals</a></dt><dt>6.1. <a href="#idm648">EasyMini Screw Terminals</a></dt><dt>7.1. <a href="#idm758">TeleMega Screw Terminals</a></dt><dt>8.1. <a href="#idm919">EasyMega Screw Terminals</a></dt><dt>A.1. <a href="#idm2046">Altus Metrum APRS Comments</a></dt><dt>D.1. <a href="#idm2297">Data Storage on Altus Metrum altimeters</a></dt><dt>E.1. <a href="#idm2392">Altus Metrum Flight Computer Electronics</a></dt><dt>E.2. <a href="#idm2585">Altus Metrum Flight Computer Mechanical Components</a></dt></dl></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_introduction_and_overview"></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
 releasing all of our hardware and software designs under open licenses,
@@ -148,13 +148,13 @@ beeping
 that accompanies each mode. In the description of the
 beeping pattern, “dit” means a short beep while "dah"
 means a long beep (three times as long). “Brap” means
-a long dissonant tone.</p><div class="table"><a id="idm208"></a><p class="title"><strong>Table 3.1. AltOS Modes</strong></p><div class="table-contents"><table class="table" summary="AltOS Modes" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Mode Name</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Abbreviation</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Beeps</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Startup</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>S</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>battery voltage in decivolts</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Calibrating sensors, detecting orientation.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Idle</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>I</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Ready to accept commands over USB
+a long dissonant tone.</p><div class="table"><a id="idm212"></a><p class="title"><strong>Table 3.1. AltOS Modes</strong></p><div class="table-contents"><table class="table" summary="AltOS Modes" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Mode Name</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Abbreviation</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Beeps</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Startup</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>S</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>battery voltage in decivolts</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Calibrating sensors, detecting orientation.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Idle</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>I</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Ready to accept commands over USB
 or radio link.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Pad</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>P</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dah dah dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Waiting for launch. Not listening for commands.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Boost</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dah dit dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Accelerating upwards.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Fast</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>F</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit dah dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Decelerating, but moving faster than 200m/s.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Coast</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>C</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dah dit dah dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Decelerating, moving slower than 200m/s</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Drogue</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dah dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Descending after apogee. Above main height.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>M</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dah dah</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Descending. Below main height.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Landed</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>L</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dah dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Stable altitude for at least ten seconds.</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Sensor error</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>X</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>dah dit dit dah</p></td><td style="" align="left" valign="top"><p>Error detected during sensor calibration.</p></td></tr></tbody></table></div></div><br class="table-break" /><p>Here’s a summary of all of the Pad and Idle mode
 indications. In Idle mode, you’ll hear one of these
 just once after the two short dits indicating idle
 mode. In Pad mode, after the dit dah dah dit
 indicating Pad mode, you’ll hear these once every five
-seconds.</p><div class="table"><a id="idm316"></a><p class="title"><strong>Table 3.2. Pad/Idle Indications</strong></p><div class="table-contents"><table class="table" summary="Pad/Idle Indications" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Name           </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Beeps          </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Neither</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>brap</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>No continuity detected on either apogee or main igniters.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected only on apogee igniter.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected only on main igniter.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Both</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected on both igniters.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Storage Full</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>warble</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>On-board data logging storage is full. This will
+seconds.</p><div class="table"><a id="idm320"></a><p class="title"><strong>Table 3.2. Pad/Idle Indications</strong></p><div class="table-contents"><table class="table" summary="Pad/Idle Indications" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Name           </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Beeps          </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Neither</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>brap</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>No continuity detected on either apogee or main igniters.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected only on apogee igniter.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected only on main igniter.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Both</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected on both igniters.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Storage Full</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>warble</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><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
@@ -166,7 +166,7 @@ primary igniter channels.</p></td></tr></tbody></table></div></div><br class="ta
 the digital and APRS telemetry signals, you can also
 receive audio tones with a standard amateur
 70cm FM receiver. While on the pad, you will hear
-igniter status once every five seconds.</p><div class="table"><a id="idm371"></a><p class="title"><strong>Table 3.3. Pad Radio Indications</strong></p><div class="table-contents"><table class="table" summary="Pad Radio Indications" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Name           </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Beeps          </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Neither</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>½ second tone</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>No continuity detected on either apogee or main igniters.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected only on apogee igniter.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected only on main igniter.</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Both</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>dit dit dit</p></td><td style="" align="left" valign="top"><p>Continuity detected on both igniters.</p></td></tr></tbody></table></div></div><br class="table-break" /><p>During ascent, the tones will be muted to allow the
+igniter status once every five seconds.</p><div class="table"><a id="idm375"></a><p class="title"><strong>Table 3.3. Pad Radio Indications</strong></p><div class="table-contents"><table class="table" summary="Pad Radio Indications" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Name           </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Beeps          </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Neither</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>½ second tone</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>No continuity detected on either apogee or main igniters.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected only on apogee igniter.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected only on main igniter.</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Both</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>dit dit dit</p></td><td style="" align="left" valign="top"><p>Continuity detected on both igniters.</p></td></tr></tbody></table></div></div><br class="table-break" /><p>During ascent, the tones will be muted to allow the
 telemetry data to consume the full radio bandwidth.</p><p>During descent and after landing, a ½ second tone will
 be transmitted every five seconds. This can be used to
 find the rocket using RDF techniques when the signal
@@ -236,7 +236,7 @@ battery.</p><div class="warning" style="margin-left: 0; margin-right: 10%;"><h3
 operate off a single-cell Lithium Polymer battery and
 cannot be used with any other kind. Connecting a
 different kind of battery to any of these will destroy
-the board.</p></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_telemetrum"></a>Chapter 4. TeleMetrum</h1></div></div></div><div class="figure"><a id="idm446"></a><p class="title"><strong>Figure 4.1. TeleMetrum v2 Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="telemetrum-v2.0-th.jpg" width="495" alt="telemetrum-v2.0-th.jpg" /></div></div></div><br class="figure-break" /><div class="figure"><a id="idm453"></a><p class="title"><strong>Figure 4.2. TeleMetrum v1 Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="telemetrum-v1.1-thside.jpg" width="495" alt="telemetrum-v1.1-thside.jpg" /></div></div></div><br class="figure-break" /><p>TeleMetrum is a 1 inch by 2¾ inch circuit board.  It was designed to
+the board.</p></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_telemetrum"></a>Chapter 4. TeleMetrum</h1></div></div></div><div class="figure"><a id="idm450"></a><p class="title"><strong>Figure 4.1. TeleMetrum v2 Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="telemetrum-v2.0-th.jpg" width="495" alt="telemetrum-v2.0-th.jpg" /></div></div></div><br class="figure-break" /><div class="figure"><a id="idm457"></a><p class="title"><strong>Figure 4.2. TeleMetrum v1 Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="telemetrum-v1.1-thside.jpg" width="495" alt="telemetrum-v1.1-thside.jpg" /></div></div></div><br class="figure-break" /><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
@@ -257,7 +257,7 @@ screw terminals in the same position.</p><div class="section"><div class="titlep
 opposite the telemetry antenna. Two are for the power
 switch, and two each for the apogee and main igniter
 circuits. Using the picture above and starting from the top,
-the terminals are as follows:</p><div class="table"><a id="idm473"></a><p class="title"><strong>Table 4.1. TeleMetrum Screw Terminals</strong></p><div class="table-contents"><table class="table" summary="TeleMetrum Screw Terminals" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal #</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal Name</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Output</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to flight computer</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Input</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to positive battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main +</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee +</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Apogee -</p></td><td style="" align="left" valign="top"><p>Apogee pyro channel connection to pyro circuit</p></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 id="_using_a_separate_pyro_battery_with_telemetrum"></a>4.2. Using a Separate Pyro Battery with TeleMetrum</h2></div></div></div><p>As described above, using an external pyro battery involves
+the terminals are as follows:</p><div class="table"><a id="idm477"></a><p class="title"><strong>Table 4.1. TeleMetrum Screw Terminals</strong></p><div class="table-contents"><table class="table" summary="TeleMetrum Screw Terminals" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal #</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal Name</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Output</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to flight computer</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Input</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to positive battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main +</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee +</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Apogee -</p></td><td style="" align="left" valign="top"><p>Apogee pyro channel connection to pyro circuit</p></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 id="_using_a_separate_pyro_battery_with_telemetrum"></a>4.2. Using a Separate Pyro Battery with TeleMetrum</h2></div></div></div><p>As described above, using an external pyro battery involves
 connecting the negative battery terminal to the flight
 computer ground, connecting the positive battery terminal to
 one of the igniter leads and connecting the other igniter
@@ -273,7 +273,7 @@ connections, one to the positive battery terminal, one to
 the flight computer positive input and one to ground.</p><p>The positive battery terminal is available on screw terminal
 2, the positive flight computer input is on terminal 1. To
 hook a lead to ground, solder a piece of wire, 24 to 28
-gauge stranded, to the GND hole just above terminal 1.</p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_telemini"></a>Chapter 5. TeleMini</h1></div></div></div><div class="figure"><a id="idm539"></a><p class="title"><strong>Figure 5.1. TeleMini v3 Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="telemini-v3.0-top.jpg" width="495" alt="telemini-v3.0-top.jpg" /></div></div></div><br class="figure-break" /><div class="informalfigure"><div class="mediaobject"><img src="telemini-v3.0-bottom.jpg" width="495" alt="telemini-v3.0-bottom.jpg" /></div></div><p>TeleMini v3 is 0.5 inches by 1.67 inches.  It was
+gauge stranded, to the GND hole just above terminal 1.</p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_telemini"></a>Chapter 5. TeleMini</h1></div></div></div><div class="figure"><a id="idm543"></a><p class="title"><strong>Figure 5.1. TeleMini v3 Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="telemini-v3.0-top.jpg" width="495" alt="telemini-v3.0-top.jpg" /></div></div></div><br class="figure-break" /><div class="informalfigure"><div class="mediaobject"><img src="telemini-v3.0-bottom.jpg" width="495" alt="telemini-v3.0-bottom.jpg" /></div></div><p>TeleMini v3 is 0.5 inches by 1.67 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
@@ -291,7 +291,7 @@ screw terminals are located in the middle of the board
 for the power switch.  Using the
 picture above and starting from the top for the pyro terminals
 and from the left for the power switch terminals, the
-connections are as follows:</p><div class="table"><a id="idm556"></a><p class="title"><strong>Table 5.1. TeleMini v3 Screw Terminals</strong></p><div class="table-contents"><table class="table" summary="TeleMini v3 Screw Terminals" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal #</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal Name</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Left</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Output</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to flight computer</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Right</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Switch Input</p></td><td style="" align="left" valign="top"><p>Switch connection to positive battery terminal</p></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 id="_using_a_separate_pyro_battery_with_telemini_v3"></a>5.2. Using a Separate Pyro Battery with TeleMini v3</h2></div></div></div><p>As described above, using an external pyro battery involves
+connections are as follows:</p><div class="table"><a id="idm560"></a><p class="title"><strong>Table 5.1. TeleMini v3 Screw Terminals</strong></p><div class="table-contents"><table class="table" summary="TeleMini v3 Screw Terminals" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal #</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal Name</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Left</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Output</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to flight computer</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Right</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Switch Input</p></td><td style="" align="left" valign="top"><p>Switch connection to positive battery terminal</p></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 id="_using_a_separate_pyro_battery_with_telemini_v3"></a>5.2. Using a Separate Pyro Battery with TeleMini v3</h2></div></div></div><p>As described above, using an external pyro battery involves
 connecting the negative battery terminal to the flight
 computer ground, connecting the positive battery terminal to
 one of the igniter leads and connecting the other igniter
@@ -314,7 +314,7 @@ the left power switch wire. Hook a lead to either of the
 mounting holes for a ground connection.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_telemini_v1"></a>5.4. TeleMini v1</h2></div></div></div><p>TeleMini v1 is the earlier version of this product. It
 has a lower-power radio, less storage, no beeper and
 soldered-in wires instead of screw terminals for the
-power switch.</p><div class="figure"><a id="idm623"></a><p class="title"><strong>Figure 5.2. TeleMini v1 Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="telemini-v1-top.jpg" width="495" alt="telemini-v1-top.jpg" /></div></div></div><br class="figure-break" /></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_easymini"></a>Chapter 6. EasyMini</h1></div></div></div><div class="figure"><a id="idm632"></a><p class="title"><strong>Figure 6.1. EasyMini Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="easymini-top.jpg" width="495" alt="easymini-top.jpg" /></div></div></div><br class="figure-break" /><p>EasyMini is built on a 0.8 inch by 1½ inch circuit board. It’s
+power switch.</p><div class="figure"><a id="idm627"></a><p class="title"><strong>Figure 5.2. TeleMini v1 Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="telemini-v1-top.jpg" width="495" alt="telemini-v1-top.jpg" /></div></div></div><br class="figure-break" /></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_easymini"></a>Chapter 6. EasyMini</h1></div></div></div><div class="figure"><a id="idm636"></a><p class="title"><strong>Figure 6.1. EasyMini Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="easymini-top.jpg" width="495" alt="easymini-top.jpg" /></div></div></div><br class="figure-break" /><p>EasyMini is built on a 0.8 inch by 1½ inch circuit board. It’s
 designed to fit in a 24mm coupler tube.</p><p>You usually don’t need to configure EasyMini at all; it’s set
 up to do dual-deployment with an event at apogee to separate
 the airframe and deploy a drogue and another event at 250m
@@ -325,7 +325,7 @@ board. Using the picture
 above, the top four have connections for the main pyro
 circuit and an external battery and the bottom four have
 connections for the apogee pyro circuit and the power
-switch. Counting from the left, the connections are as follows:</p><div class="table"><a id="idm644"></a><p class="title"><strong>Table 6.1. EasyMini Screw Terminals</strong></p><div class="table-contents"><table class="table" summary="EasyMini Screw Terminals" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal #</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal Name</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Battery</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Positive external battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Battery -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Negative external battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Output</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to flight computer</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Bottom 4</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Switch Input</p></td><td style="" align="left" valign="top"><p>Switch connection to positive battery terminal</p></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 id="_connecting_a_battery_to_easymini"></a>6.2. Connecting A Battery To EasyMini</h2></div></div></div><p>There are two possible battery connections on
+switch. Counting from the left, the connections are as follows:</p><div class="table"><a id="idm648"></a><p class="title"><strong>Table 6.1. EasyMini Screw Terminals</strong></p><div class="table-contents"><table class="table" summary="EasyMini Screw Terminals" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal #</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal Name</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Battery</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Positive external battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Battery -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Negative external battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Output</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to flight computer</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Bottom 4</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Switch Input</p></td><td style="" align="left" valign="top"><p>Switch connection to positive battery terminal</p></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 id="_connecting_a_battery_to_easymini"></a>6.2. Connecting A Battery To EasyMini</h2></div></div></div><p>There are two possible battery connections on
 EasyMini. You can use either method; both feed
 through the power switch terminals.</p><p>One battery connection is the standard Altus Metrum
 white JST plug. This mates with single-cell Lithium
@@ -353,7 +353,7 @@ the flight computer positive input and one to ground. Use
 the negative external battery connection, top terminal 4 for
 ground.</p><p>The positive battery terminal is available on bottom
 terminal 4, the positive flight computer input is on the
-bottom terminal 3.</p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_telemega"></a>Chapter 7. TeleMega</h1></div></div></div><div class="figure"><a id="idm734"></a><p class="title"><strong>Figure 7.1. TeleMega Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="telemega-v1.0-top.jpg" width="495" alt="telemega-v1.0-top.jpg" /></div></div></div><br class="figure-break" /><p>TeleMega is a 1¼ inch by 3¼ inch circuit board. It was
+bottom terminal 3.</p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_telemega"></a>Chapter 7. TeleMega</h1></div></div></div><div class="figure"><a id="idm738"></a><p class="title"><strong>Figure 7.1. TeleMega Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="telemega-v1.0-top.jpg" width="495" alt="telemega-v1.0-top.jpg" /></div></div></div><br class="figure-break" /><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
@@ -368,7 +368,7 @@ Radio switched from cc1120 to cc1200.
 they do mean that the device needs different firmware to
 operate correctly, so make sure you load the right firmware
 when reflashing the device.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_telemega_screw_terminals"></a>7.1. TeleMega Screw Terminals</h2></div></div></div><p>TeleMega has two sets of nine screw terminals on the end of
-the board opposite the telemetry antenna. They are as follows:</p><div class="table"><a id="idm754"></a><p class="title"><strong>Table 7.1. TeleMega Screw Terminals</strong></p><div class="table-contents"><table class="table" summary="TeleMega Screw Terminals" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal #</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal Name</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Input</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to positive battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Output</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to flight computer</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>GND</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Ground connection for use with external active switch</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 7</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 9</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>GND</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Ground connection for negative pyro battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Pyro</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Positive pyro battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Lipo</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Power switch output. Use to connect main battery to pyro battery input</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 7</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>C -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>C pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Bottom 9</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>C</p></td><td style="" align="left" valign="top"><p>C pyro channel common connection to battery</p></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 id="_using_a_separate_pyro_battery_with_telemega"></a>7.2. Using a Separate Pyro Battery with TeleMega</h2></div></div></div><p>TeleMega provides explicit support for an external pyro
+the board opposite the telemetry antenna. They are as follows:</p><div class="table"><a id="idm758"></a><p class="title"><strong>Table 7.1. TeleMega Screw Terminals</strong></p><div class="table-contents"><table class="table" summary="TeleMega Screw Terminals" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal #</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal Name</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Input</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to positive battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Output</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to flight computer</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>GND</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Ground connection for use with external active switch</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 7</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 9</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>GND</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Ground connection for negative pyro battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Pyro</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Positive pyro battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Lipo</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Power switch output. Use to connect main battery to pyro battery input</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 7</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>C -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>C pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Bottom 9</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>C</p></td><td style="" align="left" valign="top"><p>C pyro channel common connection to battery</p></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 id="_using_a_separate_pyro_battery_with_telemega"></a>7.2. Using a Separate Pyro Battery with TeleMega</h2></div></div></div><p>TeleMega provides explicit support for an external pyro
 battery. All that is required is to remove the jumper
 between the lipo terminal (Bottom 3) and the pyro terminal
 (Bottom 2). Then hook the negative pyro battery terminal to ground
@@ -384,12 +384,12 @@ wire from the Lipo terminal (Bottom 3) to the Pyro terminal
 connections, one to the positive battery terminal, one to
 the flight computer positive input and one to ground.</p><p>The positive battery terminal is available on Top terminal
 1, the positive flight computer input is on Top terminal
-2. Ground is on Top terminal 3.</p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_easymega"></a>Chapter 8. EasyMega</h1></div></div></div><div class="figure"><a id="idm904"></a><p class="title"><strong>Figure 8.1. EasyMega Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="easymega-v1.0-top.jpg" width="405" alt="easymega-v1.0-top.jpg" /></div></div></div><br class="figure-break" /><p>EasyMega is a 1¼ inch by 2¼ inch circuit board. It was
+2. Ground is on Top terminal 3.</p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_easymega"></a>Chapter 8. EasyMega</h1></div></div></div><div class="figure"><a id="idm908"></a><p class="title"><strong>Figure 8.1. EasyMega Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="easymega-v1.0-top.jpg" width="405" alt="easymega-v1.0-top.jpg" /></div></div></div><br class="figure-break" /><p>EasyMega is a 1¼ inch by 2¼ inch circuit board. It was
 designed to easily fit in a 38mm coupler. Like TeleMetrum,
 EasyMega 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 class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_easymega_screw_terminals"></a>8.1. EasyMega Screw Terminals</h2></div></div></div><p>EasyMega has two sets of nine screw terminals on the end of
-the board opposite the telemetry antenna. They are as follows:</p><div class="table"><a id="idm915"></a><p class="title"><strong>Table 8.1. EasyMega Screw Terminals</strong></p><div class="table-contents"><table class="table" summary="EasyMega Screw Terminals" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal #</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal Name</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Input</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to positive battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Output</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to flight computer</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>GND</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Ground connection for use with external active switch</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 7</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 9</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>GND</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Ground connection for negative pyro battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Pyro</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Positive pyro battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Lipo</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Power switch output. Use to connect main battery to pyro battery input</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 7</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>C -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>C pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Bottom 9</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>C</p></td><td style="" align="left" valign="top"><p>C pyro channel common connection to battery</p></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 id="_using_a_separate_pyro_battery_with_easymega"></a>8.2. Using a Separate Pyro Battery with EasyMega</h2></div></div></div><p>EasyMega provides explicit support for an external pyro
+the board opposite the telemetry antenna. They are as follows:</p><div class="table"><a id="idm919"></a><p class="title"><strong>Table 8.1. EasyMega Screw Terminals</strong></p><div class="table-contents"><table class="table" summary="EasyMega Screw Terminals" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal #</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal Name</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Input</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to positive battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Output</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to flight computer</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>GND</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Ground connection for use with external active switch</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 7</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 9</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>GND</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Ground connection for negative pyro battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Pyro</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Positive pyro battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Lipo</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Power switch output. Use to connect main battery to pyro battery input</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 7</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>C -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>C pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Bottom 9</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>C</p></td><td style="" align="left" valign="top"><p>C pyro channel common connection to battery</p></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 id="_using_a_separate_pyro_battery_with_easymega"></a>8.2. Using a Separate Pyro Battery with EasyMega</h2></div></div></div><p>EasyMega provides explicit support for an external pyro
 battery. All that is required is to remove the jumper
 between the lipo terminal (Bottom 3) and the pyro terminal
 (Bottom 2). Then hook the negative pyro battery terminal to ground
@@ -558,7 +558,7 @@ feel free to dive in and help!  Or let us know what
 you’d like to see that we aren’t already working on,
 and maybe we’ll get excited about it too…</p><p>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 id="_altosui"></a>Chapter 11. AltosUI</h1></div></div></div><div class="figure"><a id="idm1122"></a><p class="title"><strong>Figure 11.1. AltosUI Main Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="altosui.png" width="414" alt="altosui.png" /></div></div></div><br class="figure-break" /><p>The AltosUI program provides a graphical user interface for
+evolves!</p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_altosui"></a>Chapter 11. AltosUI</h1></div></div></div><div class="figure"><a id="idm1126"></a><p class="title"><strong>Figure 11.1. AltosUI Main Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="altosui.png" width="414" alt="altosui.png" /></div></div></div><br class="figure-break" /><p>The AltosUI program provides a graphical user interface for
 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
@@ -568,7 +568,7 @@ the tasks provided from the top-level toolbar.</p><div class="section"><div clas
 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><div class="figure"><a id="idm1133"></a><p class="title"><strong>Figure 11.2. Device Selection Dialog</strong></p><div class="figure-contents"><div class="mediaobject"><img src="device-selection.png" width="279" alt="device-selection.png" /></div></div></div><br class="figure-break" /><p>All telemetry data received are automatically recorded
+device.</p><div class="figure"><a id="idm1137"></a><p class="title"><strong>Figure 11.2. Device Selection Dialog</strong></p><div class="figure-contents"><div class="mediaobject"><img src="device-selection.png" width="279" alt="device-selection.png" /></div></div></div><br class="figure-break" /><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.</p><p>The radio frequency being monitored by the TeleDongle
 device is displayed at the top of the window. You can
@@ -615,7 +615,7 @@ automatically switches to display data relevant to the
 current state of the flight. You can select other tabs
 at any time. The final <span class="emphasis"><em>table</em></span> 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 id="_launch_pad"></a>11.1.1. Launch Pad</h3></div></div></div><div class="figure"><a id="idm1161"></a><p class="title"><strong>Figure 11.3. Monitor Flight Launch Pad View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="launch-pad.png" width="495" alt="launch-pad.png" /></div></div></div><br class="figure-break" /><p>The <span class="emphasis"><em>Launch Pad</em></span> tab shows information used to decide when the
+spreadsheet-like format.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_launch_pad"></a>11.1.1. Launch Pad</h3></div></div></div><div class="figure"><a id="idm1165"></a><p class="title"><strong>Figure 11.3. Monitor Flight Launch Pad View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="launch-pad.png" width="495" alt="launch-pad.png" /></div></div></div><br class="figure-break" /><p>The <span class="emphasis"><em>Launch Pad</em></span> 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="variablelist"><dl class="variablelist"><dt><span class="term">
@@ -673,7 +673,7 @@ GPS receiver has reliable reception from the
 satellites.
 </dd></dl></div><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 id="_ascent"></a>11.1.2. Ascent</h3></div></div></div><div class="figure"><a id="idm1201"></a><p class="title"><strong>Figure 11.4. Monitor Flight Ascent View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="ascent.png" width="495" alt="ascent.png" /></div></div></div><br class="figure-break" /><p>This tab is shown during Boost, Fast and Coast
+positions to improve the accuracy of the fix.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_ascent"></a>11.1.2. Ascent</h3></div></div></div><div class="figure"><a id="idm1205"></a><p class="title"><strong>Figure 11.4. Monitor Flight Ascent View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="ascent.png" width="495" alt="ascent.png" /></div></div></div><br class="figure-break" /><p>This tab is shown during Boost, Fast and Coast
 phases. The information displayed here helps monitor the
 rocket as it heads towards apogee.</p><p>The height, speed, acceleration and tilt are shown along
 with the maximum values for each of them. This allows you to
@@ -684,7 +684,7 @@ may not get updated as the GPS receiver loses position
 fix. Once the rocket starts coasting, the receiver should
 start reporting position again.</p><p>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 id="_descent"></a>11.1.3. Descent</h3></div></div></div><div class="figure"><a id="idm1214"></a><p class="title"><strong>Figure 11.5. Monitor Flight Descent View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="descent.png" width="495" alt="descent.png" /></div></div></div><br class="figure-break" /><p>Once the rocket has reached apogee and (we hope)
+caused by wiring which comes loose under high acceleration.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_descent"></a>11.1.3. Descent</h3></div></div></div><div class="figure"><a id="idm1218"></a><p class="title"><strong>Figure 11.5. Monitor Flight Descent View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="descent.png" width="495" alt="descent.png" /></div></div></div><br class="figure-break" /><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, waiting for the main charge
@@ -710,7 +710,7 @@ see what the status of the apogee charge is.  Note
 that some commercial 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 id="_landed"></a>11.1.4. Landed</h3></div></div></div><div class="figure"><a id="idm1227"></a><p class="title"><strong>Figure 11.6. Monitor Flight Landed View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="landed.png" width="495" alt="landed.png" /></div></div></div><br class="figure-break" /><p>Once the rocket is on the ground, attention switches
+firing.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_landed"></a>11.1.4. Landed</h3></div></div></div><div class="figure"><a id="idm1231"></a><p class="title"><strong>Figure 11.6. Monitor Flight Landed View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="landed.png" width="495" alt="landed.png" /></div></div></div><br class="figure-break" /><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 generally within a short distance of the
@@ -732,11 +732,11 @@ depends on the quality of your radio link and how many
 packets were received.  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 <span class="emphasis"><em>Graph Flight</em></span> 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 id="_table"></a>11.1.5. Table</h3></div></div></div><div class="figure"><a id="idm1242"></a><p class="title"><strong>Figure 11.7. Monitor Flight Table View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="table.png" width="495" alt="table.png" /></div></div></div><br class="figure-break" /><p>The table view shows all of the data available from the
+bring up a graph window for the current flight.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_table"></a>11.1.5. Table</h3></div></div></div><div class="figure"><a id="idm1246"></a><p class="title"><strong>Figure 11.7. Monitor Flight Table View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="table.png" width="495" alt="table.png" /></div></div></div><br class="figure-break" /><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 id="_site_map"></a>11.1.6. Site Map</h3></div></div></div><div class="figure"><a id="idm1252"></a><p class="title"><strong>Figure 11.8. Monitor Flight Site Map View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="site-map.png" width="495" alt="site-map.png" /></div></div></div><br class="figure-break" /><p>When the TeleMetrum has a GPS fix, the Site Map tab
+information about the signal being received from the satellites.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_site_map"></a>11.1.6. Site Map</h3></div></div></div><div class="figure"><a id="idm1256"></a><p class="title"><strong>Figure 11.8. Monitor Flight Site Map View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="site-map.png" width="495" alt="site-map.png" /></div></div></div><br class="figure-break" /><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 rocket’s state is
@@ -755,7 +755,7 @@ units will be shown at the start of the line.</p><p>Images are fetched automatic
 Static API, and cached on disk for reuse. If map
 images cannot be downloaded, the rocket’s path will be
 traced on a dark gray background instead.</p><p>You can pre-load images for your favorite launch sites
-before you leave home; check out <a class="xref" href="#_load_maps" title="11.12. Load Maps">Section 11.12, “Load Maps”</a>.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_igniter"></a>11.1.7. Igniter</h3></div></div></div><div class="figure"><a id="idm1267"></a><p class="title"><strong>Figure 11.9. Monitor Flight Additional Igniter View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="ignitor.png" width="495" alt="ignitor.png" /></div></div></div><br class="figure-break" /><p>TeleMega includes four additional programmable pyro
+before you leave home; check out <a class="xref" href="#_load_maps" title="11.12. Load Maps">Section 11.12, “Load Maps”</a>.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_igniter"></a>11.1.7. Igniter</h3></div></div></div><div class="figure"><a id="idm1271"></a><p class="title"><strong>Figure 11.9. Monitor Flight Additional Igniter View</strong></p><div class="figure-contents"><div class="mediaobject"><img src="ignitor.png" width="495" alt="ignitor.png" /></div></div></div><br class="figure-break" /><p>TeleMega includes four additional programmable pyro
 channels. The Ignitor tab shows whether each of them has
 continuity. If an ignitor has a low resistance, then the
 voltage measured here will be close to the pyro battery
@@ -800,7 +800,7 @@ record file, either a .telem file recording telemetry data or a
 flash memory.</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><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 id="_flight_graph"></a>11.4.1. Flight Graph</h3></div></div></div><div class="figure"><a id="idm1297"></a><p class="title"><strong>Figure 11.10. Flight Data Graph</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph.png" width="495" alt="graph.png" /></div></div></div><br class="figure-break" /><p>By default, the graph contains acceleration (blue),
+opened.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_flight_graph"></a>11.4.1. Flight Graph</h3></div></div></div><div class="figure"><a id="idm1301"></a><p class="title"><strong>Figure 11.10. Flight Data Graph</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph.png" width="495" alt="graph.png" /></div></div></div><br class="figure-break" /><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
@@ -808,7 +808,7 @@ 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></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_configure_graph"></a>11.4.2. Configure Graph</h3></div></div></div><div class="figure"><a id="idm1308"></a><p class="title"><strong>Figure 11.11. Flight Graph Configuration</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph-configure.png" width="495" alt="graph-configure.png" /></div></div></div><br class="figure-break" /><p>This selects which graph elements to show, and, at the
+plot.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_configure_graph"></a>11.4.2. Configure Graph</h3></div></div></div><div class="figure"><a id="idm1312"></a><p class="title"><strong>Figure 11.11. Flight Graph Configuration</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph-configure.png" width="495" alt="graph-configure.png" /></div></div></div><br class="figure-break" /><p>This selects which graph elements to show, and, at the
 very bottom. It also lets you configure how
 the graph is drawn:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Whether to use metric or imperial units
@@ -829,7 +829,7 @@ descent. Flight computers without
 accelerometers always compute both speed and
 acceleration from barometric data. A larger
 value smooths the data more.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_flight_statistics"></a>11.4.3. Flight Statistics</h3></div></div></div><div class="figure"><a id="idm1327"></a><p class="title"><strong>Figure 11.12. Flight Statistics</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph-stats.png" width="495" alt="graph-stats.png" /></div></div></div><br class="figure-break" /><p>Shows overall data computed from the flight.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_map"></a>11.4.4. Map</h3></div></div></div><div class="figure"><a id="idm1337"></a><p class="title"><strong>Figure 11.13. Flight Map</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph-map.png" width="495" alt="graph-map.png" /></div></div></div><br class="figure-break" /><p>Shows a satellite image of the flight area overlaid
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_flight_statistics"></a>11.4.3. Flight Statistics</h3></div></div></div><div class="figure"><a id="idm1331"></a><p class="title"><strong>Figure 11.12. Flight Statistics</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph-stats.png" width="495" alt="graph-stats.png" /></div></div></div><br class="figure-break" /><p>Shows overall data computed from the flight.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_map"></a>11.4.4. Map</h3></div></div></div><div class="figure"><a id="idm1341"></a><p class="title"><strong>Figure 11.13. Flight Map</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph-map.png" width="495" alt="graph-map.png" /></div></div></div><br class="figure-break" /><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 id="_export_data"></a>11.5. Export Data</h2></div></div></div><p>This tool takes the raw data files and makes them
@@ -856,7 +856,7 @@ 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 id="_keyhole_markup_language_for_google_earth"></a>11.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 id="_configure_altimeter"></a>11.6. Configure Altimeter</h2></div></div></div><div class="figure"><a id="idm1358"></a><p class="title"><strong>Figure 11.14. Altimeter Configuration</strong></p><div class="figure-contents"><div class="mediaobject"><img src="configure-altimeter.png" width="324" alt="configure-altimeter.png" /></div></div></div><br class="figure-break" /><p>Select this button and then select either an altimeter or
+in 3D.</p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configure_altimeter"></a>11.6. Configure Altimeter</h2></div></div></div><div class="figure"><a id="idm1362"></a><p class="title"><strong>Figure 11.14. Altimeter Configuration</strong></p><div class="figure-contents"><div class="mediaobject"><img src="configure-altimeter.png" width="324" alt="configure-altimeter.png" /></div></div></div><br class="figure-break" /><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>The first few lines of the dialog provide information about the
@@ -1020,7 +1020,7 @@ flight computer with the antenna end, or end opposite
 the screw terminals, in the case of EasyMega, first up
 and then down.</p><p>When the calibration is complete, return to the
 Configure Altimeter window and save the new
-calibration values.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_configure_pyro_channels"></a>11.6.19. Configure Pyro Channels</h3></div></div></div><div class="figure"><a id="idm1474"></a><p class="title"><strong>Figure 11.15. Additional Pyro Channel Configuration</strong></p><div class="figure-contents"><div class="mediaobject"><img src="configure-pyro.png" width="495" alt="configure-pyro.png" /></div></div></div><br class="figure-break" /><p>This opens a separate window to configure the
+calibration values.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_configure_pyro_channels"></a>11.6.19. Configure Pyro Channels</h3></div></div></div><div class="figure"><a id="idm1478"></a><p class="title"><strong>Figure 11.15. Additional Pyro Channel Configuration</strong></p><div class="figure-contents"><div class="mediaobject"><img src="configure-pyro.png" width="495" alt="configure-pyro.png" /></div></div></div><br class="figure-break" /><p>This opens a separate window to configure the
 additional pyro channels available on TeleMega
 and EasyMega.  One column is presented for
 each channel. Each row represents a single
@@ -1147,7 +1147,7 @@ note that the check is based on when the rocket transitions <span class="strong"
 state, and so checking for “greater than Boost” 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></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configure_altosui"></a>11.7. Configure AltosUI</h2></div></div></div><div class="figure"><a id="idm1551"></a><p class="title"><strong>Figure 11.16. Configure AltosUI Dialog</strong></p><div class="figure-contents"><div class="mediaobject"><img src="configure-altosui.png" width="216" alt="configure-altosui.png" /></div></div></div><br class="figure-break" /><p>This button presents a dialog so that you can
+acceleration again, it will move back to Boost state.</p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configure_altosui"></a>11.7. Configure AltosUI</h2></div></div></div><div class="figure"><a id="idm1555"></a><p class="title"><strong>Figure 11.16. Configure AltosUI Dialog</strong></p><div class="figure-contents"><div class="mediaobject"><img src="configure-altosui.png" width="216" alt="configure-altosui.png" /></div></div></div><br class="figure-break" /><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 id="_voice_settings"></a>11.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
@@ -1212,7 +1212,7 @@ 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 id="_configure_groundstation"></a>11.8. Configure Groundstation</h2></div></div></div><div class="figure"><a id="idm1604"></a><p class="title"><strong>Figure 11.17. Configure Groundstation Dialog</strong></p><div class="figure-contents"><div class="mediaobject"><img src="configure-groundstation.png" width="279" alt="configure-groundstation.png" /></div></div></div><br class="figure-break" /><p>Select this button and then select a TeleDongle or
+menus.</p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configure_groundstation"></a>11.8. Configure Groundstation</h2></div></div></div><div class="figure"><a id="idm1608"></a><p class="title"><strong>Figure 11.17. Configure Groundstation Dialog</strong></p><div class="figure-contents"><div class="mediaobject"><img src="configure-groundstation.png" width="279" alt="configure-groundstation.png" /></div></div></div><br class="figure-break" /><p>Select this button and then select a TeleDongle or
 TeleBT Device from the list provided.</p><p>The first few lines of the dialog provide information
 about the connected device, including the product
 name, software version and hardware serial
@@ -1267,7 +1267,7 @@ EasyMini and TeleDongle v3 are all
 programmed directly
 over USB (self programming). Please read
 the directions for flashing devices in
-<a class="xref" href="#_updating_device_firmware" title="Appendix C. Updating Device Firmware">Appendix C, <em>Updating Device Firmware</em></a>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_fire_igniter"></a>11.10. Fire Igniter</h2></div></div></div><div class="figure"><a id="idm1644"></a><p class="title"><strong>Figure 11.18. Fire Igniter Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="fire-igniter.png" width="108" alt="fire-igniter.png" /></div></div></div><br class="figure-break" /><p>This activates the igniter circuits in the flight
+<a class="xref" href="#_updating_device_firmware" title="Appendix C. Updating Device Firmware">Appendix C, <em>Updating Device Firmware</em></a>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_fire_igniter"></a>11.10. Fire Igniter</h2></div></div></div><div class="figure"><a id="idm1648"></a><p class="title"><strong>Figure 11.18. Fire Igniter Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="fire-igniter.png" width="108" alt="fire-igniter.png" /></div></div></div><br class="figure-break" /><p>This activates the igniter circuits in the flight
 computer to help test recovery systems
 deployment.
 Because this command can operate over the
@@ -1283,13 +1283,13 @@ button. The word <span class="emphasis"><em>Arm</em></span> is replaced by a cou
 timer indicating that you have 10 seconds to press the
 <span class="emphasis"><em>Fire</em></span> 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 id="_scan_channels"></a>11.11. Scan Channels</h2></div></div></div><div class="figure"><a id="idm1663"></a><p class="title"><strong>Figure 11.19. Scan Channels Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="scan-channels.png" width="288" alt="scan-channels.png" /></div></div></div><br class="figure-break" /><p>This listens for telemetry packets on all of the
+igniter.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_scan_channels"></a>11.11. Scan Channels</h2></div></div></div><div class="figure"><a id="idm1667"></a><p class="title"><strong>Figure 11.19. Scan Channels Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="scan-channels.png" width="288" alt="scan-channels.png" /></div></div></div><br class="figure-break" /><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 baud rates and telemetry formats should
 be tried; by default, it only listens at 38400 baud
 with the standard telemetry format used in v1.0 and
-later firmware.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_load_maps"></a>11.12. Load Maps</h2></div></div></div><div class="figure"><a id="idm1673"></a><p class="title"><strong>Figure 11.20. Load Maps Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="load-maps.png" width="468" alt="load-maps.png" /></div></div></div><br class="figure-break" /><p>Before heading out to a new launch site, you can use
+later firmware.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_load_maps"></a>11.12. Load Maps</h2></div></div></div><div class="figure"><a id="idm1677"></a><p class="title"><strong>Figure 11.20. Load Maps Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="load-maps.png" width="468" alt="load-maps.png" /></div></div></div><br class="figure-break" /><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.</p><p>There’s a drop-down menu of launch sites we know
 about; if your favorites aren’t there, please let us
@@ -1337,7 +1337,7 @@ Google Maps; note that Google limits how many images
 you can fetch at 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 id="_monitor_idle"></a>11.13. Monitor Idle</h2></div></div></div><div class="figure"><a id="idm1706"></a><p class="title"><strong>Figure 11.21. Monitor Idle Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="monitor-idle.png" width="468" alt="monitor-idle.png" /></div></div></div><br class="figure-break" /><p>This brings up a dialog similar to the Monitor Flight
+you. Try again later.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_monitor_idle"></a>11.13. Monitor Idle</h2></div></div></div><div class="figure"><a id="idm1710"></a><p class="title"><strong>Figure 11.21. Monitor Idle Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="monitor-idle.png" width="468" alt="monitor-idle.png" /></div></div></div><br class="figure-break" /><p>This brings up a dialog similar to the Monitor Flight
 UI, except it works with the altimeter in “idle” mode
 by sending query commands to discover the current
 state rather than listening for telemetry
@@ -1950,7 +1950,7 @@ same time while keeping the identify of each one separate in
 the receiver. By default, the SSID is set to the last digit of
 the device serial number.</p><p>The APRS packet format includes a comment field that
 can have arbitrary text in it. AltOS uses this to send
-status information as shown in the following table.</p><div class="table"><a id="idm2042"></a><p class="title"><strong>Table A.1. Altus Metrum APRS Comments</strong></p><div class="table-contents"><table class="table" summary="Altus Metrum APRS Comments" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Field        </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Example        </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>L</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>GPS Status U for unlocked, L for locked</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Number of Satellites in View</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B4.0</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Altimeter Battery Voltage</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A3.7</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee Igniter Voltage</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>M3.7</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main Igniter Voltage</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1286</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Device Serial Number</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>4</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>1286</p></td><td style="" align="left" valign="top"><p>Device Serial Number</p></td></tr></tbody></table></div></div><br class="table-break" /><p>Here’s an example of an APRS comment showing GPS lock with 6
+status information as shown in the following table.</p><div class="table"><a id="idm2046"></a><p class="title"><strong>Table A.1. Altus Metrum APRS Comments</strong></p><div class="table-contents"><table class="table" summary="Altus Metrum APRS Comments" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Field        </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Example        </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>L</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>GPS Status U for unlocked, L for locked</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Number of Satellites in View</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B4.0</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Altimeter Battery Voltage</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A3.7</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee Igniter Voltage</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>M3.7</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main Igniter Voltage</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1286</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Device Serial Number</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>4</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>1286</p></td><td style="" align="left" valign="top"><p>Device Serial Number</p></td></tr></tbody></table></div></div><br class="table-break" /><p>Here’s an example of an APRS comment showing GPS lock with 6
 satellites in view, a primary battery at 4.0V, and
 apogee and main igniters both at 3.7V from device 1286.</p><pre class="literallayout">L6 B4.0 A3.7 M3.7 1286</pre><p>Here’s an example of an APRS comment showing GPS lock with 6
 satellites in view and a primary battery at 4.0V from device 1876.</p><pre class="literallayout">L6 B4.0 1876</pre><p>Make sure your primary battery is above 3.8V
@@ -2303,7 +2303,7 @@ 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 id="idm2293"></a><p class="title"><strong>Table D.1. Data Storage on Altus Metrum altimeters</strong></p><div class="table-contents"><table class="table" summary="Data Storage on Altus Metrum altimeters" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Device                 </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Bytes per Sample       </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Total Storage  </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Minutes at Full Rate</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1MB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>20</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v1.1 v1.2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2MB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>40</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v2.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>80</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMini v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5kB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>4</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMini v3.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>512kB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>EasyMini</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1MB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMega</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>32</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>40</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>EasyMega</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>32</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="" align="left" valign="top"><p>40</p></td></tr></tbody></table></div></div><br class="table-break" /><p>The on-board flash is partitioned into separate flight logs,
+several equal-sized blocks, one for each flight.</p><div class="table"><a id="idm2297"></a><p class="title"><strong>Table D.1. Data Storage on Altus Metrum altimeters</strong></p><div class="table-contents"><table class="table" summary="Data Storage on Altus Metrum altimeters" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Device                 </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Bytes per Sample       </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Total Storage  </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Minutes at Full Rate</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1MB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>20</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v1.1 v1.2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2MB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>40</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v2.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>80</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMini v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5kB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>4</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMini v3.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>512kB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>EasyMini</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1MB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMega</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>32</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>40</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>EasyMega</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>32</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="" align="left" valign="top"><p>40</p></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
@@ -2332,11 +2332,13 @@ 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="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="_altus_metrum_hardware_specifications"></a>Appendix E. Altus Metrum Hardware Specifications</h1></div></div></div><p>Here’s the full set of Altus Metrum products, both in
-production and retired.</p><div class="table"><a id="idm2388"></a><p class="title"><strong>Table E.1. Altus Metrum Flight Computer Electronics</strong></p><div class="table-contents"><table class="table" summary="Altus Metrum Flight Computer Electronics" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /><col class="col_5" /><col class="col_6" /><col class="col_7" /><col class="col_8" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Device </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> Barometer </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> Z-axis accel </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> GPS </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> 3D sensors </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> Storage </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> RF Output </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top"> Battery</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MP3H6115 10km (33k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MMA2202 50g</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>SkyTraq</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v1.1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MP3H6115 10km (33k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MMA2202 50g</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>SkyTraq</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v1.2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MP3H6115 10km (33k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>ADXL78 70g</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>SkyTraq</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v2.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MMA6555 102g</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uBlox Max-7Q</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>40mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMini v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MP3H6115 10km (33k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5kB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMini v3.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>512kB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>40mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>EasyMini v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7-12V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMega v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MMA6555 102g</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uBlox Max-7Q</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MPU6000 HMC5883</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>40mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMega v2.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MMA6555 102g</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uBlox Max-7Q</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MPU6000 HMC5883</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>40mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>EasyMega v1.0</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>MMA6555 102g</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>MPU6000 HMC5883</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="" align="left" valign="top"><p>3.7V</p></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm2581"></a><p class="title"><strong>Table E.2. Altus Metrum Flight Computer Mechanical Components</strong></p><div class="table-contents"><table class="table" summary="Altus Metrum Flight Computer Mechanical Components" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /><col class="col_5" /><col class="col_6" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Device</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Connectors</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Screw Terminals</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Width</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Length</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Tube Size</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Antenna Debug Companion USB Battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro Switch</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1 inch (2.54cm)</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2 ¾ inch (6.99cm)</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>29mm coupler</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMini v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Antenna Debug Battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>½ inch (1.27cm)</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1½ inch (3.81cm)</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>18mm coupler</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMini v2.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Antenna Debug USB Battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro Battery Switch</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0.8 inch (2.03cm)</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1½ inch (3.81cm)</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>24mm coupler</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>EasyMini</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Debug USB Battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro Battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0.8 inch (2.03cm)</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1½ inch (3.81cm)</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>24mm coupler</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMega</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Antenna Debug Companion USB Battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro Pyro A-D Switch Pyro battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1¼ inch (3.18cm)</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3¼ inch (8.26cm)</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>38mm coupler</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>EasyMega</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Debug Companion USB Battery</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro Pyro A-D Switch Pyro battery</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>1¼ inch (3.18cm)</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>2¼ inch (5.62cm)</p></td><td style="" align="left" valign="top"><p>38mm coupler</p></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="_release_notes"></a>Appendix F. Release Notes</h1></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_3"></a>F.1. Release Notes for Version 1.8.3</h2></div></div></div><p>Version 1.8.3 includes support for TeleMega version 3.0 along
+production and retired.</p><div class="table"><a id="idm2392"></a><p class="title"><strong>Table E.1. Altus Metrum Flight Computer Electronics</strong></p><div class="table-contents"><table class="table" summary="Altus Metrum Flight Computer Electronics" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /><col class="col_5" /><col class="col_6" /><col class="col_7" /><col class="col_8" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Device </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> Barometer </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> Z-axis accel </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> GPS </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> 3D sensors </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> Storage </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> RF Output </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top"> Battery</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MP3H6115 10km (33k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MMA2202 50g</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>SkyTraq</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v1.1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MP3H6115 10km (33k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MMA2202 50g</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>SkyTraq</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v1.2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MP3H6115 10km (33k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>ADXL78 70g</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>SkyTraq</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v2.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MMA6555 102g</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uBlox Max-7Q</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>40mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMini v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MP3H6115 10km (33k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5kB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMini v3.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>512kB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>40mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>EasyMini v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7-12V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMega v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MMA6555 102g</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uBlox Max-7Q</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MPU6000 HMC5883</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>40mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMega v2.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MMA6555 102g</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uBlox Max-7Q</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>MPU6000 HMC5883</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>40mW</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3.7V</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>EasyMega v1.0</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>MMA6555 102g</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>MPU6000 HMC5883</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>8MB</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="" align="left" valign="top"><p>3.7V</p></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm2585"></a><p class="title"><strong>Table E.2. Altus Metrum Flight Computer Mechanical Components</strong></p><div class="table-contents"><table class="table" summary="Altus Metrum Flight Computer Mechanical Components" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /><col class="col_5" /><col class="col_6" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Device</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Connectors</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Screw Terminals</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Width</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Length</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Tube Size</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Antenna Debug Companion USB Battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro Switch</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1 inch (2.54cm)</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2 ¾ inch (6.99cm)</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>29mm coupler</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMini v1.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Antenna Debug Battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>½ inch (1.27cm)</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1½ inch (3.81cm)</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>18mm coupler</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMini v2.0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Antenna Debug USB Battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro Battery Switch</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0.8 inch (2.03cm)</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1½ inch (3.81cm)</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>24mm coupler</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>EasyMini</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Debug USB Battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro Battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0.8 inch (2.03cm)</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1½ inch (3.81cm)</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>24mm coupler</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMega</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Antenna Debug Companion USB Battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro Pyro A-D Switch Pyro battery</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1¼ inch (3.18cm)</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3¼ inch (8.26cm)</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>38mm coupler</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>EasyMega</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Debug Companion USB Battery</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro Pyro A-D Switch Pyro battery</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>1¼ inch (3.18cm)</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>2¼ inch (5.62cm)</p></td><td style="" align="left" valign="top"><p>38mm coupler</p></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="_release_notes"></a>Appendix F. Release Notes</h1></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_4"></a>F.1. Release Notes for Version 1.8.4</h2></div></div></div><p>Version 1.8.4 includes support for EasyMini version 2.0</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos"></a>F.1.1. AltOS</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+Support for EasyMini version 2.0 hardware.
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_3"></a>F.2. Release Notes for Version 1.8.3</h2></div></div></div><p>Version 1.8.3 includes support for TeleMega version 3.0 along
 with two important flight computer fixes. This version also
 changes KML export data to make Tripoli Record reporting
 better and some updates to graph presentation and data
-downloading.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos"></a>F.1.1. AltOS</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altos_new_features"></a>AltOS New Features</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+downloading.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_2"></a>F.2.1. AltOS</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altos_new_features"></a>AltOS New Features</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support for TeleMega version 3.0 hardware.
 </li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altos_bug_fixes"></a>AltOS Bug Fixes</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Ground testing EasyMega and TeleMega additional pyro
@@ -2348,7 +2350,7 @@ from capturing log data.
 </li><li class="listitem">
 Fixed saving of pyro configuration that ended with
 <span class="emphasis"><em>Descending</em></span>.
-</li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications"></a>F.1.2. AltosUI and TeleGPS Applications</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altosui_new_features"></a>AltosUI New Features</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications"></a>F.2.2. AltosUI and TeleGPS Applications</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altosui_new_features"></a>AltosUI New Features</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support for TeleMega version 3.0.
 </li><li class="listitem">
 Graph lines have improved appearance to make them easier to
@@ -2372,18 +2374,18 @@ to make it more useful for Tripoli record reporting.
 </li><li class="listitem">
 CSV export now includes TeleMega/EasyMega pyro voltages and
 tilt angle.
-</li></ul></div><p></p></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_2"></a>F.2. Release Notes for Version 1.8.2</h2></div></div></div><p>Version 1.8.2 includes support for TeleGPS version 2.0 along
+</li></ul></div><p></p></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_2"></a>F.3. Release Notes for Version 1.8.2</h2></div></div></div><p>Version 1.8.2 includes support for TeleGPS version 2.0 along
 with accelerometer recalibration support in AltosUI.</p><p>1.8.2 also contains a couple of minor fixes for AltosUI when
-analyzing saved data files.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_2"></a>F.2.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+analyzing saved data files.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_3"></a>F.3.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support for TeleGPS version 2.0 hardware.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_2"></a>F.2.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_2"></a>F.3.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support for TeleGPS version 2.0.
 </li><li class="listitem">
 Accelerometer re-calibration user interface.
 </li></ul></div><p>AltosUI and TeleGPS Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Prevent some crashes when reading older saved flight data
 for graphing or KML export.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_1"></a>F.3. Release Notes for Version 1.8.1</h2></div></div></div><p>Version 1.8.1 includes an important bug fix for Apogee Lockout
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_1"></a>F.4. Release Notes for Version 1.8.1</h2></div></div></div><p>Version 1.8.1 includes an important bug fix for Apogee Lockout
 operation in all flight computers. Anyone using this option
 must update firmware.</p><p>This release also contains a change in how flight computers
 with accelerometers deal with speeds around and above Mach
@@ -2393,7 +2395,7 @@ disregard the barometric sensor above 330m/s (around Mach
 effect without ever going away entirely. This prevents early
 drogue deployment for flights which spend considerable time
 above Mach 1.</p><p>1.8.1 also contains a couple of minor fixes for AltosUI when
-analyzing saved data files.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_3"></a>F.3.1. AltOS</h3></div></div></div><p>AltOS Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+analyzing saved data files.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_4"></a>F.4.1. AltOS</h3></div></div></div><p>AltOS Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Handle time value wrapping in Apogee Lockout
 correctly. Without this, apogee lockout would sometimes
 prevent any drogue charge from firing.
@@ -2402,7 +2404,7 @@ Change Kalman filter on flight computers with accelerometer
 to continue using the barometric sensor even at high speeds
 to avoid unintentional drogue deployment during
 deceleration.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_3"></a>F.3.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_3"></a>F.4.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add new <span class="emphasis"><em>Huge</em></span> font size to make text even bigger on high
 resolution monitors.
 </li></ul></div><p>AltosUI Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
@@ -2411,12 +2413,12 @@ for graphing or KML export.
 </li><li class="listitem">
 Load frequency preference at startup. The loading code was
 broken, so you’d see only the default frequencies.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8"></a>F.4. Release Notes for Version 1.8</h2></div></div></div><p>Version 1.8 includes support for our new TeleBT v4.0 ground
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8"></a>F.5. Release Notes for Version 1.8</h2></div></div></div><p>Version 1.8 includes support for our new TeleBT v4.0 ground
 station, updates for data analysis in our ground station
 software and bug fixes in in the flight software for all our
-boards and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_4"></a>F.4.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+boards and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_5"></a>F.5.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleBT v4.0 boards.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_4"></a>F.4.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_4"></a>F.5.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleBT v4.0 hardware
 </li><li class="listitem">
 Rewrite graphing and export functions. This code now handles
@@ -2427,20 +2429,20 @@ acceleration data more accurate.
 </li></ul></div><p>AltosUI Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Correct axis labeling of magnetic sensor in TeleMega and
 EasyMega. The Y and Z axes were flipped.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_7"></a>F.5. Release Notes for Version 1.7</h2></div></div></div><p>Version 1.7 includes support for our new TeleMini v3.0
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_7"></a>F.6. Release Notes for Version 1.7</h2></div></div></div><p>Version 1.7 includes support for our new TeleMini v3.0
 flight computer and bug fixes in in the flight software for all our boards
-and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_5"></a>F.5.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_6"></a>F.6.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleMini v3.0 boards.
 </li></ul></div><p>AltOS Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix interrupt priorities on STM32L processors. Run timer
 interrupt at lowest priority so that device interrupts get
 serviced first.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_5"></a>F.5.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_5"></a>F.6.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleMini v3.0 hardware
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_8"></a>F.6. Release Notes for Version 1.6.8</h2></div></div></div><p>Version 1.6.8 fixes a TeleMega and TeleMetrum v2.0 bug where
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_8"></a>F.7. Release Notes for Version 1.6.8</h2></div></div></div><p>Version 1.6.8 fixes a TeleMega and TeleMetrum v2.0 bug where
 the device could stop logging data and transmitting
 telemetry in flight. All TeleMega v1.0, v2.0 and TeleMetrum
-v2.0 users should update their flight firmware.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_6"></a>F.6.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+v2.0 users should update their flight firmware.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_7"></a>F.7.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix STM32L DMA driver to work around STM32L SoC DMA priority
 issue t lock-up in the logging or radio code, either of
 which could stop data logging and telemetry.
@@ -2453,7 +2455,7 @@ flight.
 </li></ul></div><p>AltOS changes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Flash LEDS on all products briefly during power up so that
 they can be tested during production.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications"></a>F.6.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications"></a>F.7.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Re-enable go/no-go entries after they’ve been disabled due
 to lack of data. If telemetry information is delayed when
 the Ui starts up, sometimes important fields would get
@@ -2461,20 +2463,20 @@ disabled to never re-appear.
 </li><li class="listitem">
 Deal with ground station failure better during Configure
 Ground Station operation by cleaning up pending operations.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_5"></a>F.7. Release Notes for Version 1.6.5</h2></div></div></div><p>Version 1.6.5 fixes a TeleMega and TeleMetrum v2.0 bug where
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_5"></a>F.8. Release Notes for Version 1.6.5</h2></div></div></div><p>Version 1.6.5 fixes a TeleMega and TeleMetrum v2.0 bug where
 the device would often stop logging data and transmitting
 telemetry in flight. All TeleMega v1.0, v2.0 and TeleMetrum
-v2.0 users should update their flight firmware.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_7"></a>F.7.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+v2.0 users should update their flight firmware.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_8"></a>F.8.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix STM32L SPI driver to prevent lock-up in the logging or
 radio code, either of which could stop data logging and
 telemetry. Found and characterized by Chuck Haskin, who also
 tested the new firmware before release.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications_2"></a>F.7.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications_2"></a>F.8.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Deliver firmward for TeleMega v2.0 and TeleBT v3.0 with
 Windows package.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_4"></a>F.8. Release Notes for Version 1.6.4</h2></div></div></div><p>Version 1.6.4 fixes a bluetooth communication problem with
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_4"></a>F.9. Release Notes for Version 1.6.4</h2></div></div></div><p>Version 1.6.4 fixes a bluetooth communication problem with
 TeleBT v1.0 devices, along with some altosui and altosdroid
-minor nits. It also now ships firmware for some newer devices.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_8"></a>F.8.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+minor nits. It also now ships firmware for some newer devices.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_9"></a>F.9.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix hardware flow control on TeleBT v1.0. Hardware RTS/CTS
 doesn’t seem to work, switch from using the hardware to
 driving these pins with software.
@@ -2482,7 +2484,7 @@ driving these pins with software.
 Fix ARM USB drivers to deal with OS restarts. Needed to
 reset all USB-related state when the USB bus is reset. These
 fixes affect all STM32L, STM32F0 and LPC11U14 based devices.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications_3"></a>F.8.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI, TeleGPS and AltosDroid New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications_3"></a>F.9.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI, TeleGPS and AltosDroid New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Automatically switch from meters or feet to kilometers or
 miles for distance units.
 </li><li class="listitem">
@@ -2493,17 +2495,17 @@ Abort map preloading when the preload map dialog is closed.
 In AltosDroid, Don’t reconnect to last device if the user
 had disconnected it the last time the application was
 active.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation"></a>F.8.3. Documentation</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation"></a>F.9.3. Documentation</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Mention TeleMega v2.0 in hardware specs table.
 </li><li class="listitem">
 Document TeleGPS RF output in telegps manual.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_3"></a>F.9. Release Notes for Version 1.6.3</h2></div></div></div><p>Version 1.6.3 adds idle mode to AltosDroid and has bug fixes
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_3"></a>F.10. Release Notes for Version 1.6.3</h2></div></div></div><p>Version 1.6.3 adds idle mode to AltosDroid and has bug fixes
 for our host software on desktops, laptops an android devices
-along with BlueTooth support for Windows.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_9"></a>F.9.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+along with BlueTooth support for Windows.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_10"></a>F.10.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix hardware flow control on TeleBT v3.0. RTS/CTS is
 wired backwards on this board, switch from using the
 hardware to driving these pins with software.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_6"></a>F.9.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_6"></a>F.10.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add BlueTooth support for Windows operating system. This
 supports connections to TeleBT over BlueTooth rather than
 just USB.
@@ -2525,7 +2527,7 @@ the connected Altus Metrum USB devices appear again.
 </li><li class="listitem">
 Fix acceleration data presented in MonitorIdle mode for
 TeleMetrum v2.0 flight computers.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosdroid_2"></a>F.9.3. AltosDroid</h3></div></div></div><p>AltosDroid new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosdroid_2"></a>F.10.3. AltosDroid</h3></div></div></div><p>AltosDroid new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Monitor Idle mode. Check state of flight computer while in
 idle mode over the radio link
 </li><li class="listitem">
@@ -2563,12 +2565,12 @@ Recover old tracker positions when restarting
 application. This finally allows you to safely stop and
 restart the application without losing the last known
 location of any tracker.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_2"></a>F.9.4. Documentation</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_2"></a>F.10.4. Documentation</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Document TeleMega and EasyMega additional pyro channel
 continuity audio alert pattern.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_2"></a>F.10. Release Notes for Version 1.6.2</h2></div></div></div><p>Version 1.6.2 includes support for our updated TeleMega v2.0
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_2"></a>F.11. Release Notes for Version 1.6.2</h2></div></div></div><p>Version 1.6.2 includes support for our updated TeleMega v2.0
 product and bug fixes in in the flight software for all our boards
-and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_10"></a>F.10.1. AltOS</h3></div></div></div><p>AltOS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_11"></a>F.11.1. AltOS</h3></div></div></div><p>AltOS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleMega v2.0 boards.
 </li><li class="listitem">
 Add PWM servo driver. There’s no higher level code using
@@ -2577,14 +2579,14 @@ servo output connector.
 </li></ul></div><p>AltOS Fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Slow down telemetry packets to allow receiver to keep
 up.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_7"></a>F.10.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS Fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_7"></a>F.11.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS Fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix post-flight orientation computation when processing
 TeleMega and EasyMega eeprom data files.
 </li><li class="listitem">
 Capture complete eeprom data even when there are invalid
 entries in the data. This keeps reading eeprom contents and
 writing the associated .eeprom file when an error is detected.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_3"></a>F.10.3. Documentation</h3></div></div></div><p>We spent a bunch of time trying to improve our documentation</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_3"></a>F.11.3. Documentation</h3></div></div></div><p>We spent a bunch of time trying to improve our documentation</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 HTML versions now have a table of contents on the left side.
 </li><li class="listitem">
 EasyMini now has its own shorter manual.
@@ -2593,9 +2595,9 @@ Provide links between sections in each document.
 </li><li class="listitem">
 Lots of minor rewriting and restructuring to avoid
 duplication of information
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_1"></a>F.11. Release Notes for Version 1.6.1</h2></div></div></div><p>Version 1.6.1 includes support for our updated TeleBT v3.0
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_1"></a>F.12. Release Notes for Version 1.6.1</h2></div></div></div><p>Version 1.6.1 includes support for our updated TeleBT v3.0
 product and bug fixes in in the flight software for all our boards
-and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_11"></a>F.11.1. AltOS</h3></div></div></div><p>AltOS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_12"></a>F.12.1. AltOS</h3></div></div></div><p>AltOS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleBT v3.0 boards.
 </li><li class="listitem">
 Add support for uncompressed APRS data, providing support
@@ -2605,7 +2607,7 @@ altitude data.
 </li></ul></div><p>AltOS Fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Make TeleDongle and TeleBT more tolerant of data rate
 variations from transmitting devices.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_8"></a>F.11.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_8"></a>F.12.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add map to Monitor Idle display. It’s nice to be able to
 verify that maps are working, instead of needing to use
 Monitor Flight.
@@ -2643,7 +2645,7 @@ will take longer to respond to changes now.
 </li><li class="listitem">
 Make Replay Flight run in realtime again. It had been set to
 run at 10x speed by mistake.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosdroid_3"></a>F.11.3. AltosDroid</h3></div></div></div><p>AltosDroid New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosdroid_3"></a>F.12.3. AltosDroid</h3></div></div></div><p>AltosDroid New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add offline map support using mapping code from AltosUI.
 </li><li class="listitem">
 Support TeleDongle (and TeleBT via USB) on devices
@@ -2671,9 +2673,9 @@ Make voice announcements depend on current tab.
 </li><li class="listitem">
 Compute adjustment to current travel direction while in
 motion towards rocket.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6"></a>F.12. Release Notes for Version 1.6</h2></div></div></div><p>Version 1.6 includes support for our updated TeleDongle v3.0
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6"></a>F.13. Release Notes for Version 1.6</h2></div></div></div><p>Version 1.6 includes support for our updated TeleDongle v3.0
 product and bug fixes in in the flight software for all our boards
-and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_12"></a>F.12.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_13"></a>F.13.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleDongle v3.0 boards.
 </li></ul></div><p>AltOS Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Don’t beep out the continuity twice by accident in idle mode.
@@ -2693,7 +2695,7 @@ interrupt code would occasionally wedge on long transfers
 if interrupts were blocked for too long. This affects all
 released TeleGPS products; if you have a TeleGPS device,
 you’ll want to reflash the firmware.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_9"></a>F.12.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_9"></a>F.13.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Compute tilt angle from TeleMega and EasyMega log
 files. This duplicates the quaternion-based angle tracking
 code from the flight firmware inside the ground station
@@ -2739,9 +2741,9 @@ five seconds these days.
 In the Scan Channels code, reset pending flight state
 information each time we change channels. This avoids having
 flight computers appear on multiple frequencies by accident.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_5"></a>F.13. Release Notes for Version 1.5</h2></div></div></div><p>Version 1.5 is a major release. It includes support for our new
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_5"></a>F.14. Release Notes for Version 1.5</h2></div></div></div><p>Version 1.5 is a major release. It includes support for our new
 EasyMega product, new features and bug fixes in in the flight
-software for all our boards and the AltosUI ground station</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_13"></a>F.13.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+software for all our boards and the AltosUI ground station</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_14"></a>F.14.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for EasyMega boards.
 </li><li class="listitem">
 Make the APRS SSID be configurable. This lets you track
@@ -2775,7 +2777,7 @@ the delay, but become bad before the delay expires.
 Allow negative numbers in pyro configuration values. This
 lets you specify things like descending speed or
 deceleration.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_10"></a>F.13.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_10"></a>F.14.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support telemetry baud rate selection. Adds menus to
 the flight monitoring and configuration for baud rate
 selection.
@@ -2792,18 +2794,18 @@ Make the <span class="emphasis"><em>Graph</em></span> button on the landed tab w
 Make tests for Java on Windows a bit smarter, and also
 provide the user with the option to skip installing Java for
 cases where we just can’t figure out what version is installed.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_4_2"></a>F.14. Release Notes for Version 1.4.2</h2></div></div></div><p>Version 1.4.2 is a minor release. It fixes Java-related install issues on
-Windows</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_11"></a>F.14.1. AltosUI and TeleGPS Applications</h3></div></div></div><p>Windows Install Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_4_2"></a>F.15. Release Notes for Version 1.4.2</h2></div></div></div><p>Version 1.4.2 is a minor release. It fixes Java-related install issues on
+Windows</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_11"></a>F.15.1. AltosUI and TeleGPS Applications</h3></div></div></div><p>Windows Install Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Checks for Java installation data in more registry locations.
 </li><li class="listitem">
 Allows user to bypass Java installation in case the
 detection fails.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_4_1"></a>F.15. Release Notes for Version 1.4.1</h2></div></div></div><p>Version 1.4.1 is a minor release. It fixes install issues on
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_4_1"></a>F.16. Release Notes for Version 1.4.1</h2></div></div></div><p>Version 1.4.1 is a minor release. It fixes install issues on
 Windows and provides the missing TeleMetrum V2.0 firmware. There
 aren’t any changes to the firmware or host applications at
 all. All Windows users will want to upgrade to get the signed
 driver, but Mac and Linux users who do not need the TeleMetrum
-V2.0 firmware image will not need to upgrade.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_12"></a>F.15.1. AltosUI and TeleGPS Applications:</h3></div></div></div><p>Windows Install Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+V2.0 firmware image will not need to upgrade.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_12"></a>F.16.1. AltosUI and TeleGPS Applications:</h3></div></div></div><p>Windows Install Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Provide signed Windows driver files. This should avoid any need to
 disable driver signature checking on Windows 7 or 8.
 </li><li class="listitem">
@@ -2821,9 +2823,9 @@ packages for Linux, Mac and Windows.
 Include Google Application Key for map downloading. The 1.4
 release didn’t have this key in the released version of the
 software, making map downloading fail for most people.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_4"></a>F.16. Release Notes for Version 1.4</h2></div></div></div><p>Version 1.4 is a major release. It includes support for our new
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_4"></a>F.17. Release Notes for Version 1.4</h2></div></div></div><p>Version 1.4 is a major release. It includes support for our new
 TeleGPS product, new features and bug fixes in in the flight
-software for all our boards and the AltosUI ground station</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_14"></a>F.16.1. AltOS</h3></div></div></div><p>AltOS new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+software for all our boards and the AltosUI ground station</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_15"></a>F.17.1. AltOS</h3></div></div></div><p>AltOS new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleGPS boards.
 </li><li class="listitem">
 Make the beeper tone configurable, making it
@@ -2853,7 +2855,7 @@ number to 2 on TeleMega and TeleMetrum v2.
 </li><li class="listitem">
 Fix u-Blox GPS driver to mark course and speed data
 as being present.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application"></a>F.16.2. AltosUI Application</h3></div></div></div><p>AltosUI new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application"></a>F.17.2. AltosUI Application</h3></div></div></div><p>AltosUI new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add zooming and new content types (terrain and road
 maps) to map view. Change map storage format from
 PNG to Jpeg, which saves a huge amount of disk
@@ -2910,12 +2912,12 @@ Handle TeleMetrum and TeleMini eeprom files
 generated with pre-1.0 firmware. Those ancient
 versions didn’t report the log format, so just use
 the product name instead.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_telegps_application"></a>F.16.3. TeleGPS Application</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_telegps_application"></a>F.17.3. TeleGPS Application</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 New application designed for use with TeleGPS boards.
 </li><li class="listitem">
 Shares code with AltosUI, mostly just trimmed down
 to focus on TeleGPS-related functions.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_4"></a>F.16.4. Documentation</h3></div></div></div><p>Documentation changes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_4"></a>F.17.4. Documentation</h3></div></div></div><p>Documentation changes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Re-create the drill template images; they should
 print correctly from Firefox at least. Ship these as
 individual PDF files so they’re easy to print.
@@ -2923,8 +2925,8 @@ individual PDF files so they’re easy to print.
 Add a description of the <span class="emphasis"><em>Apogee Lockout</em></span> setting,
 which prevents the apogee charge from firing for a
 configurable amount of time after boost.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_3_2"></a>F.17. Release Notes for Version 1.3.2</h2></div></div></div><p>Version 1.3.2 is a minor release. It includes small bug fixes for
-the TeleMega flight software and AltosUI ground station</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_15"></a>F.17.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_3_2"></a>F.18. Release Notes for Version 1.3.2</h2></div></div></div><p>Version 1.3.2 is a minor release. It includes small bug fixes for
+the TeleMega flight software and AltosUI ground station</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_16"></a>F.18.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 On TeleMega, limit number of logged GPS status
 information to 12 satellites. That’s all there is
 room for in the log structure.
@@ -2934,7 +2936,7 @@ position and keeps sending that if we lose GPS
 lock. Marks locked/unlocked by sending L/U in the
 APRS comment field along with the number of sats in
 view and voltages.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_2"></a>F.17.2. AltosUI Application</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_2"></a>F.18.2. AltosUI Application</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 If the TeleMega flight firmware reports that it has
 logged information about more than 12 satellites,
 don’t believe it as the log only holds 12 satellite
@@ -2947,8 +2949,8 @@ data.
 Use letters (A, B, C, D) for alternate pyro channel
 names instead of numbers (0, 1, 2, 3) in the Fire
 Igniter dialog.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_3_1"></a>F.18. Release Notes for Version 1.3.1</h2></div></div></div><p>Version 1.3.1 is a minor release. It improves support for
-TeleMega, TeleMetrum v2.0, TeleMini v2.0 and EasyMini.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_16"></a>F.18.1. AltOS</h3></div></div></div><p>AltOS new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_3_1"></a>F.19. Release Notes for Version 1.3.1</h2></div></div></div><p>Version 1.3.1 is a minor release. It improves support for
+TeleMega, TeleMetrum v2.0, TeleMini v2.0 and EasyMini.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_17"></a>F.19.1. AltOS</h3></div></div></div><p>AltOS new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Improved APRS mode. Now uses compressed position
 format for smaller data size, improved precision and
 to include altitude data as well as latitude and
@@ -2970,7 +2972,7 @@ Fix antenna-down mode accelerometer
 configuration. Antenna down mode wasn’t working
 because the accelerometer calibration values were
 getting re-computed incorrectly in inverted mode.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_3"></a>F.18.2. AltosUI Application</h3></div></div></div><p>AltosUI new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_3"></a>F.19.2. AltosUI Application</h3></div></div></div><p>AltosUI new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Display additional TeleMega sensor values in real
 units. Make all of these values available for
 plotting. Display TeleMega orientation value in the
@@ -2984,8 +2986,8 @@ Main.
 Limit data rate when downloading satellite images
 from Google to make sure we stay within their limits
 so that all of the map tiles download successfully.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_3"></a>F.19. Release Notes for 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><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_17"></a>F.19.1. AltOS</h3></div></div></div><p>AltOS new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_3"></a>F.20. Release Notes for 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><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_18"></a>F.20.1. AltOS</h3></div></div></div><p>AltOS new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add STM32L processor support. This includes
 enhancements to the scheduler to support products
 with many threads.
@@ -3009,7 +3011,7 @@ accelerometer, Invensense MPU6000 3-axis
 accelerometer + 3 axis gyro, Honeywell HMC5883
 3-axis magnetic sensor and the TI CC1120 and CC115L
 digital FM transceivers
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_4"></a>F.19.2. AltosUI Application</h3></div></div></div><p>AltosUI new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_4"></a>F.20.2. AltosUI Application</h3></div></div></div><p>AltosUI new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support TeleMega, TeleMetrum v2.0, TeleMini v2.0 and
 EasyMini telemetry and log formats.
 </li></ul></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
@@ -3022,9 +3024,9 @@ Add <span class="emphasis"><em>Download</em></span> button to menu bar.
 </li><li class="listitem">
 Save the last log directory and offer that as the
 default for new downloads
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_2_1"></a>F.20. Release Notes for Version 1.2.1</h2></div></div></div><p>Version 1.2.1 is a minor release. It adds support for TeleBT and
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_2_1"></a>F.21. Release Notes for 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><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_18"></a>F.20.1. AltOS</h3></div></div></div><p>AltOS new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+AltosUI and fixes some bugs in the AltOS firmware.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_19"></a>F.21.1. AltOS</h3></div></div></div><p>AltOS new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleBT
 </li></ul></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 In TeleMini recovery mode (when booted with the
@@ -3044,7 +3046,7 @@ 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></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_5"></a>F.20.2. AltosUI Application</h3></div></div></div><p>AltosUI application new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_5"></a>F.21.2. AltosUI Application</h3></div></div></div><p>AltosUI application new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Make the initial position of the AltosUI top level
 window configurable. Along with this change, the
 other windows will pop up at <span class="emphasis"><em>sensible</em></span> places now,
@@ -3078,15 +3080,15 @@ 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></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosdroid_4"></a>F.20.3. AltosDroid</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosdroid_4"></a>F.21.3. AltosDroid</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 First version of this application
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_2"></a>F.21. Release Notes for 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><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_19"></a>F.21.1. AltOS</h3></div></div></div><p>AltOS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_2"></a>F.22. Release Notes for 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><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_20"></a>F.22.1. AltOS</h3></div></div></div><p>AltOS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 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></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_micropeak_application"></a>F.21.2. AltosUI and MicroPeak Application</h3></div></div></div><p>New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_micropeak_application"></a>F.22.2. AltosUI and MicroPeak Application</h3></div></div></div><p>New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Added MicroPeak application
 </li></ul></div><p>AltosUI and MicroPeak fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Distribute Mac OS X packages in disk image (<span class="emphasis"><em>.dmg</em></span>)
@@ -3097,11 +3099,11 @@ 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><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_1"></a>F.22. Release Notes for Version 1.1</h2></div></div></div><p>Version 1.1.1 is a bug-fix release. It fixes a couple of bugs
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_1"></a>F.23. Release Notes for Version 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 file export issue, and for suggesting the
-addition of the Ground Distance value in the Descent tab.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_20"></a>F.22.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+addition of the Ground Distance value in the Descent tab.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_21"></a>F.23.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 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
@@ -3110,7 +3112,7 @@ impossible to delete flight data or update
 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></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_2"></a>F.22.2. AltosUI</h3></div></div></div><p>AltosUI new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_2"></a>F.23.2. AltosUI</h3></div></div></div><p>AltosUI new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 The “Descent” tab displays the range to the rocket,
 which is a combination of the over-the-ground
 distance to the rockets current latitude/longitude
@@ -3139,8 +3141,8 @@ 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><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_1_2"></a>F.23. Release Notes for 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><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_21"></a>F.23.1. AltOS</h3></div></div></div><p>AltOS Firmware New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_1_2"></a>F.24. Release Notes for 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><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_22"></a>F.24.1. AltOS</h3></div></div></div><p>AltOS Firmware New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add apogee-lockout value. Overrides the apogee
 detection logic to prevent incorrect apogee charge
 firing.
@@ -3160,7 +3162,7 @@ packets was from 320ms ago.
 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></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_3"></a>F.23.2. AltosUI</h3></div></div></div><p>AltosUI New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_3"></a>F.24.2. AltosUI</h3></div></div></div><p>AltosUI New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Make the look-n-feel configurable, providing a choice from
 the available options.
 </li><li class="listitem">
@@ -3214,8 +3216,8 @@ the flight monitoring window. This eliminates
 entries duplicated from the header and adds both
 current altitude and pad altitude, which are useful
 in <span class="emphasis"><em>Monitor Idle</em></span> mode.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_0_1"></a>F.24. Release Notes for 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><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_22"></a>F.24.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_0_1"></a>F.25. Release Notes for 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><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_23"></a>F.25.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add TeleMini v1.0 support.
 </li><li class="listitem">
 Support operation of TeleMetrum with the antenna pointing
@@ -3250,7 +3252,7 @@ within a fraction of a second. In addition, this approach
 allows the baro-only TeleMini device to correctly identify
 Mach transitions, avoiding the error-prone selection of a
 Mach delay.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_6"></a>F.24.2. AltosUI Application</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_6"></a>F.25.2. AltosUI Application</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add main/apogee voltage graphs to the data
 plot. This provides a visual indication if the
 igniters fail before being fired.
@@ -3294,8 +3296,8 @@ 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></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_0_9_2"></a>F.25. Release Notes for 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="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_4"></a>F.25.1. AltosUI</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_0_9_2"></a>F.26. Release Notes for 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="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_4"></a>F.26.1. AltosUI</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix plotting problems due to missing file in the Mac
 OS install image.
 </li><li class="listitem">
@@ -3303,8 +3305,8 @@ Always read whole eeprom blocks, mark empty records
 invalid, display parsing errors to user.
 </li><li class="listitem">
 Add software version to Configure AltosUI dialog
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_0_9"></a>F.26. Release Notes for 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="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_23"></a>F.26.1. AltOS</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_0_9"></a>F.27. Release Notes for 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="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_24"></a>F.27.1. AltOS</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 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
@@ -3321,12 +3323,12 @@ 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="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_7"></a>F.26.2. AltosUI Application</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_7"></a>F.27.2. AltosUI Application</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support for telemetry format changes.
 </li><li class="listitem">
 Support for multiple flight logs.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_0_8"></a>F.27. Release Notes for Version 0.8</h2></div></div></div><p>Version 0.8 offers a major upgrade in the AltosUI
-interface.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_8"></a>F.27.1. AltosUI Application:</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_0_8"></a>F.28. Release Notes for Version 0.8</h2></div></div></div><p>Version 0.8 offers a major upgrade in the AltosUI
+interface.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_8"></a>F.28.1. AltosUI Application:</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 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
@@ -3365,8 +3367,8 @@ automatically connect to it and prepare to monitor a flight.
 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><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_0_7_1"></a>F.28. Release Notes for 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.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_9"></a>F.28.1. AltosUI Application</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_0_7_1"></a>F.29. Release Notes for 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.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application_9"></a>F.29.1. AltosUI Application</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 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
index 3c058697a7c84211b689bcd8f79a45d7ada7709a..8ea8e4856047fde66cac32bc5532d452a750c013 100644 (file)
Binary files a/AltOS/doc/altusmetrum.pdf and b/AltOS/doc/altusmetrum.pdf differ
index 7d903876bcb16864ffd3717ac4064c6abf55ee25..b9a684b611ab67ce7223b1448ce76b53354c5217 100644 (file)
-<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="idm46040259592256"></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="idm46040233083952"></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 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="#idm46040232383776">1. Companion Port</a></span></dt><dt><span class="section"><a href="#idm46040232379280">2. Companion SPI Protocol</a></span></dt><dt><span class="section"><a href="#idm46040232376384">3. SPI Message Formats</a></span></dt><dd><dl><dt><span class="section"><a href="#idm46040232375104">3.1. Command Message</a></span></dt><dt><span class="section"><a href="#idm46040233245360">3.2. SETUP reply message</a></span></dt><dt><span class="section"><a href="#idm46040233223824">3.3. FETCH reply message</a></span></dt></dl></dd><dt><span class="section"><a href="#idm46040227732240">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="idm46040232383776"></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
-      be used to connect TeleMetrum to external companion boards
-      (hence the name).
-    </p><p>
-      The Companion Port provides two different functions:
-      </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.
-         </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
-         </p></li></ul></div><p>
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46040232379280"></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
-      telemetry data for transmission during flight.
-    </p><p>
-      At startup time, the flight computer sends a setup request
-      packet, and the companion board returns a board identifier, the
-      desired telemetry update period and the number of data channels
-      provided. The flight computer doesn't interpret the telemetry
-      data at all, simply packing it up and sending it over the link.
-      Telemetry packets are 32 bytes long, and companion packets use 8
-      bytes as a header leaving room for a maximum of 12 16-bit data
-      values.
-    </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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46040232376384"></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.
-    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm46040232375104"></a>3.1. Command Message</h3></div></div></div><div class="table"><a name="idm46040232374432"></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="idm46040233261392"></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
-       power-up and will then send FETCH messages no more often than
-       the rate specified in the SETUP reply. NOTIFY messages will be
-       sent whenever the flight state changes.
-      </p><p>
-       'flight_state' records the current state of the flight,
-       whether on the pad, under power, coasting to apogee or
-       descending on the drogue or main chute.
-      </p><p>
-       'tick' provides the current flight computer clock, which 
-       be used to synchronize data recorded on the flight computer
-       with that recorded on the companion board in post-flight analysis.
-      </p><p>
-       'serial' is the product serial number of the flight computer,
-       'flight' is the flight sequence number. Together, these two
-       uniquely identify the flight and can be recorded with any
-       companion board data logging to associate the companion data
-       with the proper flight.
-      </p><p>
-       NOTIFY commands require no reply at all, they are used solely
-       to inform the companion board when the state of the flight, as
-       computed by the flight computer, changes. Companion boards can
-       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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46040233245360"></a>3.2. SETUP reply message</h3></div></div></div><div class="table"><a name="idm46040233244688"></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
-       reply to a FETCH command, and how often to fetch that data.
-      </p><p>
-       To detect the presence of a companion board, the flight
-       computer checks to make sure that board_id_inverse is the
-       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"><div class="titlepage"><div><div><h3 class="title"><a name="idm46040233223824"></a>3.3. FETCH reply message</h3></div></div></div><div class="table"><a name="idm46040227748144"></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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm46040227732240"></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
-      external cards to TeleMetrum was fairly simple. We set the
-      software piece of this puzzle aside until we had a companion
-      board to use.
-    </p><p>
-      The first companion board was TeleScience. Designed to collect
-      temperature data from the nose and fin of the airframe, the main
-      requirement for the companion port was that it be able to report
-      telemetry data during flight as a back-up in case the
-      TeleScience on-board data was lost.
-    </p><p>
-      The second companion board, TelePyro, provides 8 additional
-      channels for deployment, staging or other activities. To avoid
-      re-programming the TeleMetrum to use TelePyro, we decided to
-      provide enough information over the companion link for it to
-      independently control those channels.
-    </p><p>
-      Providing a standard, constant interface between the flight
-      computer and companion boards allows for the base flight
-      computer firmware to include support for companion boards.
-    </p></div></div></body></html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AltOS Companion Port</title><link rel="stylesheet" type="text/css" href="am.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /></head><body><div xml:lang="en" class="article" lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="idm1"></a>AltOS Companion Port</h2></div><div><h3 class="subtitle"><em>Protocol Definitions</em></h3></div><div><div class="author"><h3 class="author"><span class="firstname">Keith</span> <span class="surname">Packard</span></h3><code class="email">&lt;<a class="email" href="mailto:keithp@keithp.com">keithp@keithp.com</a>&gt;</code></div></div><div><p class="copyright">Copyright © 2012 Keith Packard</p></div><div><div class="legalnotice"><a id="idm13"></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><a href="companion-revhistory.html">Revision History</a></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="#_companion_port">1. Companion Port</a></span></dt><dt><span class="section"><a href="#_companion_spi_protocol">2. Companion SPI Protocol</a></span></dt><dt><span class="section"><a href="#_spi_message_formats">3. SPI Message Formats</a></span></dt><dd><dl><dt><span class="section"><a href="#_setup_reply_message">3.1. SETUP reply message</a></span></dt><dt><span class="section"><a href="#_fetch_reply_message">3.2. FETCH reply message</a></span></dt></dl></dd><dt><span class="section"><a href="#_history_and_motivation">4. History and Motivation</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_companion_port"></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 be used to connect TeleMetrum to external companion
+boards (hence the name).</p><p>The Companion Port provides two different functions:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+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">
+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></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_companion_spi_protocol"></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
+telemetry data for transmission during flight.</p><p>At startup time, the flight computer sends a setup request
+packet, and the companion board returns a board identifier,
+the desired telemetry update period and the number of data
+channels provided. The flight computer doesn’t interpret the
+telemetry data at all, simply packing it up and sending it
+over the link.  Telemetry packets are 32 bytes long, and
+companion packets use 8 bytes as a header leaving room for a
+maximum of 12 16-bit data values.</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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_spi_message_formats"></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.</p><div class="table"><a id="idm38"></a><p class="title"><strong>Table 1. Companion Command Message</strong></p><div class="table-contents"><table class="table" summary="Companion Command Message" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>command</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Command identifier</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>flight_state</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Current flight computer state</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>tick</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Flight computer clock (100 ticks/second)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>serial</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Flight computer serial number</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>flight</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Flight number</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p></p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p></p></td><td style="" align="left" valign="top"><p></p></td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idm109"></a><p class="title"><strong>Table 2. Companion Command Identifiers</strong></p><div class="table-contents"><table class="table" summary="Companion Command Identifiers" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Value</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>SETUP</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Supply the flight computer with companion
+information</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>FETCH</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Return telemetry information</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>3</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>NOTIFY</p></td><td style="" align="left" valign="top"><p>Tell companion board when flight state changes</p></td></tr></tbody></table></div></div><br class="table-break" /><p>The flight computer will send a SETUP message shortly after
+power-up and will then send FETCH messages no more often than
+the rate specified in the SETUP reply. NOTIFY messages will be
+sent whenever the flight state changes.</p><p><span class="emphasis"><em>flight_state</em></span> records the current state of the flight,
+whether on the pad, under power, coasting to apogee or
+descending on the drogue or main chute.</p><p><span class="emphasis"><em>tick</em></span> provides the current flight computer clock, which
+be used to synchronize data recorded on the flight computer
+with that recorded on the companion board in post-flight analysis.</p><p><span class="emphasis"><em>serial</em></span> is the product serial number of the flight computer,
+<span class="emphasis"><em>flight</em></span> is the flight sequence number. Together, these two
+uniquely identify the flight and can be recorded with any
+companion board data logging to associate the companion data
+with the proper flight.</p><p>NOTIFY commands require no reply at all, they are used solely
+to inform the companion board when the state of the flight, as
+computed by the flight computer, changes. Companion boards can
+use this to change data collection parameters, disabling data
+logging until the flight starts and terminating it when the
+flight ends.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_setup_reply_message"></a>3.1. SETUP reply message</h3></div></div></div><div class="table"><a id="idm155"></a><p class="title"><strong>Table 3. SETUP reply contents</strong></p><div class="table-contents"><table class="table" summary="SETUP reply contents" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>board_id</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Board identifier</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>board_id_inverse</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>~board_id—used to tell if a board is present</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>update_period</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Minimum time (in 100Hz ticks) between FETCH commands</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>channels</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Number of data channels to retrieve in FETCH command</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p></p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p></p></td><td style="" align="left" valign="top"><p></p></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
+reply to a FETCH command, and how often to fetch that data.</p><p>To detect the presence of a companion board, the flight
+computer checks to make sure that board_id_inverse is the
+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"><div class="titlepage"><div><div><h3 class="title"><a id="_fetch_reply_message"></a>3.2. FETCH reply message</h3></div></div></div><div class="table"><a id="idm221"></a><p class="title"><strong>Table 4. FETCH reply contents</strong></p><div class="table-contents"><table class="table" summary="FETCH reply contents" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>data0</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0th data item</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>data1</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1st data item</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>…</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p></p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p></p></td><td style="" align="left" valign="top"><p></p></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 <span class="emphasis"><em>channels</em></span> value
+provided in the SETUP reply message.</p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_history_and_motivation"></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
+external cards to TeleMetrum was fairly simple. We set the
+software piece of this puzzle aside until we had a companion
+board to use.</p><p>The first companion board was TeleScience. Designed to collect
+temperature data from the nose and fin of the airframe, the main
+requirement for the companion port was that it be able to report
+telemetry data during flight as a back-up in case the
+TeleScience on-board data was lost.</p><p>The second companion board, TelePyro, provides 8 additional
+channels for deployment, staging or other activities. To avoid
+re-programming the TeleMetrum to use TelePyro, we decided to
+provide enough information over the companion link for it to
+independently control those channels.</p><p>Providing a standard, constant interface between the flight
+computer and companion boards allows for the base flight
+computer firmware to include support for companion boards.</p></div></div></body></html>
\ No newline at end of file
index 3ef5655e8f04a0b26daaf3c1f117757fa83fe1f4..2193112fe8cc9052b1608fc12fbbb2ff39d4f1fb 100644 (file)
Binary files a/AltOS/doc/companion.pdf and b/AltOS/doc/companion.pdf differ
index 4719261f34529963c361023c90a4bd566efadfb9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
Binary files a/AltOS/doc/easymega-outline.pdf and b/AltOS/doc/easymega-outline.pdf differ
index 07716702df46c4f752d2ead49002ec50536de4a0..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
Binary files a/AltOS/doc/easymini-outline.pdf and b/AltOS/doc/easymini-outline.pdf differ
index a91ec1f1f67ed20e9dce93e3f6573a1603c75e18..b203a5ec931accd903a89f20968b3b6a0296591b 100644 (file)
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Revision History</title><link rel="stylesheet" type="text/css" href="am.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /></head><body><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><strong>Revision History</strong></th></tr><tr><td align="left">Revision 1.6.3</td><td align="left">21 April 2016</td></tr><tr><td align="left" colspan="2">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Revision History</title><link rel="stylesheet" type="text/css" href="am.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /></head><body><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><strong>Revision History</strong></th></tr><tr><td align="left">Revision 1.8.4</td><td align="left">20 Dec 2017</td></tr><tr><td align="left" colspan="2">
+      Support EasyMini v2.0 hardware.
+    </td></tr><tr><td align="left">Revision 1.6.3</td><td align="left">21 April 2016</td></tr><tr><td align="left" colspan="2">
       Minor release fixing various host software bugs.
     </td></tr><tr><td align="left">Revision 1.6.2</td><td align="left">10 January 2016</td></tr><tr><td align="left" colspan="2">
       First release of separate EasyMini doc
index 82f5b445158fe3dfc41b1a4529995b45cb0096ab..03820f4f47877b66e24393b630999b891e975045 100644 (file)
@@ -19,7 +19,7 @@ collaborators, and we certainly appreciate this level of
 contribution!</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="blockquote"><blockquote class="blockquote"><div class="literallayout"><p>Bdale Garbee, KB0G<br />
 NAR #87103, TRA #12201</p></div></blockquote></div><div class="blockquote"><blockquote class="blockquote"><div class="literallayout"><p>Keith Packard, KD7SQG<br />
-NAR #88757, TRA #12200</p></div></blockquote></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="#_introduction_and_overview">1. Introduction and Overview</a></span></dt><dt><span class="chapter"><a href="#_getting_started">2. Getting Started</a></span></dt><dd><dl><dt><span class="section"><a href="#_batteries">2.1. Batteries</a></span></dt><dt><span class="section"><a href="#_linux_mac_windows_ground_station_software">2.2. Linux/Mac/Windows Ground Station Software</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_using_altus_metrum_hardware">3. Using Altus Metrum Hardware</a></span></dt><dd><dl><dt><span class="section"><a href="#_wiring_and_electrical_interference">3.1. Wiring and Electrical Interference</a></span></dt><dt><span class="section"><a href="#_hooking_up_lithium_polymer_batteries">3.2. Hooking Up Lithium Polymer Batteries</a></span></dt><dt><span class="section"><a href="#_hooking_up_pyro_charges">3.3. Hooking Up Pyro Charges</a></span></dt><dt><span class="section"><a href="#_hooking_up_a_power_switch">3.4. Hooking Up a Power Switch</a></span></dt><dt><span class="section"><a href="#_understanding_beeps">3.5. Understanding Beeps</a></span></dt><dt><span class="section"><a href="#_turning_on_the_power">3.6. Turning On the Power</a></span></dt><dt><span class="section"><a href="#_using_an_external_active_switch_circuit">3.7. Using an External Active Switch Circuit</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery">3.8. Using a Separate Pyro Battery</a></span></dt><dt><span class="section"><a href="#_using_a_different_kind_of_battery">3.9. Using a Different Kind of Battery</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_easymini">4. EasyMini</a></span></dt><dd><dl><dt><span class="section"><a href="#_easymini_screw_terminals">4.1. EasyMini Screw Terminals</a></span></dt><dt><span class="section"><a href="#_connecting_a_battery_to_easymini">4.2. Connecting A Battery To EasyMini</a></span></dt><dt><span class="section"><a href="#_charging_lithium_batteries">4.3. Charging Lithium Batteries</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery_with_easymini">4.4. Using a Separate Pyro Battery with EasyMini</a></span></dt><dt><span class="section"><a href="#_using_an_active_switch_with_easymini">4.5. Using an Active Switch with EasyMini</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_installation">5. Installation</a></span></dt><dt><span class="chapter"><a href="#_using_altus_metrum_products">6. Using Altus Metrum Products</a></span></dt><dd><dl><dt><span class="section"><a href="#_in_the_rocket">6.1. In the Rocket</a></span></dt><dt><span class="section"><a href="#_on_the_ground">6.2. On the Ground</a></span></dt><dt><span class="section"><a href="#_data_analysis">6.3. Data Analysis</a></span></dt><dt><span class="section"><a href="#_future_plans">6.4. Future Plans</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_altosui">7. AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#_save_flight_data">7.1. Save Flight Data</a></span></dt><dt><span class="section"><a href="#_replay_flight">7.2. Replay Flight</a></span></dt><dt><span class="section"><a href="#_graph_data">7.3. Graph Data</a></span></dt><dd><dl><dt><span class="section"><a href="#_flight_graph">7.3.1. Flight Graph</a></span></dt><dt><span class="section"><a href="#_configure_graph">7.3.2. Configure Graph</a></span></dt><dt><span class="section"><a href="#_flight_statistics">7.3.3. Flight Statistics</a></span></dt></dl></dd><dt><span class="section"><a href="#_export_data">7.4. Export Data</a></span></dt><dd><dl><dt><span class="section"><a href="#_comma_separated_value_format">7.4.1. Comma Separated Value Format</a></span></dt></dl></dd><dt><span class="section"><a href="#_configure_altimeter">7.5. Configure Altimeter</a></span></dt><dd><dl><dt><span class="section"><a href="#_main_deploy_altitude">7.5.1. Main Deploy Altitude</a></span></dt><dt><span class="section"><a href="#_apogee_delay">7.5.2. Apogee Delay</a></span></dt><dt><span class="section"><a href="#_apogee_lockout">7.5.3. Apogee Lockout</a></span></dt><dt><span class="section"><a href="#_maximum_flight_log_size">7.5.4. Maximum Flight Log Size</a></span></dt><dt><span class="section"><a href="#_ignitor_firing_mode">7.5.5. Ignitor Firing Mode</a></span></dt><dt><span class="section"><a href="#_beeper_frequency">7.5.6. Beeper Frequency</a></span></dt></dl></dd><dt><span class="section"><a href="#_configure_altosui">7.6. Configure AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#_log_directory">7.6.1. Log Directory</a></span></dt><dt><span class="section"><a href="#_imperial_units">7.6.2. Imperial Units</a></span></dt><dt><span class="section"><a href="#_serial_debug">7.6.3. Serial Debug</a></span></dt><dt><span class="section"><a href="#_font_size">7.6.4. Font size</a></span></dt><dt><span class="section"><a href="#_look_amp_feel">7.6.5. Look &amp; feel</a></span></dt><dt><span class="section"><a href="#_menu_position">7.6.6. Menu position</a></span></dt></dl></dd><dt><span class="section"><a href="#_flash_image">7.7. Flash Image</a></span></dt><dt><span class="section"><a href="#_fire_igniter">7.8. Fire Igniter</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_system_operation">A. System Operation</a></span></dt><dd><dl><dt><span class="section"><a href="#_firmware_modes">A.1. Firmware Modes</a></span></dt><dt><span class="section"><a href="#_ground_testing">A.2. Ground Testing</a></span></dt><dt><span class="section"><a href="#_configurable_parameters">A.3. Configurable Parameters</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_handling_precautions">B. Handling Precautions</a></span></dt><dt><span class="appendix"><a href="#_updating_device_firmware">C. Updating Device Firmware</a></span></dt><dd><dl><dt><span class="section"><a href="#_updating_easymini_firmware">C.1. Updating EasyMini Firmware</a></span></dt><dd><dl><dt><span class="section"><a href="#_recovering_from_self_flashing_failure">C.1.1. Recovering From Self-Flashing Failure</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="#_flight_data_recording">D. Flight Data Recording</a></span></dt><dt><span class="appendix"><a href="#_altus_metrum_hardware_specifications">E. Altus Metrum Hardware Specifications</a></span></dt><dt><span class="appendix"><a href="#_release_notes">F. Release Notes</a></span></dt><dd><dl><dt><span class="section"><a href="#_release_notes_for_version_1_8_3">F.1. Release Notes for Version 1.8.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos">F.1.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications">F.1.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_2">F.2. Release Notes for Version 1.8.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_2">F.2.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_2">F.2.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_1">F.3. Release Notes for Version 1.8.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_3">F.3.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_3">F.3.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8">F.4. Release Notes for Version 1.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_4">F.4.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_4">F.4.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_7">F.5. Release Notes for Version 1.7</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_5">F.5.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_5">F.5.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_8">F.6. Release Notes for Version 1.6.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_6">F.6.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications">F.6.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_5">F.7. Release Notes for Version 1.6.5</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_7">F.7.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications_2">F.7.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_4">F.8. Release Notes for Version 1.6.4</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_8">F.8.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications_3">F.8.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt><dt><span class="section"><a href="#_documentation">F.8.3. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_3">F.9. Release Notes for Version 1.6.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_9">F.9.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_6">F.9.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_altosdroid">F.9.3. AltosDroid</a></span></dt><dt><span class="section"><a href="#_documentation_2">F.9.4. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_2">F.10. Release Notes for Version 1.6.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_10">F.10.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_7">F.10.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_documentation_3">F.10.3. Documentation</a></span></dt></dl></dd></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>4.1. <a href="#idm274">EasyMini Board</a></dt><dt>7.1. <a href="#idm405">AltosUI Main Window</a></dt><dt>7.2. <a href="#idm432">Flight Data Graph</a></dt><dt>7.3. <a href="#idm443">Flight Graph Configuration</a></dt><dt>7.4. <a href="#idm462">Flight Statistics</a></dt><dt>7.5. <a href="#idm480">Altimeter Configuration</a></dt><dt>7.6. <a href="#idm550">Configure AltosUI Dialog</a></dt><dt>7.7. <a href="#idm584">Fire Igniter Window</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>3.1. <a href="#idm90">AltOS Modes</a></dt><dt>3.2. <a href="#idm198">Pad/Idle Indications</a></dt><dt>4.1. <a href="#idm286">EasyMini Screw Terminals</a></dt><dt>D.1. <a href="#idm684">Data Storage on Altus Metrum altimeters</a></dt><dt>E.1. <a href="#idm715">Altus Metrum Flight Computer Electronics</a></dt><dt>E.2. <a href="#idm755">Altus Metrum Flight Computer Mechanical Components</a></dt></dl></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_introduction_and_overview"></a>Chapter 1. Introduction and Overview</h1></div></div></div><p>Welcome to the Altus Metrum community!  Our circuits and software reflect
+NAR #88757, TRA #12200</p></div></blockquote></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="#_introduction_and_overview">1. Introduction and Overview</a></span></dt><dt><span class="chapter"><a href="#_getting_started">2. Getting Started</a></span></dt><dd><dl><dt><span class="section"><a href="#_batteries">2.1. Batteries</a></span></dt><dt><span class="section"><a href="#_linux_mac_windows_ground_station_software">2.2. Linux/Mac/Windows Ground Station Software</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_using_altus_metrum_hardware">3. Using Altus Metrum Hardware</a></span></dt><dd><dl><dt><span class="section"><a href="#_wiring_and_electrical_interference">3.1. Wiring and Electrical Interference</a></span></dt><dt><span class="section"><a href="#_hooking_up_lithium_polymer_batteries">3.2. Hooking Up Lithium Polymer Batteries</a></span></dt><dt><span class="section"><a href="#_hooking_up_pyro_charges">3.3. Hooking Up Pyro Charges</a></span></dt><dt><span class="section"><a href="#_hooking_up_a_power_switch">3.4. Hooking Up a Power Switch</a></span></dt><dt><span class="section"><a href="#_understanding_beeps">3.5. Understanding Beeps</a></span></dt><dt><span class="section"><a href="#_turning_on_the_power">3.6. Turning On the Power</a></span></dt><dt><span class="section"><a href="#_using_an_external_active_switch_circuit">3.7. Using an External Active Switch Circuit</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery">3.8. Using a Separate Pyro Battery</a></span></dt><dt><span class="section"><a href="#_using_a_different_kind_of_battery">3.9. Using a Different Kind of Battery</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_easymini">4. EasyMini</a></span></dt><dd><dl><dt><span class="section"><a href="#_easymini_screw_terminals">4.1. EasyMini Screw Terminals</a></span></dt><dt><span class="section"><a href="#_connecting_a_battery_to_easymini">4.2. Connecting A Battery To EasyMini</a></span></dt><dt><span class="section"><a href="#_charging_lithium_batteries">4.3. Charging Lithium Batteries</a></span></dt><dt><span class="section"><a href="#_using_a_separate_pyro_battery_with_easymini">4.4. Using a Separate Pyro Battery with EasyMini</a></span></dt><dt><span class="section"><a href="#_using_an_active_switch_with_easymini">4.5. Using an Active Switch with EasyMini</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_installation">5. Installation</a></span></dt><dt><span class="chapter"><a href="#_using_altus_metrum_products">6. Using Altus Metrum Products</a></span></dt><dd><dl><dt><span class="section"><a href="#_in_the_rocket">6.1. In the Rocket</a></span></dt><dt><span class="section"><a href="#_on_the_ground">6.2. On the Ground</a></span></dt><dt><span class="section"><a href="#_data_analysis">6.3. Data Analysis</a></span></dt><dt><span class="section"><a href="#_future_plans">6.4. Future Plans</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_altosui">7. AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#_save_flight_data">7.1. Save Flight Data</a></span></dt><dt><span class="section"><a href="#_replay_flight">7.2. Replay Flight</a></span></dt><dt><span class="section"><a href="#_graph_data">7.3. Graph Data</a></span></dt><dd><dl><dt><span class="section"><a href="#_flight_graph">7.3.1. Flight Graph</a></span></dt><dt><span class="section"><a href="#_configure_graph">7.3.2. Configure Graph</a></span></dt><dt><span class="section"><a href="#_flight_statistics">7.3.3. Flight Statistics</a></span></dt></dl></dd><dt><span class="section"><a href="#_export_data">7.4. Export Data</a></span></dt><dd><dl><dt><span class="section"><a href="#_comma_separated_value_format">7.4.1. Comma Separated Value Format</a></span></dt></dl></dd><dt><span class="section"><a href="#_configure_altimeter">7.5. Configure Altimeter</a></span></dt><dd><dl><dt><span class="section"><a href="#_main_deploy_altitude">7.5.1. Main Deploy Altitude</a></span></dt><dt><span class="section"><a href="#_apogee_delay">7.5.2. Apogee Delay</a></span></dt><dt><span class="section"><a href="#_apogee_lockout">7.5.3. Apogee Lockout</a></span></dt><dt><span class="section"><a href="#_maximum_flight_log_size">7.5.4. Maximum Flight Log Size</a></span></dt><dt><span class="section"><a href="#_ignitor_firing_mode">7.5.5. Ignitor Firing Mode</a></span></dt><dt><span class="section"><a href="#_beeper_frequency">7.5.6. Beeper Frequency</a></span></dt></dl></dd><dt><span class="section"><a href="#_configure_altosui">7.6. Configure AltosUI</a></span></dt><dd><dl><dt><span class="section"><a href="#_log_directory">7.6.1. Log Directory</a></span></dt><dt><span class="section"><a href="#_imperial_units">7.6.2. Imperial Units</a></span></dt><dt><span class="section"><a href="#_serial_debug">7.6.3. Serial Debug</a></span></dt><dt><span class="section"><a href="#_font_size">7.6.4. Font size</a></span></dt><dt><span class="section"><a href="#_look_amp_feel">7.6.5. Look &amp; feel</a></span></dt><dt><span class="section"><a href="#_menu_position">7.6.6. Menu position</a></span></dt></dl></dd><dt><span class="section"><a href="#_flash_image">7.7. Flash Image</a></span></dt><dt><span class="section"><a href="#_fire_igniter">7.8. Fire Igniter</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_system_operation">A. System Operation</a></span></dt><dd><dl><dt><span class="section"><a href="#_firmware_modes">A.1. Firmware Modes</a></span></dt><dt><span class="section"><a href="#_ground_testing">A.2. Ground Testing</a></span></dt><dt><span class="section"><a href="#_configurable_parameters">A.3. Configurable Parameters</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_handling_precautions">B. Handling Precautions</a></span></dt><dt><span class="appendix"><a href="#_updating_device_firmware">C. Updating Device Firmware</a></span></dt><dd><dl><dt><span class="section"><a href="#_updating_easymini_firmware">C.1. Updating EasyMini Firmware</a></span></dt><dd><dl><dt><span class="section"><a href="#_recovering_from_self_flashing_failure">C.1.1. Recovering From Self-Flashing Failure</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="#_flight_data_recording">D. Flight Data Recording</a></span></dt><dt><span class="appendix"><a href="#_altus_metrum_hardware_specifications">E. Altus Metrum Hardware Specifications</a></span></dt><dt><span class="appendix"><a href="#_release_notes">F. Release Notes</a></span></dt><dd><dl><dt><span class="section"><a href="#_release_notes_for_version_1_8_4">F.1. Release Notes for Version 1.8.4</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos">F.1.1. AltOS</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_3">F.2. Release Notes for Version 1.8.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_2">F.2.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications">F.2.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_2">F.3. Release Notes for Version 1.8.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_3">F.3.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_2">F.3.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_1">F.4. Release Notes for Version 1.8.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_4">F.4.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_3">F.4.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8">F.5. Release Notes for Version 1.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_5">F.5.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_4">F.5.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_7">F.6. Release Notes for Version 1.7</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_6">F.6.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_5">F.6.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_8">F.7. Release Notes for Version 1.6.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_7">F.7.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications">F.7.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_5">F.8. Release Notes for Version 1.6.5</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_8">F.8.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications_2">F.8.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_4">F.9. Release Notes for Version 1.6.4</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_9">F.9.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications_3">F.9.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt><dt><span class="section"><a href="#_documentation">F.9.3. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_3">F.10. Release Notes for Version 1.6.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_10">F.10.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_6">F.10.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_altosdroid">F.10.3. AltosDroid</a></span></dt><dt><span class="section"><a href="#_documentation_2">F.10.4. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_2">F.11. Release Notes for Version 1.6.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_11">F.11.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_7">F.11.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_documentation_3">F.11.3. Documentation</a></span></dt></dl></dd></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>4.1. <a href="#idm278">EasyMini Board</a></dt><dt>7.1. <a href="#idm409">AltosUI Main Window</a></dt><dt>7.2. <a href="#idm436">Flight Data Graph</a></dt><dt>7.3. <a href="#idm447">Flight Graph Configuration</a></dt><dt>7.4. <a href="#idm466">Flight Statistics</a></dt><dt>7.5. <a href="#idm484">Altimeter Configuration</a></dt><dt>7.6. <a href="#idm554">Configure AltosUI Dialog</a></dt><dt>7.7. <a href="#idm588">Fire Igniter Window</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>3.1. <a href="#idm94">AltOS Modes</a></dt><dt>3.2. <a href="#idm202">Pad/Idle Indications</a></dt><dt>4.1. <a href="#idm290">EasyMini Screw Terminals</a></dt><dt>D.1. <a href="#idm688">Data Storage on Altus Metrum altimeters</a></dt><dt>E.1. <a href="#idm719">Altus Metrum Flight Computer Electronics</a></dt><dt>E.2. <a href="#idm759">Altus Metrum Flight Computer Mechanical Components</a></dt></dl></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_introduction_and_overview"></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
 releasing all of our hardware and software designs under open licenses,
@@ -105,12 +105,12 @@ beeping
 that accompanies each mode. In the description of the
 beeping pattern, “dit” means a short beep while "dah"
 means a long beep (three times as long). “Brap” means
-a long dissonant tone.</p><div class="table"><a id="idm90"></a><p class="title"><strong>Table 3.1. AltOS Modes</strong></p><div class="table-contents"><table class="table" summary="AltOS Modes" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Mode Name</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Abbreviation</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Beeps</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Startup</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>S</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>battery voltage in decivolts</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Calibrating sensors, detecting orientation.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Idle</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>I</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Ready to accept commands over USB</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Pad</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>P</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dah dah dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Waiting for launch. Not listening for commands.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Boost</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dah dit dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Accelerating upwards.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Fast</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>F</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit dah dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Decelerating, but moving faster than 200m/s.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Coast</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>C</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dah dit dah dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Decelerating, moving slower than 200m/s</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Drogue</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dah dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Descending after apogee. Above main height.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>M</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dah dah</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Descending. Below main height.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Landed</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>L</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dah dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Stable altitude for at least ten seconds.</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Sensor error</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>X</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>dah dit dit dah</p></td><td style="" align="left" valign="top"><p>Error detected during sensor calibration.</p></td></tr></tbody></table></div></div><br class="table-break" /><p>Here’s a summary of all of the Pad and Idle mode
+a long dissonant tone.</p><div class="table"><a id="idm94"></a><p class="title"><strong>Table 3.1. AltOS Modes</strong></p><div class="table-contents"><table class="table" summary="AltOS Modes" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Mode Name</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Abbreviation</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Beeps</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Startup</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>S</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>battery voltage in decivolts</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Calibrating sensors, detecting orientation.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Idle</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>I</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Ready to accept commands over USB</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Pad</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>P</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dah dah dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Waiting for launch. Not listening for commands.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Boost</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>B</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dah dit dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Accelerating upwards.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Fast</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>F</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit dah dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Decelerating, but moving faster than 200m/s.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Coast</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>C</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dah dit dah dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Decelerating, moving slower than 200m/s</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Drogue</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dah dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Descending after apogee. Above main height.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>M</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dah dah</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Descending. Below main height.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Landed</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>L</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dah dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Stable altitude for at least ten seconds.</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Sensor error</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>X</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>dah dit dit dah</p></td><td style="" align="left" valign="top"><p>Error detected during sensor calibration.</p></td></tr></tbody></table></div></div><br class="table-break" /><p>Here’s a summary of all of the Pad and Idle mode
 indications. In Idle mode, you’ll hear one of these
 just once after the two short dits indicating idle
 mode. In Pad mode, after the dit dah dah dit
 indicating Pad mode, you’ll hear these once every five
-seconds.</p><div class="table"><a id="idm198"></a><p class="title"><strong>Table 3.2. Pad/Idle Indications</strong></p><div class="table-contents"><table class="table" summary="Pad/Idle Indications" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Name           </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Beeps          </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Neither</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>brap</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>No continuity detected on either apogee or main igniters.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected only on apogee igniter.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected only on main igniter.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Both</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected on both igniters.</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Storage Full</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>warble</p></td><td style="" align="left" valign="top"><p>On-board data logging storage is full. This will
+seconds.</p><div class="table"><a id="idm202"></a><p class="title"><strong>Table 3.2. Pad/Idle Indications</strong></p><div class="table-contents"><table class="table" summary="Pad/Idle Indications" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Name           </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Beeps          </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Neither</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>brap</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>No continuity detected on either apogee or main igniters.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected only on apogee igniter.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected only on main igniter.</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Both</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>dit dit dit</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Continuity detected on both igniters.</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Storage Full</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>warble</p></td><td style="" align="left" valign="top"><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
@@ -167,7 +167,7 @@ is
 designed to use either a
 lithium polymer battery or any other battery producing
 between 4 and 12 volts, such as a rectangular 9V
-battery.</p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_easymini"></a>Chapter 4. EasyMini</h1></div></div></div><div class="figure"><a id="idm274"></a><p class="title"><strong>Figure 4.1. EasyMini Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="easymini-top.jpg" width="495" alt="easymini-top.jpg" /></div></div></div><br class="figure-break" /><p>EasyMini is built on a 0.8 inch by 1½ inch circuit board. It’s
+battery.</p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_easymini"></a>Chapter 4. EasyMini</h1></div></div></div><div class="figure"><a id="idm278"></a><p class="title"><strong>Figure 4.1. EasyMini Board</strong></p><div class="figure-contents"><div class="mediaobject"><img src="easymini-top.jpg" width="495" alt="easymini-top.jpg" /></div></div></div><br class="figure-break" /><p>EasyMini is built on a 0.8 inch by 1½ inch circuit board. It’s
 designed to fit in a 24mm coupler tube.</p><p>You usually don’t need to configure EasyMini at all; it’s set
 up to do dual-deployment with an event at apogee to separate
 the airframe and deploy a drogue and another event at 250m
@@ -178,7 +178,7 @@ board. Using the picture
 above, the top four have connections for the main pyro
 circuit and an external battery and the bottom four have
 connections for the apogee pyro circuit and the power
-switch. Counting from the left, the connections are as follows:</p><div class="table"><a id="idm286"></a><p class="title"><strong>Table 4.1. EasyMini Screw Terminals</strong></p><div class="table-contents"><table class="table" summary="EasyMini Screw Terminals" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal #</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal Name</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Battery</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Positive external battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Battery -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Negative external battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Output</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to flight computer</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Bottom 4</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Switch Input</p></td><td style="" align="left" valign="top"><p>Switch connection to positive battery terminal</p></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 id="_connecting_a_battery_to_easymini"></a>4.2. Connecting A Battery To EasyMini</h2></div></div></div><p>There are two possible battery connections on
+switch. Counting from the left, the connections are as follows:</p><div class="table"><a id="idm290"></a><p class="title"><strong>Table 4.1. EasyMini Screw Terminals</strong></p><div class="table-contents"><table class="table" summary="EasyMini Screw Terminals" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal #</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Terminal Name</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Description</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Battery</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Positive external battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Top 4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Battery -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Negative external battery terminal</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee -</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel connection to pyro circuit</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro channel common connection to battery</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bottom 3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch Output</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Switch connection to flight computer</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Bottom 4</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Switch Input</p></td><td style="" align="left" valign="top"><p>Switch connection to positive battery terminal</p></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 id="_connecting_a_battery_to_easymini"></a>4.2. Connecting A Battery To EasyMini</h2></div></div></div><p>There are two possible battery connections on
 EasyMini. You can use either method; both feed
 through the power switch terminals.</p><p>One battery connection is the standard Altus Metrum
 white JST plug. This mates with single-cell Lithium
@@ -276,7 +276,7 @@ feel free to dive in and help!  Or let us know what
 you’d like to see that we aren’t already working on,
 and maybe we’ll get excited about it too…</p><p>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 id="_altosui"></a>Chapter 7. AltosUI</h1></div></div></div><div class="figure"><a id="idm405"></a><p class="title"><strong>Figure 7.1. AltosUI Main Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="altosui.png" width="414" alt="altosui.png" /></div></div></div><br class="figure-break" /><p>The AltosUI program provides a graphical user interface for
+evolves!</p></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_altosui"></a>Chapter 7. AltosUI</h1></div></div></div><div class="figure"><a id="idm409"></a><p class="title"><strong>Figure 7.1. AltosUI Main Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="altosui.png" width="414" alt="altosui.png" /></div></div></div><br class="figure-break" /><p>The AltosUI program provides a graphical user interface for
 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
@@ -310,7 +310,7 @@ record file, either a .telem file recording telemetry data or a
 flash memory.</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><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 id="_flight_graph"></a>7.3.1. Flight Graph</h3></div></div></div><div class="figure"><a id="idm432"></a><p class="title"><strong>Figure 7.2. Flight Data Graph</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph.png" width="495" alt="graph.png" /></div></div></div><br class="figure-break" /><p>By default, the graph contains acceleration (blue),
+opened.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_flight_graph"></a>7.3.1. Flight Graph</h3></div></div></div><div class="figure"><a id="idm436"></a><p class="title"><strong>Figure 7.2. Flight Data Graph</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph.png" width="495" alt="graph.png" /></div></div></div><br class="figure-break" /><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
@@ -318,7 +318,7 @@ 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></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_configure_graph"></a>7.3.2. Configure Graph</h3></div></div></div><div class="figure"><a id="idm443"></a><p class="title"><strong>Figure 7.3. Flight Graph Configuration</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph-configure.png" width="495" alt="graph-configure.png" /></div></div></div><br class="figure-break" /><p>This selects which graph elements to show, and, at the
+plot.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_configure_graph"></a>7.3.2. Configure Graph</h3></div></div></div><div class="figure"><a id="idm447"></a><p class="title"><strong>Figure 7.3. Flight Graph Configuration</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph-configure.png" width="495" alt="graph-configure.png" /></div></div></div><br class="figure-break" /><p>This selects which graph elements to show, and, at the
 very bottom. It also lets you configure how
 the graph is drawn:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Whether to use metric or imperial units
@@ -339,7 +339,7 @@ descent. Flight computers without
 accelerometers always compute both speed and
 acceleration from barometric data. A larger
 value smooths the data more.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_flight_statistics"></a>7.3.3. Flight Statistics</h3></div></div></div><div class="figure"><a id="idm462"></a><p class="title"><strong>Figure 7.4. Flight Statistics</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph-stats.png" width="495" alt="graph-stats.png" /></div></div></div><br class="figure-break" /><p>Shows overall data computed from the flight.</p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_export_data"></a>7.4. Export Data</h2></div></div></div><p>This tool takes the raw data files and makes them
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_flight_statistics"></a>7.3.3. Flight Statistics</h3></div></div></div><div class="figure"><a id="idm466"></a><p class="title"><strong>Figure 7.4. Flight Statistics</strong></p><div class="figure-contents"><div class="mediaobject"><img src="graph-stats.png" width="495" alt="graph-stats.png" /></div></div></div><br class="figure-break" /><p>Shows overall data computed from the flight.</p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_export_data"></a>7.4. 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,
 which can be either a .eeprom or .telem.  The .eeprom
@@ -358,7 +358,7 @@ tools can be configured to skip over.</p><p>The remaining lines of the file cont
 each field separated by a comma and at least one
 space. All of 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><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configure_altimeter"></a>7.5. Configure Altimeter</h2></div></div></div><div class="figure"><a id="idm480"></a><p class="title"><strong>Figure 7.5. Altimeter Configuration</strong></p><div class="figure-contents"><div class="mediaobject"><img src="configure-altimeter.png" width="324" alt="configure-altimeter.png" /></div></div></div><br class="figure-break" /><p>Select this button and then select an altimeter.</p><p>The first few lines of the dialog provide information about the
+both pressure, altitude and height above pad units.</p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configure_altimeter"></a>7.5. Configure Altimeter</h2></div></div></div><div class="figure"><a id="idm484"></a><p class="title"><strong>Figure 7.5. Altimeter Configuration</strong></p><div class="figure-contents"><div class="mediaobject"><img src="configure-altimeter.png" width="324" alt="configure-altimeter.png" /></div></div></div><br class="figure-break" /><p>Select this button and then select an altimeter.</p><p>The first few lines of the dialog provide information about the
 connected device, including the product name,
 software version and hardware serial number. Below that are the
 individual configuration entries.</p><p>At the bottom of the dialog, there are four buttons:</p><div class="variablelist"><dl class="variablelist"><dt><span class="term">
@@ -442,7 +442,7 @@ have more than one flight computer in a single
 airframe, having all of them sound at the same
 frequency can be confusing. This parameter
 lets you adjust the base beeper frequency
-value.</p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configure_altosui"></a>7.6. Configure AltosUI</h2></div></div></div><div class="figure"><a id="idm550"></a><p class="title"><strong>Figure 7.6. Configure AltosUI Dialog</strong></p><div class="figure-contents"><div class="mediaobject"><img src="configure-altosui.png" width="216" alt="configure-altosui.png" /></div></div></div><br class="figure-break" /><p>This button presents a dialog so that you can
+value.</p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configure_altosui"></a>7.6. Configure AltosUI</h2></div></div></div><div class="figure"><a id="idm554"></a><p class="title"><strong>Figure 7.6. Configure AltosUI Dialog</strong></p><div class="figure-contents"><div class="mediaobject"><img src="configure-altosui.png" width="216" alt="configure-altosui.png" /></div></div></div><br class="figure-break" /><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 id="_log_directory"></a>7.6.1. Log Directory</h3></div></div></div><p>AltosUI logs all telemetry data and saves all
 flash data to this directory. This
 directory is also used as the staring point
@@ -476,7 +476,7 @@ EasyMini is
 programmed directly
 over USB (self programming). Please read
 the directions for flashing devices in
-<a class="xref" href="#_updating_device_firmware" title="Appendix C. Updating Device Firmware">Appendix C, <em>Updating Device Firmware</em></a>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_fire_igniter"></a>7.8. Fire Igniter</h2></div></div></div><div class="figure"><a id="idm584"></a><p class="title"><strong>Figure 7.7. Fire Igniter Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="fire-igniter.png" width="108" alt="fire-igniter.png" /></div></div></div><br class="figure-break" /><p>This activates the igniter circuits in the flight
+<a class="xref" href="#_updating_device_firmware" title="Appendix C. Updating Device Firmware">Appendix C, <em>Updating Device Firmware</em></a>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_fire_igniter"></a>7.8. Fire Igniter</h2></div></div></div><div class="figure"><a id="idm588"></a><p class="title"><strong>Figure 7.7. Fire Igniter Window</strong></p><div class="figure-contents"><div class="mediaobject"><img src="fire-igniter.png" width="108" alt="fire-igniter.png" /></div></div></div><br class="figure-break" /><p>This activates the igniter circuits in the flight
 computer to help test recovery systems
 deployment.</p><p>Selecting the <span class="emphasis"><em>Fire Igniter</em></span> button brings up the
 usual device selection dialog. Pick the desired
@@ -642,7 +642,7 @@ during ascent and 10 samples per second during
 descent.
 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 id="idm684"></a><p class="title"><strong>Table D.1. Data Storage on Altus Metrum altimeters</strong></p><div class="table-contents"><table class="table" summary="Data Storage on Altus Metrum altimeters" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Device                 </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Bytes per Sample       </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Total Storage  </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Minutes at Full Rate</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>EasyMini</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>1MB</p></td><td style="" align="left" valign="top"><p>10</p></td></tr></tbody></table></div></div><br class="table-break" /><p>The on-board flash is partitioned into separate flight logs,
+several equal-sized blocks, one for each flight.</p><div class="table"><a id="idm688"></a><p class="title"><strong>Table D.1. Data Storage on Altus Metrum altimeters</strong></p><div class="table-contents"><table class="table" summary="Data Storage on Altus Metrum altimeters" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Device                 </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Bytes per Sample       </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Total Storage  </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Minutes at Full Rate</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>EasyMini</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>1MB</p></td><td style="" align="left" valign="top"><p>10</p></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
@@ -661,11 +661,13 @@ 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="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="_altus_metrum_hardware_specifications"></a>Appendix E. Altus Metrum Hardware Specifications</h1></div></div></div><p>Here’s the full set of Altus Metrum products, both in
-production and retired.</p><div class="table"><a id="idm715"></a><p class="title"><strong>Table E.1. Altus Metrum Flight Computer Electronics</strong></p><div class="table-contents"><table class="table" summary="Altus Metrum Flight Computer Electronics" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /><col class="col_5" /><col class="col_6" /><col class="col_7" /><col class="col_8" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Device </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> Barometer </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> Z-axis accel </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> GPS </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> 3D sensors </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> Storage </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> RF Output </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top"> Battery</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>EasyMini v1.0</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>1MB</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="" align="left" valign="top"><p>3.7-12V</p></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm755"></a><p class="title"><strong>Table E.2. Altus Metrum Flight Computer Mechanical Components</strong></p><div class="table-contents"><table class="table" summary="Altus Metrum Flight Computer Mechanical Components" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /><col class="col_5" /><col class="col_6" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Device</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Connectors</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Screw Terminals</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Width</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Length</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Tube Size</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>EasyMini</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Debug USB Battery</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro Battery</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>0.8 inch (2.03cm)</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>1½ inch (3.81cm)</p></td><td style="" align="left" valign="top"><p>24mm coupler</p></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="_release_notes"></a>Appendix F. Release Notes</h1></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_3"></a>F.1. Release Notes for Version 1.8.3</h2></div></div></div><p>Version 1.8.3 includes support for TeleMega version 3.0 along
+production and retired.</p><div class="table"><a id="idm719"></a><p class="title"><strong>Table E.1. Altus Metrum Flight Computer Electronics</strong></p><div class="table-contents"><table class="table" summary="Altus Metrum Flight Computer Electronics" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /><col class="col_5" /><col class="col_6" /><col class="col_7" /><col class="col_8" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Device </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> Barometer </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> Z-axis accel </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> GPS </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> 3D sensors </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> Storage </th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"> RF Output </th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top"> Battery</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>EasyMini v1.0</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>MS5607 30km (100k')</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>1MB</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>-</p></td><td style="" align="left" valign="top"><p>3.7-12V</p></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm759"></a><p class="title"><strong>Table E.2. Altus Metrum Flight Computer Mechanical Components</strong></p><div class="table-contents"><table class="table" summary="Altus Metrum Flight Computer Mechanical Components" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /><col class="col_5" /><col class="col_6" /></colgroup><thead><tr><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Device</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Connectors</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Screw Terminals</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Width</th><th style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top">Length</th><th style="border-bottom: 1px solid #78079a; " align="left" valign="top">Tube Size</th></tr></thead><tbody><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>EasyMini</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Debug USB Battery</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Apogee pyro Main pyro Battery</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>0.8 inch (2.03cm)</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>1½ inch (3.81cm)</p></td><td style="" align="left" valign="top"><p>24mm coupler</p></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="_release_notes"></a>Appendix F. Release Notes</h1></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_4"></a>F.1. Release Notes for Version 1.8.4</h2></div></div></div><p>Version 1.8.4 includes support for EasyMini version 2.0</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos"></a>F.1.1. AltOS</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+Support for EasyMini version 2.0 hardware.
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_3"></a>F.2. Release Notes for Version 1.8.3</h2></div></div></div><p>Version 1.8.3 includes support for TeleMega version 3.0 along
 with two important flight computer fixes. This version also
 changes KML export data to make Tripoli Record reporting
 better and some updates to graph presentation and data
-downloading.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos"></a>F.1.1. AltOS</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altos_new_features"></a>AltOS New Features</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+downloading.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_2"></a>F.2.1. AltOS</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altos_new_features"></a>AltOS New Features</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support for TeleMega version 3.0 hardware.
 </li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altos_bug_fixes"></a>AltOS Bug Fixes</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Ground testing EasyMega and TeleMega additional pyro
@@ -677,7 +679,7 @@ from capturing log data.
 </li><li class="listitem">
 Fixed saving of pyro configuration that ended with
 <span class="emphasis"><em>Descending</em></span>.
-</li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications"></a>F.1.2. AltosUI and TeleGPS Applications</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altosui_new_features"></a>AltosUI New Features</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications"></a>F.2.2. AltosUI and TeleGPS Applications</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altosui_new_features"></a>AltosUI New Features</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support for TeleMega version 3.0.
 </li><li class="listitem">
 Graph lines have improved appearance to make them easier to
@@ -701,18 +703,18 @@ to make it more useful for Tripoli record reporting.
 </li><li class="listitem">
 CSV export now includes TeleMega/EasyMega pyro voltages and
 tilt angle.
-</li></ul></div><p></p></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_2"></a>F.2. Release Notes for Version 1.8.2</h2></div></div></div><p>Version 1.8.2 includes support for TeleGPS version 2.0 along
+</li></ul></div><p></p></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_2"></a>F.3. Release Notes for Version 1.8.2</h2></div></div></div><p>Version 1.8.2 includes support for TeleGPS version 2.0 along
 with accelerometer recalibration support in AltosUI.</p><p>1.8.2 also contains a couple of minor fixes for AltosUI when
-analyzing saved data files.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_2"></a>F.2.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+analyzing saved data files.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_3"></a>F.3.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support for TeleGPS version 2.0 hardware.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_2"></a>F.2.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_2"></a>F.3.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support for TeleGPS version 2.0.
 </li><li class="listitem">
 Accelerometer re-calibration user interface.
 </li></ul></div><p>AltosUI and TeleGPS Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Prevent some crashes when reading older saved flight data
 for graphing or KML export.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_1"></a>F.3. Release Notes for Version 1.8.1</h2></div></div></div><p>Version 1.8.1 includes an important bug fix for Apogee Lockout
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_1"></a>F.4. Release Notes for Version 1.8.1</h2></div></div></div><p>Version 1.8.1 includes an important bug fix for Apogee Lockout
 operation in all flight computers. Anyone using this option
 must update firmware.</p><p>This release also contains a change in how flight computers
 with accelerometers deal with speeds around and above Mach
@@ -722,7 +724,7 @@ disregard the barometric sensor above 330m/s (around Mach
 effect without ever going away entirely. This prevents early
 drogue deployment for flights which spend considerable time
 above Mach 1.</p><p>1.8.1 also contains a couple of minor fixes for AltosUI when
-analyzing saved data files.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_3"></a>F.3.1. AltOS</h3></div></div></div><p>AltOS Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+analyzing saved data files.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_4"></a>F.4.1. AltOS</h3></div></div></div><p>AltOS Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Handle time value wrapping in Apogee Lockout
 correctly. Without this, apogee lockout would sometimes
 prevent any drogue charge from firing.
@@ -731,7 +733,7 @@ Change Kalman filter on flight computers with accelerometer
 to continue using the barometric sensor even at high speeds
 to avoid unintentional drogue deployment during
 deceleration.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_3"></a>F.3.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_3"></a>F.4.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add new <span class="emphasis"><em>Huge</em></span> font size to make text even bigger on high
 resolution monitors.
 </li></ul></div><p>AltosUI Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
@@ -740,12 +742,12 @@ for graphing or KML export.
 </li><li class="listitem">
 Load frequency preference at startup. The loading code was
 broken, so you’d see only the default frequencies.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8"></a>F.4. Release Notes for Version 1.8</h2></div></div></div><p>Version 1.8 includes support for our new TeleBT v4.0 ground
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8"></a>F.5. Release Notes for Version 1.8</h2></div></div></div><p>Version 1.8 includes support for our new TeleBT v4.0 ground
 station, updates for data analysis in our ground station
 software and bug fixes in in the flight software for all our
-boards and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_4"></a>F.4.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+boards and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_5"></a>F.5.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleBT v4.0 boards.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_4"></a>F.4.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_4"></a>F.5.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleBT v4.0 hardware
 </li><li class="listitem">
 Rewrite graphing and export functions. This code now handles
@@ -756,20 +758,20 @@ acceleration data more accurate.
 </li></ul></div><p>AltosUI Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Correct axis labeling of magnetic sensor in TeleMega and
 EasyMega. The Y and Z axes were flipped.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_7"></a>F.5. Release Notes for Version 1.7</h2></div></div></div><p>Version 1.7 includes support for our new TeleMini v3.0
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_7"></a>F.6. Release Notes for Version 1.7</h2></div></div></div><p>Version 1.7 includes support for our new TeleMini v3.0
 flight computer and bug fixes in in the flight software for all our boards
-and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_5"></a>F.5.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_6"></a>F.6.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleMini v3.0 boards.
 </li></ul></div><p>AltOS Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix interrupt priorities on STM32L processors. Run timer
 interrupt at lowest priority so that device interrupts get
 serviced first.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_5"></a>F.5.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_5"></a>F.6.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleMini v3.0 hardware
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_8"></a>F.6. Release Notes for Version 1.6.8</h2></div></div></div><p>Version 1.6.8 fixes a TeleMega and TeleMetrum v2.0 bug where
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_8"></a>F.7. Release Notes for Version 1.6.8</h2></div></div></div><p>Version 1.6.8 fixes a TeleMega and TeleMetrum v2.0 bug where
 the device could stop logging data and transmitting
 telemetry in flight. All TeleMega v1.0, v2.0 and TeleMetrum
-v2.0 users should update their flight firmware.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_6"></a>F.6.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+v2.0 users should update their flight firmware.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_7"></a>F.7.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix STM32L DMA driver to work around STM32L SoC DMA priority
 issue t lock-up in the logging or radio code, either of
 which could stop data logging and telemetry.
@@ -782,7 +784,7 @@ flight.
 </li></ul></div><p>AltOS changes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Flash LEDS on all products briefly during power up so that
 they can be tested during production.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications"></a>F.6.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications"></a>F.7.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Re-enable go/no-go entries after they’ve been disabled due
 to lack of data. If telemetry information is delayed when
 the Ui starts up, sometimes important fields would get
@@ -790,20 +792,20 @@ disabled to never re-appear.
 </li><li class="listitem">
 Deal with ground station failure better during Configure
 Ground Station operation by cleaning up pending operations.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_5"></a>F.7. Release Notes for Version 1.6.5</h2></div></div></div><p>Version 1.6.5 fixes a TeleMega and TeleMetrum v2.0 bug where
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_5"></a>F.8. Release Notes for Version 1.6.5</h2></div></div></div><p>Version 1.6.5 fixes a TeleMega and TeleMetrum v2.0 bug where
 the device would often stop logging data and transmitting
 telemetry in flight. All TeleMega v1.0, v2.0 and TeleMetrum
-v2.0 users should update their flight firmware.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_7"></a>F.7.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+v2.0 users should update their flight firmware.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_8"></a>F.8.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix STM32L SPI driver to prevent lock-up in the logging or
 radio code, either of which could stop data logging and
 telemetry. Found and characterized by Chuck Haskin, who also
 tested the new firmware before release.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications_2"></a>F.7.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications_2"></a>F.8.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Deliver firmward for TeleMega v2.0 and TeleBT v3.0 with
 Windows package.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_4"></a>F.8. Release Notes for Version 1.6.4</h2></div></div></div><p>Version 1.6.4 fixes a bluetooth communication problem with
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_4"></a>F.9. Release Notes for Version 1.6.4</h2></div></div></div><p>Version 1.6.4 fixes a bluetooth communication problem with
 TeleBT v1.0 devices, along with some altosui and altosdroid
-minor nits. It also now ships firmware for some newer devices.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_8"></a>F.8.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+minor nits. It also now ships firmware for some newer devices.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_9"></a>F.9.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix hardware flow control on TeleBT v1.0. Hardware RTS/CTS
 doesn’t seem to work, switch from using the hardware to
 driving these pins with software.
@@ -811,7 +813,7 @@ driving these pins with software.
 Fix ARM USB drivers to deal with OS restarts. Needed to
 reset all USB-related state when the USB bus is reset. These
 fixes affect all STM32L, STM32F0 and LPC11U14 based devices.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications_3"></a>F.8.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI, TeleGPS and AltosDroid New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications_3"></a>F.9.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI, TeleGPS and AltosDroid New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Automatically switch from meters or feet to kilometers or
 miles for distance units.
 </li><li class="listitem">
@@ -822,17 +824,17 @@ Abort map preloading when the preload map dialog is closed.
 In AltosDroid, Don’t reconnect to last device if the user
 had disconnected it the last time the application was
 active.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation"></a>F.8.3. Documentation</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation"></a>F.9.3. Documentation</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Mention TeleMega v2.0 in hardware specs table.
 </li><li class="listitem">
 Document TeleGPS RF output in telegps manual.
-</li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_3"></a>F.9. Release Notes for Version 1.6.3</h2></div></div></div><p>Version 1.6.3 adds idle mode to AltosDroid and has bug fixes
+</li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_3"></a>F.10. Release Notes for Version 1.6.3</h2></div></div></div><p>Version 1.6.3 adds idle mode to AltosDroid and has bug fixes
 for our host software on desktops, laptops an android devices
-along with BlueTooth support for Windows.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_9"></a>F.9.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+along with BlueTooth support for Windows.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_10"></a>F.10.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix hardware flow control on TeleBT v3.0. RTS/CTS is
 wired backwards on this board, switch from using the
 hardware to driving these pins with software.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_6"></a>F.9.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_6"></a>F.10.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add BlueTooth support for Windows operating system. This
 supports connections to TeleBT over BlueTooth rather than
 just USB.
@@ -854,7 +856,7 @@ the connected Altus Metrum USB devices appear again.
 </li><li class="listitem">
 Fix acceleration data presented in MonitorIdle mode for
 TeleMetrum v2.0 flight computers.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosdroid"></a>F.9.3. AltosDroid</h3></div></div></div><p>AltosDroid new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosdroid"></a>F.10.3. AltosDroid</h3></div></div></div><p>AltosDroid new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Monitor Idle mode. Check state of flight computer while in
 idle mode over the radio link
 </li><li class="listitem">
@@ -892,12 +894,12 @@ Recover old tracker positions when restarting
 application. This finally allows you to safely stop and
 restart the application without losing the last known
 location of any tracker.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_2"></a>F.9.4. Documentation</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_2"></a>F.10.4. Documentation</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Document TeleMega and EasyMega additional pyro channel
 continuity audio alert pattern.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_2"></a>F.10. Release Notes for Version 1.6.2</h2></div></div></div><p>Version 1.6.2 includes support for our updated TeleMega v2.0
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_2"></a>F.11. Release Notes for Version 1.6.2</h2></div></div></div><p>Version 1.6.2 includes support for our updated TeleMega v2.0
 product and bug fixes in in the flight software for all our boards
-and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_10"></a>F.10.1. AltOS</h3></div></div></div><p>AltOS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_11"></a>F.11.1. AltOS</h3></div></div></div><p>AltOS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleMega v2.0 boards.
 </li><li class="listitem">
 Add PWM servo driver. There’s no higher level code using
@@ -906,14 +908,14 @@ servo output connector.
 </li></ul></div><p>AltOS Fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Slow down telemetry packets to allow receiver to keep
 up.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_7"></a>F.10.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS Fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_7"></a>F.11.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS Fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix post-flight orientation computation when processing
 TeleMega and EasyMega eeprom data files.
 </li><li class="listitem">
 Capture complete eeprom data even when there are invalid
 entries in the data. This keeps reading eeprom contents and
 writing the associated .eeprom file when an error is detected.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_3"></a>F.10.3. Documentation</h3></div></div></div><p>We spent a bunch of time trying to improve our documentation</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_3"></a>F.11.3. Documentation</h3></div></div></div><p>We spent a bunch of time trying to improve our documentation</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 HTML versions now have a table of contents on the left side.
 </li><li class="listitem">
 EasyMini now has its own shorter manual.
index e479617d4bb3578b5a2b9b80de48031cf96b91d4..2c88ada3b48e99a7d98ccf5ea2ef3567ded32fd8 100644 (file)
Binary files a/AltOS/doc/easymini.pdf and b/AltOS/doc/easymini.pdf differ
index fa9f00c52e4043f19431f2ac11058753a8d8641c..064a5116386b8ef546963261ff053251c125aab6 100644 (file)
Binary files a/AltOS/doc/micropeak.pdf and b/AltOS/doc/micropeak.pdf differ
index f9359c31589843f84abc7abb241db37d612593f2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
Binary files a/AltOS/doc/telegps-outline.pdf and b/AltOS/doc/telegps-outline.pdf differ
index 67b36ca30c289f33c7b2ddd52a1429b9f9a92479..adf56204728e09ad45030e9d81a0d4f9bb420bbc 100644 (file)
@@ -14,7 +14,7 @@ collaborators, and we certainly appreciate this level of
 contribution!</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="blockquote"><blockquote class="blockquote"><div class="literallayout"><p>Bdale Garbee, KB0G<br />
 NAR #87103, TRA #12201</p></div></blockquote></div><div class="blockquote"><blockquote class="blockquote"><div class="literallayout"><p>Keith Packard, KD7SQG<br />
-NAR #88757, TRA #12200</p></div></blockquote></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="#_telegps_quick_start_guide">1. TeleGPS Quick Start Guide</a></span></dt><dt><span class="chapter"><a href="#_using_telegps_hardware">2. Using TeleGPS Hardware</a></span></dt><dd><dl><dt><span class="section"><a href="#_hooking_up_lithium_polymer_batteries">2.1. Hooking Up Lithium Polymer Batteries</a></span></dt><dt><span class="section"><a href="#_on_board_data_recording">2.2. On-board Data Recording</a></span></dt><dt><span class="section"><a href="#_installation">2.3. Installation</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_telegps_application">3. TeleGPS Application</a></span></dt><dd><dl><dt><span class="section"><a href="#_telemetry_monitoring">3.1. Telemetry Monitoring</a></span></dt><dd><dl><dt><span class="section"><a href="#_map">3.1.1. Map</a></span></dt><dt><span class="section"><a href="#_location">3.1.2. Location</a></span></dt><dt><span class="section"><a href="#_status">3.1.3. Status</a></span></dt><dt><span class="section"><a href="#_table">3.1.4. Table</a></span></dt></dl></dd><dt><span class="section"><a href="#_telegps_menus">3.2. TeleGPS Menus</a></span></dt><dd><dl><dt><span class="section"><a href="#_new_window">3.2.1. New Window</a></span></dt></dl></dd><dt><span class="section"><a href="#_graph_data">3.3. Graph Data</a></span></dt><dd><dl><dt><span class="section"><a href="#_data_graph">3.3.1. Data Graph</a></span></dt><dt><span class="section"><a href="#_graph_configuration">3.3.2. Graph Configuration</a></span></dt><dt><span class="section"><a href="#_statistics">3.3.3. Statistics</a></span></dt><dt><span class="section"><a href="#_map_2">3.3.4. Map</a></span></dt></dl></dd><dt><span class="section"><a href="#_export_data">3.4. Export Data</a></span></dt><dd><dl><dt><span class="section"><a href="#_comma_separated_value_format">3.4.1. Comma Separated Value Format</a></span></dt><dt><span class="section"><a href="#_keyhole_markup_language_for_google_earth">3.4.2. Keyhole Markup Language (for Google Earth)</a></span></dt></dl></dd><dt><span class="section"><a href="#_load_maps">3.5. Load Maps</a></span></dt><dt><span class="section"><a href="#_preferences">3.6. Preferences</a></span></dt><dd><dl><dt><span class="section"><a href="#_voice_settings">3.6.1. Voice Settings</a></span></dt><dt><span class="section"><a href="#_log_directory">3.6.2. Log Directory</a></span></dt><dt><span class="section"><a href="#_callsign">3.6.3. Callsign</a></span></dt><dt><span class="section"><a href="#_imperial_units">3.6.4. Imperial Units</a></span></dt><dt><span class="section"><a href="#_serial_debug">3.6.5. Serial Debug</a></span></dt><dt><span class="section"><a href="#_font_size">3.6.6. Font size</a></span></dt><dt><span class="section"><a href="#_look_amp_feel">3.6.7. Look &amp; feel</a></span></dt><dt><span class="section"><a href="#_menu_position">3.6.8. Menu position</a></span></dt><dt><span class="section"><a href="#_map_cache_size">3.6.9. Map Cache Size</a></span></dt><dt><span class="section"><a href="#_manage_frequencies">3.6.10. Manage Frequencies</a></span></dt></dl></dd><dt><span class="section"><a href="#_close">3.7. Close</a></span></dt><dt><span class="section"><a href="#_exit">3.8. Exit</a></span></dt><dt><span class="section"><a href="#_connect_device">3.9. Connect Device</a></span></dt><dt><span class="section"><a href="#_disconnect">3.10. Disconnect</a></span></dt><dt><span class="section"><a href="#_scan_channels">3.11. Scan Channels</a></span></dt><dt><span class="section"><a href="#_download_data">3.12. Download Data</a></span></dt><dt><span class="section"><a href="#_configure_device">3.13. Configure Device</a></span></dt><dd><dl><dt><span class="section"><a href="#_frequency">3.13.1. Frequency</a></span></dt><dt><span class="section"><a href="#_rf_calibration">3.13.2. RF Calibration</a></span></dt><dt><span class="section"><a href="#_telemetry_rdf_aprs_enable">3.13.3. Telemetry/RDF/APRS Enable</a></span></dt><dt><span class="section"><a href="#_telemetry_baud_rate">3.13.4. Telemetry baud rate</a></span></dt><dt><span class="section"><a href="#_aprs_interval">3.13.5. APRS Interval</a></span></dt><dt><span class="section"><a href="#_aprs_ssid">3.13.6. APRS SSID</a></span></dt><dt><span class="section"><a href="#_aprs_format">3.13.7. APRS Format</a></span></dt><dt><span class="section"><a href="#_callsign_2">3.13.8. Callsign</a></span></dt><dt><span class="section"><a href="#_logging_trigger_motion">3.13.9. Logging Trigger Motion</a></span></dt><dt><span class="section"><a href="#_position_reporting_interval">3.13.10. Position Reporting Interval</a></span></dt></dl></dd><dt><span class="section"><a href="#_flash_device">3.14. Flash Device</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_telegps_system_operation">A. TeleGPS System Operation</a></span></dt><dd><dl><dt><span class="section"><a href="#_gfsk_telemetry">A.1. GFSK Telemetry</a></span></dt><dt><span class="section"><a href="#_aprs">A.2. APRS</a></span></dt><dt><span class="section"><a href="#_configurable_parameters">A.3. Configurable Parameters</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_handling_precautions">B. Handling Precautions</a></span></dt><dt><span class="appendix"><a href="#_technical_information">C. Technical Information</a></span></dt><dd><dl><dt><span class="section"><a href="#_gps_receiver">C.1. GPS Receiver</a></span></dt><dt><span class="section"><a href="#_70cm_transmitter">C.2. 70cm Transmitter</a></span></dt><dt><span class="section"><a href="#_micro_controller">C.3. Micro-controller</a></span></dt><dt><span class="section"><a href="#_lithium_polymer_battery">C.4. Lithium Polymer Battery</a></span></dt><dt><span class="section"><a href="#_mechanical_considerations">C.5. Mechanical Considerations</a></span></dt><dt><span class="section"><a href="#_on_board_data_storage">C.6. On-board data storage</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_updating_device_firmware">D. Updating Device Firmware</a></span></dt><dd><dl><dt><span class="section"><a href="#_updating_telegps_firmware">D.1. Updating TeleGPS Firmware</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_release_notes">E. Release Notes</a></span></dt><dd><dl><dt><span class="section"><a href="#_release_notes_for_version_1_8_3">E.1. Release Notes for Version 1.8.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos">E.1.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications">E.1.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_2">E.2. Release Notes for Version 1.8.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_2">E.2.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_2">E.2.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_1">E.3. Release Notes for Version 1.8.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_3">E.3.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_3">E.3.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8">E.4. Release Notes for Version 1.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_4">E.4.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_4">E.4.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_7">E.5. Release Notes for Version 1.7</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_5">E.5.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_5">E.5.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_8">E.6. Release Notes for Version 1.6.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_6">E.6.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications">E.6.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_5">E.7. Release Notes for Version 1.6.5</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_7">E.7.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications_2">E.7.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_4">E.8. Release Notes for Version 1.6.4</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_8">E.8.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications_3">E.8.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt><dt><span class="section"><a href="#_documentation">E.8.3. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_3">E.9. Release Notes for Version 1.6.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_9">E.9.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_6">E.9.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_altosdroid">E.9.3. AltosDroid</a></span></dt><dt><span class="section"><a href="#_documentation_2">E.9.4. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_2">E.10. Release Notes for Version 1.6.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_10">E.10.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_7">E.10.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_documentation_3">E.10.3. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_1">E.11. Release Notes for Version 1.6.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_11">E.11.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_8">E.11.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_altosdroid_2">E.11.3. AltosDroid</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6">E.12. Release Notes for Version 1.6</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_12">E.12.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_9">E.12.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_5">E.13. Release Notes for Version 1.5</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_13">E.13.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_10">E.13.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_4_2">E.14. Release Notes for Version 1.4.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_and_telegps_applications_11">E.14.1. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_4_1">E.15. Release Notes for Version 1.4.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_and_telegps_applications_12">E.15.1. AltosUI and TeleGPS Applications:</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_4">E.16. Release Notes for Version 1.4</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_14">E.16.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application">E.16.2. AltosUI Application</a></span></dt><dt><span class="section"><a href="#_telegps_application_2">E.16.3. TeleGPS Application</a></span></dt><dt><span class="section"><a href="#_documentation_4">E.16.4. Documentation</a></span></dt></dl></dd></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>3.1. <a href="#idm129">TeleGPS Map View</a></dt><dt>3.2. <a href="#idm144">TeleGPS Location View</a></dt><dt>3.3. <a href="#idm154">TeleGPS Status View</a></dt><dt>3.4. <a href="#idm164">TeleGPS Information Table</a></dt><dt>3.5. <a href="#idm199">TeleGPS Graph</a></dt><dt>3.6. <a href="#idm208">TeleGPS Graph Configuration</a></dt><dt>3.7. <a href="#idm218">TeleGPS Statistics</a></dt><dt>3.8. <a href="#idm228">TeleGPS Map</a></dt><dt>3.9. <a href="#idm249">Load Maps Window</a></dt><dt>3.10. <a href="#idm282">TeleGPS Preferences Window</a></dt><dt>3.11. <a href="#idm341">Device Selection Dialog</a></dt><dt>3.12. <a href="#idm353">Radio Scanning Dialog</a></dt><dt>3.13. <a href="#idm371">TeleGPS Configuration Dialog</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>A.1. <a href="#idm446">Altus Metrum APRS Comments</a></dt></dl></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_telegps_quick_start_guide"></a>Chapter 1. TeleGPS Quick Start Guide</h1></div></div></div><p>TeleGPS is designed to be easy to use. Requiring no external
+NAR #88757, TRA #12200</p></div></blockquote></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="#_telegps_quick_start_guide">1. TeleGPS Quick Start Guide</a></span></dt><dt><span class="chapter"><a href="#_using_telegps_hardware">2. Using TeleGPS Hardware</a></span></dt><dd><dl><dt><span class="section"><a href="#_hooking_up_lithium_polymer_batteries">2.1. Hooking Up Lithium Polymer Batteries</a></span></dt><dt><span class="section"><a href="#_on_board_data_recording">2.2. On-board Data Recording</a></span></dt><dt><span class="section"><a href="#_installation">2.3. Installation</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_telegps_application">3. TeleGPS Application</a></span></dt><dd><dl><dt><span class="section"><a href="#_telemetry_monitoring">3.1. Telemetry Monitoring</a></span></dt><dd><dl><dt><span class="section"><a href="#_map">3.1.1. Map</a></span></dt><dt><span class="section"><a href="#_location">3.1.2. Location</a></span></dt><dt><span class="section"><a href="#_status">3.1.3. Status</a></span></dt><dt><span class="section"><a href="#_table">3.1.4. Table</a></span></dt></dl></dd><dt><span class="section"><a href="#_telegps_menus">3.2. TeleGPS Menus</a></span></dt><dd><dl><dt><span class="section"><a href="#_new_window">3.2.1. New Window</a></span></dt></dl></dd><dt><span class="section"><a href="#_graph_data">3.3. Graph Data</a></span></dt><dd><dl><dt><span class="section"><a href="#_data_graph">3.3.1. Data Graph</a></span></dt><dt><span class="section"><a href="#_graph_configuration">3.3.2. Graph Configuration</a></span></dt><dt><span class="section"><a href="#_statistics">3.3.3. Statistics</a></span></dt><dt><span class="section"><a href="#_map_2">3.3.4. Map</a></span></dt></dl></dd><dt><span class="section"><a href="#_export_data">3.4. Export Data</a></span></dt><dd><dl><dt><span class="section"><a href="#_comma_separated_value_format">3.4.1. Comma Separated Value Format</a></span></dt><dt><span class="section"><a href="#_keyhole_markup_language_for_google_earth">3.4.2. Keyhole Markup Language (for Google Earth)</a></span></dt></dl></dd><dt><span class="section"><a href="#_load_maps">3.5. Load Maps</a></span></dt><dt><span class="section"><a href="#_preferences">3.6. Preferences</a></span></dt><dd><dl><dt><span class="section"><a href="#_voice_settings">3.6.1. Voice Settings</a></span></dt><dt><span class="section"><a href="#_log_directory">3.6.2. Log Directory</a></span></dt><dt><span class="section"><a href="#_callsign">3.6.3. Callsign</a></span></dt><dt><span class="section"><a href="#_imperial_units">3.6.4. Imperial Units</a></span></dt><dt><span class="section"><a href="#_serial_debug">3.6.5. Serial Debug</a></span></dt><dt><span class="section"><a href="#_font_size">3.6.6. Font size</a></span></dt><dt><span class="section"><a href="#_look_amp_feel">3.6.7. Look &amp; feel</a></span></dt><dt><span class="section"><a href="#_menu_position">3.6.8. Menu position</a></span></dt><dt><span class="section"><a href="#_map_cache_size">3.6.9. Map Cache Size</a></span></dt><dt><span class="section"><a href="#_manage_frequencies">3.6.10. Manage Frequencies</a></span></dt></dl></dd><dt><span class="section"><a href="#_close">3.7. Close</a></span></dt><dt><span class="section"><a href="#_exit">3.8. Exit</a></span></dt><dt><span class="section"><a href="#_connect_device">3.9. Connect Device</a></span></dt><dt><span class="section"><a href="#_disconnect">3.10. Disconnect</a></span></dt><dt><span class="section"><a href="#_scan_channels">3.11. Scan Channels</a></span></dt><dt><span class="section"><a href="#_download_data">3.12. Download Data</a></span></dt><dt><span class="section"><a href="#_configure_device">3.13. Configure Device</a></span></dt><dd><dl><dt><span class="section"><a href="#_frequency">3.13.1. Frequency</a></span></dt><dt><span class="section"><a href="#_rf_calibration">3.13.2. RF Calibration</a></span></dt><dt><span class="section"><a href="#_telemetry_rdf_aprs_enable">3.13.3. Telemetry/RDF/APRS Enable</a></span></dt><dt><span class="section"><a href="#_telemetry_baud_rate">3.13.4. Telemetry baud rate</a></span></dt><dt><span class="section"><a href="#_aprs_interval">3.13.5. APRS Interval</a></span></dt><dt><span class="section"><a href="#_aprs_ssid">3.13.6. APRS SSID</a></span></dt><dt><span class="section"><a href="#_aprs_format">3.13.7. APRS Format</a></span></dt><dt><span class="section"><a href="#_callsign_2">3.13.8. Callsign</a></span></dt><dt><span class="section"><a href="#_logging_trigger_motion">3.13.9. Logging Trigger Motion</a></span></dt><dt><span class="section"><a href="#_position_reporting_interval">3.13.10. Position Reporting Interval</a></span></dt></dl></dd><dt><span class="section"><a href="#_flash_device">3.14. Flash Device</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_telegps_system_operation">A. TeleGPS System Operation</a></span></dt><dd><dl><dt><span class="section"><a href="#_gfsk_telemetry">A.1. GFSK Telemetry</a></span></dt><dt><span class="section"><a href="#_aprs">A.2. APRS</a></span></dt><dt><span class="section"><a href="#_configurable_parameters">A.3. Configurable Parameters</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_handling_precautions">B. Handling Precautions</a></span></dt><dt><span class="appendix"><a href="#_technical_information">C. Technical Information</a></span></dt><dd><dl><dt><span class="section"><a href="#_gps_receiver">C.1. GPS Receiver</a></span></dt><dt><span class="section"><a href="#_70cm_transmitter">C.2. 70cm Transmitter</a></span></dt><dt><span class="section"><a href="#_micro_controller">C.3. Micro-controller</a></span></dt><dt><span class="section"><a href="#_lithium_polymer_battery">C.4. Lithium Polymer Battery</a></span></dt><dt><span class="section"><a href="#_mechanical_considerations">C.5. Mechanical Considerations</a></span></dt><dt><span class="section"><a href="#_on_board_data_storage">C.6. On-board data storage</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_updating_device_firmware">D. Updating Device Firmware</a></span></dt><dd><dl><dt><span class="section"><a href="#_updating_telegps_firmware">D.1. Updating TeleGPS Firmware</a></span></dt></dl></dd><dt><span class="appendix"><a href="#_release_notes">E. Release Notes</a></span></dt><dd><dl><dt><span class="section"><a href="#_release_notes_for_version_1_8_4">E.1. Release Notes for Version 1.8.4</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos">E.1.1. AltOS</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_3">E.2. Release Notes for Version 1.8.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_2">E.2.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications">E.2.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_2">E.3. Release Notes for Version 1.8.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_3">E.3.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_2">E.3.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8_1">E.4. Release Notes for Version 1.8.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_4">E.4.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_3">E.4.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_8">E.5. Release Notes for Version 1.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_5">E.5.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_4">E.5.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_7">E.6. Release Notes for Version 1.7</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_6">E.6.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_5">E.6.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_8">E.7. Release Notes for Version 1.6.8</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_7">E.7.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications">E.7.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_5">E.8. Release Notes for Version 1.6.5</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_8">E.8.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications_2">E.8.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_4">E.9. Release Notes for Version 1.6.4</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_9">E.9.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_telegps_and_altosdroid_applications_3">E.9.2. AltosUI, TeleGPS and AltosDroid Applications</a></span></dt><dt><span class="section"><a href="#_documentation">E.9.3. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_3">E.10. Release Notes for Version 1.6.3</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_10">E.10.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_6">E.10.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_altosdroid">E.10.3. AltosDroid</a></span></dt><dt><span class="section"><a href="#_documentation_2">E.10.4. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_2">E.11. Release Notes for Version 1.6.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_11">E.11.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_7">E.11.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_documentation_3">E.11.3. Documentation</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6_1">E.12. Release Notes for Version 1.6.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_12">E.12.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_8">E.12.2. AltosUI and TeleGPS Applications</a></span></dt><dt><span class="section"><a href="#_altosdroid_2">E.12.3. AltosDroid</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_6">E.13. Release Notes for Version 1.6</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_13">E.13.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_9">E.13.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_5">E.14. Release Notes for Version 1.5</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_14">E.14.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_and_telegps_applications_10">E.14.2. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_4_2">E.15. Release Notes for Version 1.4.2</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_and_telegps_applications_11">E.15.1. AltosUI and TeleGPS Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_4_1">E.16. Release Notes for Version 1.4.1</a></span></dt><dd><dl><dt><span class="section"><a href="#_altosui_and_telegps_applications_12">E.16.1. AltosUI and TeleGPS Applications:</a></span></dt></dl></dd><dt><span class="section"><a href="#_release_notes_for_version_1_4">E.17. Release Notes for Version 1.4</a></span></dt><dd><dl><dt><span class="section"><a href="#_altos_15">E.17.1. AltOS</a></span></dt><dt><span class="section"><a href="#_altosui_application">E.17.2. AltosUI Application</a></span></dt><dt><span class="section"><a href="#_telegps_application_2">E.17.3. TeleGPS Application</a></span></dt><dt><span class="section"><a href="#_documentation_4">E.17.4. Documentation</a></span></dt></dl></dd></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>3.1. <a href="#idm129">TeleGPS Map View</a></dt><dt>3.2. <a href="#idm144">TeleGPS Location View</a></dt><dt>3.3. <a href="#idm154">TeleGPS Status View</a></dt><dt>3.4. <a href="#idm164">TeleGPS Information Table</a></dt><dt>3.5. <a href="#idm199">TeleGPS Graph</a></dt><dt>3.6. <a href="#idm208">TeleGPS Graph Configuration</a></dt><dt>3.7. <a href="#idm218">TeleGPS Statistics</a></dt><dt>3.8. <a href="#idm228">TeleGPS Map</a></dt><dt>3.9. <a href="#idm249">Load Maps Window</a></dt><dt>3.10. <a href="#idm282">TeleGPS Preferences Window</a></dt><dt>3.11. <a href="#idm341">Device Selection Dialog</a></dt><dt>3.12. <a href="#idm353">Radio Scanning Dialog</a></dt><dt>3.13. <a href="#idm371">TeleGPS Configuration Dialog</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>A.1. <a href="#idm446">Altus Metrum APRS Comments</a></dt></dl></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="_telegps_quick_start_guide"></a>Chapter 1. TeleGPS Quick Start Guide</h1></div></div></div><p>TeleGPS is designed to be easy to use. Requiring no external
 components, flying takes just a few steps.</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
 First, download and install the software from
 <a class="ulink" href="http://altusmetrum.org/AltOS" target="_top">http://altusmetrum.org/AltOS</a>. This will make sure that
@@ -554,11 +554,13 @@ progress bar.
 Verify that the device is working by using the
 'Configure Device item to check over the
 configuration.
-</li></ol></div></div></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="_release_notes"></a>Appendix E. Release Notes</h1></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_3"></a>E.1. Release Notes for Version 1.8.3</h2></div></div></div><p>Version 1.8.3 includes support for TeleMega version 3.0 along
+</li></ol></div></div></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="_release_notes"></a>Appendix E. Release Notes</h1></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_4"></a>E.1. Release Notes for Version 1.8.4</h2></div></div></div><p>Version 1.8.4 includes support for EasyMini version 2.0</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos"></a>E.1.1. AltOS</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+Support for EasyMini version 2.0 hardware.
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_3"></a>E.2. Release Notes for Version 1.8.3</h2></div></div></div><p>Version 1.8.3 includes support for TeleMega version 3.0 along
 with two important flight computer fixes. This version also
 changes KML export data to make Tripoli Record reporting
 better and some updates to graph presentation and data
-downloading.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos"></a>E.1.1. AltOS</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altos_new_features"></a>AltOS New Features</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+downloading.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_2"></a>E.2.1. AltOS</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altos_new_features"></a>AltOS New Features</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support for TeleMega version 3.0 hardware.
 </li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altos_bug_fixes"></a>AltOS Bug Fixes</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Ground testing EasyMega and TeleMega additional pyro
@@ -570,7 +572,7 @@ from capturing log data.
 </li><li class="listitem">
 Fixed saving of pyro configuration that ended with
 <span class="emphasis"><em>Descending</em></span>.
-</li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications"></a>E.1.2. AltosUI and TeleGPS Applications</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altosui_new_features"></a>AltosUI New Features</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications"></a>E.2.2. AltosUI and TeleGPS Applications</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="_altosui_new_features"></a>AltosUI New Features</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support for TeleMega version 3.0.
 </li><li class="listitem">
 Graph lines have improved appearance to make them easier to
@@ -594,18 +596,18 @@ to make it more useful for Tripoli record reporting.
 </li><li class="listitem">
 CSV export now includes TeleMega/EasyMega pyro voltages and
 tilt angle.
-</li></ul></div><p></p></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_2"></a>E.2. Release Notes for Version 1.8.2</h2></div></div></div><p>Version 1.8.2 includes support for TeleGPS version 2.0 along
+</li></ul></div><p></p></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_2"></a>E.3. Release Notes for Version 1.8.2</h2></div></div></div><p>Version 1.8.2 includes support for TeleGPS version 2.0 along
 with accelerometer recalibration support in AltosUI.</p><p>1.8.2 also contains a couple of minor fixes for AltosUI when
-analyzing saved data files.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_2"></a>E.2.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+analyzing saved data files.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_3"></a>E.3.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support for TeleGPS version 2.0 hardware.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_2"></a>E.2.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_2"></a>E.3.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support for TeleGPS version 2.0.
 </li><li class="listitem">
 Accelerometer re-calibration user interface.
 </li></ul></div><p>AltosUI and TeleGPS Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Prevent some crashes when reading older saved flight data
 for graphing or KML export.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_1"></a>E.3. Release Notes for Version 1.8.1</h2></div></div></div><p>Version 1.8.1 includes an important bug fix for Apogee Lockout
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8_1"></a>E.4. Release Notes for Version 1.8.1</h2></div></div></div><p>Version 1.8.1 includes an important bug fix for Apogee Lockout
 operation in all flight computers. Anyone using this option
 must update firmware.</p><p>This release also contains a change in how flight computers
 with accelerometers deal with speeds around and above Mach
@@ -615,7 +617,7 @@ disregard the barometric sensor above 330m/s (around Mach
 effect without ever going away entirely. This prevents early
 drogue deployment for flights which spend considerable time
 above Mach 1.</p><p>1.8.1 also contains a couple of minor fixes for AltosUI when
-analyzing saved data files.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_3"></a>E.3.1. AltOS</h3></div></div></div><p>AltOS Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+analyzing saved data files.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_4"></a>E.4.1. AltOS</h3></div></div></div><p>AltOS Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Handle time value wrapping in Apogee Lockout
 correctly. Without this, apogee lockout would sometimes
 prevent any drogue charge from firing.
@@ -624,7 +626,7 @@ Change Kalman filter on flight computers with accelerometer
 to continue using the barometric sensor even at high speeds
 to avoid unintentional drogue deployment during
 deceleration.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_3"></a>E.3.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_3"></a>E.4.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add new <span class="emphasis"><em>Huge</em></span> font size to make text even bigger on high
 resolution monitors.
 </li></ul></div><p>AltosUI Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
@@ -633,12 +635,12 @@ for graphing or KML export.
 </li><li class="listitem">
 Load frequency preference at startup. The loading code was
 broken, so you’d see only the default frequencies.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8"></a>E.4. Release Notes for Version 1.8</h2></div></div></div><p>Version 1.8 includes support for our new TeleBT v4.0 ground
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_8"></a>E.5. Release Notes for Version 1.8</h2></div></div></div><p>Version 1.8 includes support for our new TeleBT v4.0 ground
 station, updates for data analysis in our ground station
 software and bug fixes in in the flight software for all our
-boards and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_4"></a>E.4.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+boards and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_5"></a>E.5.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleBT v4.0 boards.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_4"></a>E.4.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_4"></a>E.5.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleBT v4.0 hardware
 </li><li class="listitem">
 Rewrite graphing and export functions. This code now handles
@@ -649,20 +651,20 @@ acceleration data more accurate.
 </li></ul></div><p>AltosUI Bug Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Correct axis labeling of magnetic sensor in TeleMega and
 EasyMega. The Y and Z axes were flipped.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_7"></a>E.5. Release Notes for Version 1.7</h2></div></div></div><p>Version 1.7 includes support for our new TeleMini v3.0
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_7"></a>E.6. Release Notes for Version 1.7</h2></div></div></div><p>Version 1.7 includes support for our new TeleMini v3.0
 flight computer and bug fixes in in the flight software for all our boards
-and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_5"></a>E.5.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_6"></a>E.6.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleMini v3.0 boards.
 </li></ul></div><p>AltOS Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix interrupt priorities on STM32L processors. Run timer
 interrupt at lowest priority so that device interrupts get
 serviced first.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_5"></a>E.5.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_5"></a>E.6.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleMini v3.0 hardware
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_8"></a>E.6. Release Notes for Version 1.6.8</h2></div></div></div><p>Version 1.6.8 fixes a TeleMega and TeleMetrum v2.0 bug where
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_8"></a>E.7. Release Notes for Version 1.6.8</h2></div></div></div><p>Version 1.6.8 fixes a TeleMega and TeleMetrum v2.0 bug where
 the device could stop logging data and transmitting
 telemetry in flight. All TeleMega v1.0, v2.0 and TeleMetrum
-v2.0 users should update their flight firmware.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_6"></a>E.6.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+v2.0 users should update their flight firmware.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_7"></a>E.7.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix STM32L DMA driver to work around STM32L SoC DMA priority
 issue t lock-up in the logging or radio code, either of
 which could stop data logging and telemetry.
@@ -675,7 +677,7 @@ flight.
 </li></ul></div><p>AltOS changes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Flash LEDS on all products briefly during power up so that
 they can be tested during production.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications"></a>E.6.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications"></a>E.7.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Re-enable go/no-go entries after they’ve been disabled due
 to lack of data. If telemetry information is delayed when
 the Ui starts up, sometimes important fields would get
@@ -683,20 +685,20 @@ disabled to never re-appear.
 </li><li class="listitem">
 Deal with ground station failure better during Configure
 Ground Station operation by cleaning up pending operations.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_5"></a>E.7. Release Notes for Version 1.6.5</h2></div></div></div><p>Version 1.6.5 fixes a TeleMega and TeleMetrum v2.0 bug where
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_5"></a>E.8. Release Notes for Version 1.6.5</h2></div></div></div><p>Version 1.6.5 fixes a TeleMega and TeleMetrum v2.0 bug where
 the device would often stop logging data and transmitting
 telemetry in flight. All TeleMega v1.0, v2.0 and TeleMetrum
-v2.0 users should update their flight firmware.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_7"></a>E.7.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+v2.0 users should update their flight firmware.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_8"></a>E.8.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix STM32L SPI driver to prevent lock-up in the logging or
 radio code, either of which could stop data logging and
 telemetry. Found and characterized by Chuck Haskin, who also
 tested the new firmware before release.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications_2"></a>E.7.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications_2"></a>E.8.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Deliver firmward for TeleMega v2.0 and TeleBT v3.0 with
 Windows package.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_4"></a>E.8. Release Notes for Version 1.6.4</h2></div></div></div><p>Version 1.6.4 fixes a bluetooth communication problem with
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_4"></a>E.9. Release Notes for Version 1.6.4</h2></div></div></div><p>Version 1.6.4 fixes a bluetooth communication problem with
 TeleBT v1.0 devices, along with some altosui and altosdroid
-minor nits. It also now ships firmware for some newer devices.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_8"></a>E.8.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+minor nits. It also now ships firmware for some newer devices.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_9"></a>E.9.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix hardware flow control on TeleBT v1.0. Hardware RTS/CTS
 doesn’t seem to work, switch from using the hardware to
 driving these pins with software.
@@ -704,7 +706,7 @@ driving these pins with software.
 Fix ARM USB drivers to deal with OS restarts. Needed to
 reset all USB-related state when the USB bus is reset. These
 fixes affect all STM32L, STM32F0 and LPC11U14 based devices.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications_3"></a>E.8.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI, TeleGPS and AltosDroid New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_telegps_and_altosdroid_applications_3"></a>E.9.2. AltosUI, TeleGPS and AltosDroid Applications</h3></div></div></div><p>AltosUI, TeleGPS and AltosDroid New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Automatically switch from meters or feet to kilometers or
 miles for distance units.
 </li><li class="listitem">
@@ -715,17 +717,17 @@ Abort map preloading when the preload map dialog is closed.
 In AltosDroid, Don’t reconnect to last device if the user
 had disconnected it the last time the application was
 active.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation"></a>E.8.3. Documentation</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation"></a>E.9.3. Documentation</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Mention TeleMega v2.0 in hardware specs table.
 </li><li class="listitem">
 Document TeleGPS RF output in telegps manual.
-</li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_3"></a>E.9. Release Notes for Version 1.6.3</h2></div></div></div><p>Version 1.6.3 adds idle mode to AltosDroid and has bug fixes
+</li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_3"></a>E.10. Release Notes for Version 1.6.3</h2></div></div></div><p>Version 1.6.3 adds idle mode to AltosDroid and has bug fixes
 for our host software on desktops, laptops an android devices
-along with BlueTooth support for Windows.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_9"></a>E.9.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+along with BlueTooth support for Windows.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_10"></a>E.10.1. AltOS</h3></div></div></div><p>AltOS fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix hardware flow control on TeleBT v3.0. RTS/CTS is
 wired backwards on this board, switch from using the
 hardware to driving these pins with software.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_6"></a>E.9.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_6"></a>E.10.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add BlueTooth support for Windows operating system. This
 supports connections to TeleBT over BlueTooth rather than
 just USB.
@@ -747,7 +749,7 @@ the connected Altus Metrum USB devices appear again.
 </li><li class="listitem">
 Fix acceleration data presented in MonitorIdle mode for
 TeleMetrum v2.0 flight computers.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosdroid"></a>E.9.3. AltosDroid</h3></div></div></div><p>AltosDroid new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosdroid"></a>E.10.3. AltosDroid</h3></div></div></div><p>AltosDroid new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Monitor Idle mode. Check state of flight computer while in
 idle mode over the radio link
 </li><li class="listitem">
@@ -785,12 +787,12 @@ Recover old tracker positions when restarting
 application. This finally allows you to safely stop and
 restart the application without losing the last known
 location of any tracker.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_2"></a>E.9.4. Documentation</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_2"></a>E.10.4. Documentation</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Document TeleMega and EasyMega additional pyro channel
 continuity audio alert pattern.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_2"></a>E.10. Release Notes for Version 1.6.2</h2></div></div></div><p>Version 1.6.2 includes support for our updated TeleMega v2.0
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_2"></a>E.11. Release Notes for Version 1.6.2</h2></div></div></div><p>Version 1.6.2 includes support for our updated TeleMega v2.0
 product and bug fixes in in the flight software for all our boards
-and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_10"></a>E.10.1. AltOS</h3></div></div></div><p>AltOS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_11"></a>E.11.1. AltOS</h3></div></div></div><p>AltOS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleMega v2.0 boards.
 </li><li class="listitem">
 Add PWM servo driver. There’s no higher level code using
@@ -799,14 +801,14 @@ servo output connector.
 </li></ul></div><p>AltOS Fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Slow down telemetry packets to allow receiver to keep
 up.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_7"></a>E.10.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS Fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_7"></a>E.11.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS Fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Fix post-flight orientation computation when processing
 TeleMega and EasyMega eeprom data files.
 </li><li class="listitem">
 Capture complete eeprom data even when there are invalid
 entries in the data. This keeps reading eeprom contents and
 writing the associated .eeprom file when an error is detected.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_3"></a>E.10.3. Documentation</h3></div></div></div><p>We spent a bunch of time trying to improve our documentation</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_3"></a>E.11.3. Documentation</h3></div></div></div><p>We spent a bunch of time trying to improve our documentation</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 HTML versions now have a table of contents on the left side.
 </li><li class="listitem">
 EasyMini now has its own shorter manual.
@@ -815,9 +817,9 @@ Provide links between sections in each document.
 </li><li class="listitem">
 Lots of minor rewriting and restructuring to avoid
 duplication of information
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_1"></a>E.11. Release Notes for Version 1.6.1</h2></div></div></div><p>Version 1.6.1 includes support for our updated TeleBT v3.0
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6_1"></a>E.12. Release Notes for Version 1.6.1</h2></div></div></div><p>Version 1.6.1 includes support for our updated TeleBT v3.0
 product and bug fixes in in the flight software for all our boards
-and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_11"></a>E.11.1. AltOS</h3></div></div></div><p>AltOS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_12"></a>E.12.1. AltOS</h3></div></div></div><p>AltOS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleBT v3.0 boards.
 </li><li class="listitem">
 Add support for uncompressed APRS data, providing support
@@ -827,7 +829,7 @@ altitude data.
 </li></ul></div><p>AltOS Fixes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Make TeleDongle and TeleBT more tolerant of data rate
 variations from transmitting devices.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_8"></a>E.11.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_8"></a>E.12.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add map to Monitor Idle display. It’s nice to be able to
 verify that maps are working, instead of needing to use
 Monitor Flight.
@@ -865,7 +867,7 @@ will take longer to respond to changes now.
 </li><li class="listitem">
 Make Replay Flight run in realtime again. It had been set to
 run at 10x speed by mistake.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosdroid_2"></a>E.11.3. AltosDroid</h3></div></div></div><p>AltosDroid New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosdroid_2"></a>E.12.3. AltosDroid</h3></div></div></div><p>AltosDroid New Features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add offline map support using mapping code from AltosUI.
 </li><li class="listitem">
 Support TeleDongle (and TeleBT via USB) on devices
@@ -893,9 +895,9 @@ Make voice announcements depend on current tab.
 </li><li class="listitem">
 Compute adjustment to current travel direction while in
 motion towards rocket.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6"></a>E.12. Release Notes for Version 1.6</h2></div></div></div><p>Version 1.6 includes support for our updated TeleDongle v3.0
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_6"></a>E.13. Release Notes for Version 1.6</h2></div></div></div><p>Version 1.6 includes support for our updated TeleDongle v3.0
 product and bug fixes in in the flight software for all our boards
-and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_12"></a>E.12.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+and ground station interfaces.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_13"></a>E.13.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleDongle v3.0 boards.
 </li></ul></div><p>AltOS Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Don’t beep out the continuity twice by accident in idle mode.
@@ -915,7 +917,7 @@ interrupt code would occasionally wedge on long transfers
 if interrupts were blocked for too long. This affects all
 released TeleGPS products; if you have a TeleGPS device,
 you’ll want to reflash the firmware.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_9"></a>E.12.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_9"></a>E.13.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Compute tilt angle from TeleMega and EasyMega log
 files. This duplicates the quaternion-based angle tracking
 code from the flight firmware inside the ground station
@@ -961,9 +963,9 @@ five seconds these days.
 In the Scan Channels code, reset pending flight state
 information each time we change channels. This avoids having
 flight computers appear on multiple frequencies by accident.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_5"></a>E.13. Release Notes for Version 1.5</h2></div></div></div><p>Version 1.5 is a major release. It includes support for our new
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_5"></a>E.14. Release Notes for Version 1.5</h2></div></div></div><p>Version 1.5 is a major release. It includes support for our new
 EasyMega product, new features and bug fixes in in the flight
-software for all our boards and the AltosUI ground station</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_13"></a>E.13.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+software for all our boards and the AltosUI ground station</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_14"></a>E.14.1. AltOS</h3></div></div></div><p>AltOS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for EasyMega boards.
 </li><li class="listitem">
 Make the APRS SSID be configurable. This lets you track
@@ -997,7 +999,7 @@ the delay, but become bad before the delay expires.
 Allow negative numbers in pyro configuration values. This
 lets you specify things like descending speed or
 deceleration.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_10"></a>E.13.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_10"></a>E.14.2. AltosUI and TeleGPS Applications</h3></div></div></div><p>AltosUI and TeleGPS New Features</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Support telemetry baud rate selection. Adds menus to
 the flight monitoring and configuration for baud rate
 selection.
@@ -1014,18 +1016,18 @@ Make the <span class="emphasis"><em>Graph</em></span> button on the landed tab w
 Make tests for Java on Windows a bit smarter, and also
 provide the user with the option to skip installing Java for
 cases where we just can’t figure out what version is installed.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_4_2"></a>E.14. Release Notes for Version 1.4.2</h2></div></div></div><p>Version 1.4.2 is a minor release. It fixes Java-related install issues on
-Windows</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_11"></a>E.14.1. AltosUI and TeleGPS Applications</h3></div></div></div><p>Windows Install Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_4_2"></a>E.15. Release Notes for Version 1.4.2</h2></div></div></div><p>Version 1.4.2 is a minor release. It fixes Java-related install issues on
+Windows</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_11"></a>E.15.1. AltosUI and TeleGPS Applications</h3></div></div></div><p>Windows Install Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Checks for Java installation data in more registry locations.
 </li><li class="listitem">
 Allows user to bypass Java installation in case the
 detection fails.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_4_1"></a>E.15. Release Notes for Version 1.4.1</h2></div></div></div><p>Version 1.4.1 is a minor release. It fixes install issues on
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_4_1"></a>E.16. Release Notes for Version 1.4.1</h2></div></div></div><p>Version 1.4.1 is a minor release. It fixes install issues on
 Windows and provides the missing TeleMetrum V2.0 firmware. There
 aren’t any changes to the firmware or host applications at
 all. All Windows users will want to upgrade to get the signed
 driver, but Mac and Linux users who do not need the TeleMetrum
-V2.0 firmware image will not need to upgrade.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_12"></a>E.15.1. AltosUI and TeleGPS Applications:</h3></div></div></div><p>Windows Install Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+V2.0 firmware image will not need to upgrade.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_and_telegps_applications_12"></a>E.16.1. AltosUI and TeleGPS Applications:</h3></div></div></div><p>Windows Install Fixes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Provide signed Windows driver files. This should avoid any need to
 disable driver signature checking on Windows 7 or 8.
 </li><li class="listitem">
@@ -1043,9 +1045,9 @@ packages for Linux, Mac and Windows.
 Include Google Application Key for map downloading. The 1.4
 release didn’t have this key in the released version of the
 software, making map downloading fail for most people.
-</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_4"></a>E.16. Release Notes for Version 1.4</h2></div></div></div><p>Version 1.4 is a major release. It includes support for our new
+</li></ul></div><p></p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_release_notes_for_version_1_4"></a>E.17. Release Notes for Version 1.4</h2></div></div></div><p>Version 1.4 is a major release. It includes support for our new
 TeleGPS product, new features and bug fixes in in the flight
-software for all our boards and the AltosUI ground station</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_14"></a>E.16.1. AltOS</h3></div></div></div><p>AltOS new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+software for all our boards and the AltosUI ground station</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altos_15"></a>E.17.1. AltOS</h3></div></div></div><p>AltOS new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add support for TeleGPS boards.
 </li><li class="listitem">
 Make the beeper tone configurable, making it
@@ -1075,7 +1077,7 @@ number to 2 on TeleMega and TeleMetrum v2.
 </li><li class="listitem">
 Fix u-Blox GPS driver to mark course and speed data
 as being present.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application"></a>E.16.2. AltosUI Application</h3></div></div></div><p>AltosUI new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_altosui_application"></a>E.17.2. AltosUI Application</h3></div></div></div><p>AltosUI new features:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Add zooming and new content types (terrain and road
 maps) to map view. Change map storage format from
 PNG to Jpeg, which saves a huge amount of disk
@@ -1132,12 +1134,12 @@ Handle TeleMetrum and TeleMini eeprom files
 generated with pre-1.0 firmware. Those ancient
 versions didn’t report the log format, so just use
 the product name instead.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_telegps_application_2"></a>E.16.3. TeleGPS Application</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_telegps_application_2"></a>E.17.3. TeleGPS Application</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 New application designed for use with TeleGPS boards.
 </li><li class="listitem">
 Shares code with AltosUI, mostly just trimmed down
 to focus on TeleGPS-related functions.
-</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_4"></a>E.16.4. Documentation</h3></div></div></div><p>Documentation changes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_documentation_4"></a>E.17.4. Documentation</h3></div></div></div><p>Documentation changes:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
 Re-create the drill template images; they should
 print correctly from Firefox at least. Ship these as
 individual PDF files so they’re easy to print.
index 9b3c2eb9c711083e23990cfa9fd839004afa8e91..29134c3bc522cdd90789d2a7762d77844ed96cc8 100644 (file)
Binary files a/AltOS/doc/telegps.pdf and b/AltOS/doc/telegps.pdf differ
index 043836fd6abbae30a7892c5ecfdd448efefa2c8f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
Binary files a/AltOS/doc/telemega-outline.pdf and b/AltOS/doc/telemega-outline.pdf differ
index 82ae9b464e9805c11f6dc19de2bb307677a26a0e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
Binary files a/AltOS/doc/telemetrum-outline.pdf and b/AltOS/doc/telemetrum-outline.pdf differ
index 5113c2a274a1609925b8fecda2ffb4b0f2fcfc2a..ac37b9f39de3a07afebc6f1258e1839d5a0fdd4c 100644 (file)
-<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="idm45387730255632"></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="idm45387703834864"></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 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="#idm45387702977984">1. Packet Format Design</a></span></dt><dt><span class="section"><a href="#idm45387702974992">2. Packet Formats</a></span></dt><dd><dl><dt><span class="section"><a href="#idm45387702973792">2.1. Packet Header</a></span></dt><dt><span class="section"><a href="#idm45387703730528">2.2. TeleMetrum v1.x, TeleMini and TeleNano Sensor Data</a></span></dt><dt><span class="section"><a href="#idm45387697986624">2.3. TeleMega Sensor  Data</a></span></dt><dt><span class="section"><a href="#idm45387697911584">2.4. TeleMetrum v2 Sensor  Data</a></span></dt><dt><span class="section"><a href="#idm45387697850976">2.5. Configuration Data</a></span></dt><dt><span class="section"><a href="#idm45387697816944">2.6. GPS Location</a></span></dt><dt><span class="section"><a href="#idm45387697735648">2.7. GPS Satellite Data</a></span></dt><dt><span class="section"><a href="#idm45387697697056">2.8. Companion Data Data</a></span></dt></dl></dd><dt><span class="section"><a href="#idm45387697670160">3. Data Transmission</a></span></dt><dd><dl><dt><span class="section"><a href="#idm45387697655920">3.1. Modulation Scheme</a></span></dt><dt><span class="section"><a href="#idm45387697642000">3.2. Error Correction</a></span></dt></dl></dd><dt><span class="section"><a href="#idm45387697628320">4. TeleDongle packet format</a></span></dt><dt><span class="section"><a href="#idm45387697606544">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="idm45387702977984"></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
-      flight board will transmit multiple packet types, each type on a
-      different schedule. The ground software need look for only a
-      single packet size, and then decode the information within the
-      packet and merge data from multiple packets to construct the
-      full flight computer state.
-    </p><p>
-      Each AltOS packet is 32 bytes long. This size was chosen based
-      on the known telemetry data requirements. The power of two size
-      allows them to be stored easily in flash memory without having
-      them split across blocks or leaving gaps at the end.
-    </p><p>
-      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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm45387702974992"></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="idm45387702973792"></a>2.1. Packet Header</h3></div></div></div><div class="table"><a name="idm45387702973120"></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"><div class="titlepage"><div><div><h3 class="title"><a name="idm45387703730528"></a>2.2. TeleMetrum v1.x, TeleMini and TeleNano 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 v1.x 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 v1.x, 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
-       are undefined.
-      </p><p>
-       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="idm45387703907952"></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="idm45387697986624"></a>2.3. TeleMega 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">0x08</td><td align="left">TeleMega IMU Sensor Data</td></tr><tr><td align="center">0x09</td><td align="left">TeleMega Kalman and Voltage Data</td></tr></tbody></table></div><p>
-       TeleMega has a lot of sensors, and so it splits the sensor
-       data into two packets. The raw IMU data are sent more often;
-       the voltage values don't change very fast, and the Kalman
-       values can be reconstructed from the IMU data.
-      </p><p>
-       IMU 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><p>
-       Kalman and Voltage Data packets are transmitted once per second on the
-       ground, 5 times per second during ascent and once per second
-       during descent and landing
-      </p><p>
-       The high-g accelerometer is reported separately from the data
-       for the 9-axis IMU (accel/gyro/mag). The 9-axis IMU is mounted
-       so that the X axis is "across" the board (along the short
-       axis0, the Y axis is "along" the board (along the long axis,
-       with the high-g accelerometer) and the Z axis is "through" the
-       board (perpendicular to the board). Rotation measurements are
-       around the respective axis, so Y rotation measures the spin
-       rate of the rocket while X and Z rotation measure the tilt
-       rate.
-      </p><p>
-       The overall tilt angle of the rocket is computed by first
-       measuring the orientation of the rocket on the pad using the 3
-       axis accelerometer, and then integrating the overall tilt rate
-       from the 3 axis gyroscope to compute the total orientation
-       change of the airframe since liftoff.
-      </p><div class="table"><a name="idm45387697973568"></a><p class="title"><b>Table 3. TeleMega IMU Sensor Packet Contents</b></p><div class="table-contents"><table summary="TeleMega IMU 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">orient</td><td align="left">Angle from vertical in degrees</td></tr><tr><td align="center">6</td><td align="center">int16_t</td><td align="left">accel</td><td align="left">High G accelerometer</td></tr><tr><td align="center">8</td><td align="center">int32_t</td><td align="left">pres</td><td align="left">pressure (Pa * 10)</td></tr><tr><td align="center">12</td><td align="center">int16_t</td><td align="left">temp</td><td align="left">temperature (°C * 100)</td></tr><tr><td align="center">14</td><td align="center">int16_t</td><td align="left">accel_x</td><td align="left">X axis acceleration (across)</td></tr><tr><td align="center">16</td><td align="center">int16_t</td><td align="left">accel_y</td><td align="left">Y axis acceleration (along)</td></tr><tr><td align="center">18</td><td align="center">int16_t</td><td align="left">accel_z</td><td align="left">Z axis acceleration (through)</td></tr><tr><td align="center">20</td><td align="center">int16_t</td><td align="left">gyro_x</td><td align="left">X axis rotation (across)</td></tr><tr><td align="center">22</td><td align="center">int16_t</td><td align="left">gyro_y</td><td align="left">Y axis rotation (along)</td></tr><tr><td align="center">24</td><td align="center">int16_t</td><td align="left">gyro_z</td><td align="left">Z axis rotation (through)</td></tr><tr><td align="center">26</td><td align="center">int16_t</td><td align="left">mag_x</td><td align="left">X field strength (across)</td></tr><tr><td align="center">28</td><td align="center">int16_t</td><td align="left">mag_y</td><td align="left">Y field strength (along)</td></tr><tr><td align="center">30</td><td align="center">int16_t</td><td align="left">mag_z</td><td align="left">Z field strength (through)</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 class="table"><a name="idm45387697940912"></a><p class="title"><b>Table 4. TeleMega Kalman and Voltage Data Packet Contents</b></p><div class="table-contents"><table summary="TeleMega Kalman and Voltage Data 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">v_batt</td><td align="left">battery voltage</td></tr><tr><td align="center">8</td><td align="center">int16_t</td><td align="left">v_pyro</td><td align="left">pyro battery voltage</td></tr><tr><td align="center">10</td><td align="center">int8_t[6]</td><td align="left">sense</td><td align="left">pyro continuity sense</td></tr><tr><td align="center">16</td><td align="center">int32_t</td><td align="left">ground_pres</td><td align="left">Average barometer reading on ground</td></tr><tr><td align="center">20</td><td align="center">int16_t</td><td align="left">ground_accel</td><td align="left">Average accelerometer reading on ground</td></tr><tr><td align="center">22</td><td align="center">int16_t</td><td align="left">accel_plus_g</td><td align="left">Accel calibration at +1g</td></tr><tr><td align="center">24</td><td align="center">int16_t</td><td align="left">accel_minus_g</td><td align="left">Accel calibration at -1g</td></tr><tr><td align="center">26</td><td align="center">int16_t</td><td align="left">acceleration</td><td align="left">m/s² * 16</td></tr><tr><td align="center">28</td><td align="center">int16_t</td><td align="left">speed</td><td align="left">m/s * 16</td></tr><tr><td align="center">30</td><td align="center">int16_t</td><td align="left">height</td><td align="left">m</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="idm45387697911584"></a>2.4. TeleMetrum v2 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">0x0A</td><td align="left">TeleMetrum v2 Sensor Data</td></tr><tr><td align="center">0x0B</td><td align="left">TeleMetrum v2 Calibration Data</td></tr></tbody></table></div><p>
-       TeleMetrum v2 has higher resolution barometric data than
-       TeleMetrum v1, and so the constant calibration data is
-       split out into a separate packet.
-      </p><p>
-       TeleMetrum v2 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><p>
-       TeleMetrum v2 Calibration Data packets are always transmitted once per second.
-      </p><div class="table"><a name="idm45387697900336"></a><p class="title"><b>Table 5. TeleMetrum v2 Sensor Packet Contents</b></p><div class="table-contents"><table summary="TeleMetrum v2 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</td></tr><tr><td align="center">8</td><td align="center">int32_t</td><td align="left">pres</td><td align="left">pressure sensor (Pa * 10)</td></tr><tr><td align="center">12</td><td align="center">int16_t</td><td align="left">temp</td><td align="left">temperature sensor (°C * 100)</td></tr><tr><td align="center">14</td><td align="center">int16_t</td><td align="left">acceleration</td><td align="left">m/s² * 16</td></tr><tr><td align="center">16</td><td align="center">int16_t</td><td align="left">speed</td><td align="left">m/s * 16</td></tr><tr><td align="center">18</td><td align="center">int16_t</td><td align="left">height</td><td align="left">m</td></tr><tr><td align="center">20</td><td align="center">int16_t</td><td align="left">v_batt</td><td align="left">battery voltage</td></tr><tr><td align="center">22</td><td align="center">int16_t</td><td align="left">sense_d</td><td align="left">drogue continuity sense</td></tr><tr><td align="center">24</td><td align="center">int16_t</td><td align="left">sense_m</td><td align="left">main continuity sense</td></tr><tr><td align="center">26</td><td align="center">pad[6]</td><td align="left">pad bytes</td><td align="left"> </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 class="table"><a name="idm45387697871200"></a><p class="title"><b>Table 6. TeleMetrum v2 Calibration Data Packet Contents</b></p><div class="table-contents"><table summary="TeleMetrum v2 Calibration Data 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">pad[3]</td><td align="left">pad bytes</td><td align="left"> </td></tr><tr><td align="center">8</td><td align="center">int32_t</td><td align="left">ground_pres</td><td align="left">Average barometer reading on ground</td></tr><tr><td align="center">12</td><td align="center">int16_t</td><td align="left">ground_accel</td><td align="left">Average accelerometer reading on ground</td></tr><tr><td align="center">14</td><td align="center">int16_t</td><td align="left">accel_plus_g</td><td align="left">Accel calibration at +1g</td></tr><tr><td align="center">16</td><td align="center">int16_t</td><td align="left">accel_minus_g</td><td align="left">Accel calibration at -1g</td></tr><tr><td align="center">18</td><td align="center">pad[14]</td><td align="left">pad bytes</td><td align="left"> </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="idm45387697850976"></a>2.5. 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="idm45387697841824"></a><p class="title"><b>Table 7. 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="idm45387697816944"></a>2.6. 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
-       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="idm45387697807664"></a><p class="title"><b>Table 8. 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="idm45387697769600"></a><p class="title"><b>Table 9. 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="idm45387697753216"></a><p class="title"><b>Table 10. 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"><div class="titlepage"><div><div><h3 class="title"><a name="idm45387697735648"></a>2.7. 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="idm45387697726464"></a><p class="title"><b>Table 11. 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="idm45387697711184"></a><p class="title"><b>Table 12. 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 class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm45387697697056"></a>2.8. Companion Data 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">0x07</td><td align="left">Companion Data Data</td></tr></tbody></table></div><p>
-       When a companion board is attached to TeleMega or TeleMetrum,
-       it can provide telemetry data to be included in the
-       downlink. The companion board can provide up to 12 16-bit data
-       values.
-      </p><p>
-       The companion board itself specifies the transmission rate. On
-       the ground and during descent, that rate is limited to one
-       packet per second. During ascent, that rate is limited to 10
-       packets per second.
-      </p><div class="table"><a name="idm45387697687744"></a><p class="title"><b>Table 13. Companion Data Contents</b></p><div class="table-contents"><table summary="Companion 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">board_id</td><td align="left">Type of companion board attached</td></tr><tr><td align="right">6</td><td align="center">uint8_t</td><td align="left">update_period</td><td align="left">How often telemetry is sent, in 1/100ths of a second</td></tr><tr><td align="right">7</td><td align="center">uint8_t</td><td align="left">channels</td><td align="left">Number of data channels supplied</td></tr><tr><td align="right">8</td><td align="center">uint16_t[12]</td><td align="left">companion_data</td><td align="left">Up to 12 channels of 16-bit companion data</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></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm45387697670160"></a>3. Data Transmission</h2></div></div></div><p>
-      Altus Metrum devices use Texas Instruments sub-GHz digital radio
-      products. Ground stations use parts with HW FEC while some
-      flight computers perform FEC in software. TeleGPS is
-      transmit-only.
-    </p><div class="table"><a name="idm45387697668896"></a><p class="title"><b>Table 14. Altus Metrum Radio Parts</b></p><div class="table-contents"><table summary="Altus Metrum Radio Parts" border="1"><colgroup><col align="center" class="Part Number"><col align="center" class="Description"><col align="left" class="Used in"></colgroup><thead><tr><th align="center">Part Number</th><th align="center">Description</th><th align="center">Used in</th></tr></thead><tbody><tr><td align="center">CC1111</td><td align="center">10mW transceiver with integrated SoC</td><td align="left">TeleDongle v0.2, TeleBT v1.0, TeleMetrum v1.x, TeleMini</td></tr><tr><td align="center">CC1120</td><td align="center">35mW transceiver with SW FEC</td><td align="left">TeleMetrum v2, TeleMega</td></tr><tr><td align="center">CC1200</td><td align="center">35mW transceiver with HW FEC</td><td align="left">TeleDongle v3.0, TeleBT v3.0</td></tr><tr><td align="center">CC115L</td><td align="center">14mW transmitter with SW FEC</td><td align="left">TeleGPS</td></tr></tbody></table></div></div><br class="table-break"><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm45387697655920"></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.
-
-       While we might like to use something with better low-signal
-       performance like BPSK, the radios we use don't support that,
-       but do support Gaussian frequency shift keying (GFSK). Regular
-       frequency shift keying (FSK) encodes the signal by switching
-       the carrier between two frequencies. The Gaussian version is
-       essentially the same, but the shift between frequencies gently
-       follows a gaussian curve, rather than switching
-       immediately. This tames the bandwidth of the signal without
-       affecting the ability to transmit data.
-
-       For AltOS, there are three available bit rates, 38.4kBaud,
-       9.6kBaud and 2.4kBaud resulting in the following signal
-       parmeters:
-
-      </p><div class="table"><a name="idm45387697654080"></a><p class="title"><b>Table 15. Modulation Scheme</b></p><div class="table-contents"><table summary="Modulation Scheme" border="1"><colgroup><col align="center" class="rate"><col align="center" class="deviation"><col align="center" class="bandwidth"></colgroup><thead><tr><th align="center">Rate</th><th align="center">Deviation</th><th align="center">Receiver Bandwidth</th></tr></thead><tbody><tr><td align="center">38.4kBaud</td><td align="center">20.5kHz</td><td align="center">100kHz</td></tr><tr><td align="center">9.6kBaud</td><td align="center">5.125kHz</td><td align="center">25kHz</td></tr><tr><td align="center">2.4kBaud</td><td align="center">1.5kHz</td><td align="center">5kHz</td></tr></tbody></table></div></div><br class="table-break"></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm45387697642000"></a>3.2. Error Correction</h3></div></div></div><p>
-       The cc1111 and cc1200 provide forward error correction in
-       hardware; on the cc1120 and cc115l that's done in
-       software. AltOS uses this to improve reception of weak
-       signals. As it's a rate 1/2 encoding, each bit of data takes
-       two bits when transmitted, so the effective data rate is half
-       of the raw transmitted bit rate.
-      </p><div class="table"><a name="idm45387697640624"></a><p class="title"><b>Table 16. 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="idm45387697628320"></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,
-      TeleDongle produces a single line of text. This line starts with
-      the string "TELEM " and is followed by a list of hexadecimal
-      encoded bytes.
-    </p><pre class="programlisting">TELEM 224f01080b05765e00701f1a1bbeb8d7b60b070605140c000600000000000000003fa988</pre><p>
-      The hexadecimal encoded string of bytes contains a length byte,
-      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="idm45387697625520"></a><p class="title"><b>Table 17. 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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idm45387697606544"></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
-      little data&#8212;some raw sensor readings along with the current GPS
-      coordinates when a GPS receiver was connected. Over time, the
-      amount of data grew to include sensor calibration data, GPS
-      satellite information and a host of internal state information
-      designed to help diagnose flight failures in case of a loss of
-      the on-board flight data.
-    </p><p>
-      Because every packet contained all of the data, packets were
-      huge&#8212;95 bytes long. Much of the information was also specific to
-      the TeleMetrum hardware. With the introduction of the TeleMini
-      flight computer, most of the data contained in the telemetry
-      packets was unavailable. Initially, a shorter, but still
-      comprehensive packet was implemented. This required that the
-      ground station be pre-configured as to which kind of packet to
-      expect.
-    </p><p>
-      The development of several companion boards also made the
-      shortcomings evident&#8212;each companion board would want to include
-      telemetry data in the radio link; with the original design, the
-      packet would have to hold the new data as well, requiring
-      additional TeleMetrum and ground station changes.
-    </p></div></div></body></html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AltOS Telemetry</title><link rel="stylesheet" type="text/css" href="am.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /></head><body><div xml:lang="en" class="article" lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="idm1"></a>AltOS Telemetry</h2></div><div><h3 class="subtitle"><em>Packet Definitions</em></h3></div><div><div class="author"><h3 class="author"><span class="firstname">Keith</span> <span class="surname">Packard</span></h3><code class="email">&lt;<a class="email" href="mailto:keithp@keithp.com">keithp@keithp.com</a>&gt;</code></div></div><div><p class="copyright">Copyright © 2011 Keith Packard</p></div><div><div class="legalnotice"><a id="idm13"></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><a href="telemetry-revhistory.html">Revision History</a></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="#_packet_format_design">1. Packet Format Design</a></span></dt><dt><span class="section"><a href="#_packet_formats">2. Packet Formats</a></span></dt><dd><dl><dt><span class="section"><a href="#_packet_header">2.1. Packet Header</a></span></dt><dt><span class="section"><a href="#_telemetrum_v1_x_telemini_v1_0_and_telenano_sensor_data">2.2. TeleMetrum v1.x, TeleMini v1.0 and TeleNano Sensor Data</a></span></dt><dt><span class="section"><a href="#_telemega_sensor_data">2.3. TeleMega Sensor Data</a></span></dt><dt><span class="section"><a href="#_telemetrum_v2_sensor_data">2.4. TeleMetrum v2 Sensor Data</a></span></dt><dt><span class="section"><a href="#_telemini_v3_0_sensor_data">2.5. TeleMini v3.0 Sensor Data</a></span></dt><dt><span class="section"><a href="#_configuration_data">2.6. Configuration Data</a></span></dt><dt><span class="section"><a href="#_gps_location">2.7. GPS Location</a></span></dt><dt><span class="section"><a href="#_gps_satellite_data">2.8. GPS Satellite Data</a></span></dt><dt><span class="section"><a href="#_companion_data">2.9. Companion Data</a></span></dt></dl></dd><dt><span class="section"><a href="#_data_transmission">3. Data Transmission</a></span></dt><dd><dl><dt><span class="section"><a href="#_modulation_scheme">3.1. Modulation Scheme</a></span></dt><dt><span class="section"><a href="#_error_correction">3.2. Error Correction</a></span></dt></dl></dd><dt><span class="section"><a href="#_teledongle_serial_packet_format">4. TeleDongle serial packet format</a></span></dt><dt><span class="section"><a href="#_history_and_motivation">5. History and Motivation</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_packet_format_design"></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
+flight board will transmit multiple packet types, each type on
+a different schedule. The ground software need look for only a
+single packet size, and then decode the information within the
+packet and merge data from multiple packets to construct the
+full flight computer state.</p><p>Each AltOS packet is 32 bytes long. This size was chosen based
+on the known telemetry data requirements. The power of two
+size allows them to be stored easily in flash memory without
+having them split across blocks or leaving gaps at the end.</p><p>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"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_packet_formats"></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 id="_packet_header"></a>2.1. Packet Header</h3></div></div></div><div class="table"><a id="idm31"></a><p class="title"><strong>Table 1. Telemetry Packet Header</strong></p><div class="table-contents"><table class="table" summary="Telemetry Packet Header" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>serial</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Device serial Number</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>tick</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Device time in 100ths of a second</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>4</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>type</p></td><td style="" align="left" valign="top"><p>Packet type</p></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"><div class="titlepage"><div><div><h3 class="title"><a id="_telemetrum_v1_x_telemini_v1_0_and_telenano_sensor_data"></a>2.2. TeleMetrum v1.x, TeleMini v1.0 and TeleNano Sensor Data</h3></div></div></div><div class="table"><a id="idm78"></a><p class="title"><strong>Table 2. Sensor Packet Type</strong></p><div class="table-contents"><table class="table" summary="Sensor Packet Type" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Type</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0x01</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v1.x Sensor Data</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0x02</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMini v1.0 Sensor Data</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>0x03</p></td><td style="" align="left" valign="top"><p>TeleNano Sensor Data</p></td></tr></tbody></table></div></div><br class="table-break" /><p>TeleMetrum v1.x, TeleMini v1.0 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 are undefined.</p><p>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 id="idm106"></a><p class="title"><strong>Table 3. Sensor Packet Contents</strong></p><div class="table-contents"><table class="table" summary="Sensor Packet Contents" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>state</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Flight state</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>accel</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>accelerometer (TM only)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>pres</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>pressure sensor</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>temp</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>temperature sensor</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>12</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>v_batt</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>battery voltage</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>14</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>sense_d</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>drogue continuity sense (TM/Tm)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>sense_m</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>main continuity sense (TM/Tm)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>18</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>acceleration</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>m/s² * 16</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>20</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>speed</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>m/s * 16</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>22</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>height</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>m</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>24</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>ground_pres</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Average barometer reading on ground</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>26</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>ground_accel</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TM</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>28</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>accel_plus_g</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TM</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>30</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>accel_minus_g</p></td><td style="" align="left" valign="top"><p>TM</p></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_telemega_sensor_data"></a>2.3. TeleMega Sensor Data</h3></div></div></div><div class="table"><a id="idm251"></a><p class="title"><strong>Table 4. TeleMega Packet Type</strong></p><div class="table-contents"><table class="table" summary="TeleMega Packet Type" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Type</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0x08</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMega IMU Sensor Data</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>0x09</p></td><td style="" align="left" valign="top"><p>TeleMega Kalman and Voltage Data</p></td></tr></tbody></table></div></div><br class="table-break" /><p>TeleMega has a lot of sensors, and so it splits the sensor
+data into two packets. The raw IMU data are sent more often;
+the voltage values don’t change very fast, and the Kalman
+values can be reconstructed from the IMU data.</p><p>IMU 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><p>Kalman and Voltage Data packets are transmitted once per second on the
+ground, 5 times per second during ascent and once per second
+during descent and landing</p><p>The high-g accelerometer is reported separately from the data
+for the 9-axis IMU (accel/gyro/mag). The 9-axis IMU is mounted
+so that the X axis is "across" the board (along the short
+axis0, the Y axis is "along" the board (along the long axis,
+with the high-g accelerometer) and the Z axis is "through" the
+board (perpendicular to the board). Rotation measurements are
+around the respective axis, so Y rotation measures the spin
+rate of the rocket while X and Z rotation measure the tilt
+rate.</p><p>The overall tilt angle of the rocket is computed by first
+measuring the orientation of the rocket on the pad using the 3
+axis accelerometer, and then integrating the overall tilt rate
+from the 3 axis gyroscope to compute the total orientation
+change of the airframe since liftoff.</p><div class="table"><a id="idm277"></a><p class="title"><strong>Table 5. TeleMega IMU Sensor Packet Contents</strong></p><div class="table-contents"><table class="table" summary="TeleMega IMU Sensor Packet Contents" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>orient</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Angle from vertical in degrees</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>accel</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>High G accelerometer</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int32_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>pres</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>pressure (Pa * 10)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>12</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>temp</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>temperature (°C * 100)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>14</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>accel_x</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>X axis acceleration (across)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>accel_y</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Y axis acceleration (along)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>18</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>accel_z</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Z axis acceleration (through)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>20</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>gyro_x</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>X axis rotation (across)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>22</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>gyro_y</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Y axis rotation (along)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>24</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>gyro_z</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Z axis rotation (through)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>26</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>mag_x</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>X field strength (across)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>28</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>mag_y</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Y field strength (along)</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>30</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>mag_z</p></td><td style="" align="left" valign="top"><p>Z field strength (through)</p></td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idm411"></a><p class="title"><strong>Table 6. TeleMega Kalman and Voltage Data Packet Contents</strong></p><div class="table-contents"><table class="table" summary="TeleMega Kalman and Voltage Data Packet Contents" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>state</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Flight state</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>v_batt</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>battery voltage</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>v_pyro</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>pyro battery voltage</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int8_t[6]</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>sense</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>pyro continuity sense</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int32_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>ground_pres</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Average barometer reading on ground</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>20</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>ground_accel</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Average accelerometer reading on ground</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>22</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>accel_plus_g</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Accel calibration at +1g</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>24</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>accel_minus_g</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Accel calibration at -1g</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>26</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>acceleration</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>m/s² * 16</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>28</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>speed</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>m/s * 16</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>30</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>height</p></td><td style="" align="left" valign="top"><p>m</p></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_telemetrum_v2_sensor_data"></a>2.4. TeleMetrum v2 Sensor Data</h3></div></div></div><div class="table"><a id="idm529"></a><p class="title"><strong>Table 7. TeleMetrum v2 Packet Type</strong></p><div class="table-contents"><table class="table" summary="TeleMetrum v2 Packet Type" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Type</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0x0A</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v2 Sensor Data</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>0x0B</p></td><td style="" align="left" valign="top"><p>TeleMetrum v2 Calibration Data</p></td></tr></tbody></table></div></div><br class="table-break" /><p>TeleMetrum v2 has higher resolution barometric data than
+TeleMetrum v1, and so the constant calibration data is
+split out into a separate packet.</p><p>TeleMetrum v2 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><p>TeleMetrum v2 Calibration Data packets are always transmitted once per second.</p><div class="table"><a id="idm553"></a><p class="title"><strong>Table 8. TeleMetrum v2 Sensor Packet Contents</strong></p><div class="table-contents"><table class="table" summary="TeleMetrum v2 Sensor Packet Contents" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>state</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Flight state</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>accel</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>accelerometer</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int32_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>pres</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>pressure sensor (Pa * 10)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>12</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>temp</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>temperature sensor (°C * 100)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>14</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>acceleration</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>m/s² * 16</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>speed</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>m/s * 16</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>18</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>height</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>m</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>20</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>v_batt</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>battery voltage</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>22</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>sense_d</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>drogue continuity sense</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>24</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>sense_m</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>main continuity sense</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>26</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>pad[6]</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>pad bytes</p></td><td style="" align="left" valign="top"><p></p></td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idm669"></a><p class="title"><strong>Table 9. TeleMetrum v2 Calibration Data Packet Contents</strong></p><div class="table-contents"><table class="table" summary="TeleMetrum v2 Calibration Data Packet Contents" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>pad[3]</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>pad bytes</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p></p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int32_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>ground_pres</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Average barometer reading on ground</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>12</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>ground_accel</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Average accelerometer reading on ground</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>14</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>accel_plus_g</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Accel calibration at +1g</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>accel_minus_g</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Accel calibration at -1g</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>18</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>pad[14]</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>pad bytes</p></td><td style="" align="left" valign="top"><p></p></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_telemini_v3_0_sensor_data"></a>2.5. TeleMini v3.0 Sensor Data</h3></div></div></div><div class="table"><a id="idm742"></a><p class="title"><strong>Table 10. Sensor Packet Type</strong></p><div class="table-contents"><table class="table" summary="Sensor Packet Type" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Type</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>0x11</p></td><td style="" align="left" valign="top"><p>TeleMini v3.0 Sensor Data</p></td></tr></tbody></table></div></div><br class="table-break" /><p>TeleMini v3.0 uses this
+packet format for sensor data.</p><p>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 id="idm760"></a><p class="title"><strong>Table 11. Sensor Packet Contents</strong></p><div class="table-contents"><table class="table" summary="Sensor Packet Contents" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>state</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Flight state</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>v_batt</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>battery voltage</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>sense_a</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>apogee continuity sense</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>sense_m</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>main continuity sense</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>12</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int32_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>pres</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>pressure sensor (Pa * 10)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>temp</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>temperature sensor (°C * 100)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>18</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>acceleration</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>m/s² * 16</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>20</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>speed</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>m/s * 16</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>22</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>height</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>m</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>24</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>ground_pres</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Average barometer reading on ground</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>28</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>pad[4]</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>pad bytes</p></td><td style="" align="left" valign="top"><p></p></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_configuration_data"></a>2.6. Configuration Data</h3></div></div></div><div class="table"><a id="idm878"></a><p class="title"><strong>Table 12. Configuration Packet Type</strong></p><div class="table-contents"><table class="table" summary="Configuration Packet Type" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Type</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>0x04</p></td><td style="" align="left" valign="top"><p>Configuration Data</p></td></tr></tbody></table></div></div><br class="table-break" /><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 id="idm896"></a><p class="title"><strong>Table 13. Configuration Packet Contents</strong></p><div class="table-contents"><table class="table" summary="Configuration Packet Contents" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>type</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Device type</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>flight</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Flight number</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>config_major</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Config major version</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>9</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>config_minor</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Config minor version</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>apogee_delay</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Apogee deploy delay in seconds</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>12</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>main_deploy</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Main deploy alt in meters</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>14</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>flight_log_max</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Maximum flight log size (kB)</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>char</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>callsign[8]</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Radio operator identifier</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>24</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>char</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>version[8]</p></td><td style="" align="left" valign="top"><p>Software version identifier</p></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_gps_location"></a>2.7. GPS Location</h3></div></div></div><div class="table"><a id="idm996"></a><p class="title"><strong>Table 14. GPS Packet Type</strong></p><div class="table-contents"><table class="table" summary="GPS Packet Type" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Type</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>0x05</p></td><td style="" align="left" valign="top"><p>GPS Location</p></td></tr></tbody></table></div></div><br class="table-break" /><p>This packet provides all of the information available from the
+GPS receiver—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 id="idm1014"></a><p class="title"><strong>Table 15. GPS Location Packet Contents</strong></p><div class="table-contents"><table class="table" summary="GPS Location Packet Contents" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>flags</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>See GPS Flags table below</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>altitude</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>m</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int32_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>latitude</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>degrees * 107</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>12</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int32_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>longitude</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>degrees * 107</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>16</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>year</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p></p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>17</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>month</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p></p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>18</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>day</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p></p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>19</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>hour</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p></p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>20</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>minute</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p></p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>21</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>second</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p></p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>22</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>pdop</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>* 5</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>23</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>hdop</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>* 5</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>24</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>vdop</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>* 5</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>25</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>mode</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>See GPS Mode table below</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>26</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>ground_speed</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>cm/s</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>28</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>int16_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>climb_rate</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>cm/s</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>30</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>course</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>/ 2</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>31</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>unused[1]</p></td><td style="" align="left" valign="top"><p></p></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 id="idm1194"></a><p class="title"><strong>Table 16. GPS Flags</strong></p><div class="table-contents"><table class="table" summary="GPS Flags" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bits</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0-3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>nsats</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Number of satellites in solution</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>4</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>valid</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>GPS solution is valid</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>running</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>GPS receiver is operational</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>date_valid</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Reported date is valid</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>7</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>course_valid</p></td><td style="" align="left" valign="top"><p>ground speed, course and climb rates are valid</p></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 <span class="emphasis"><em>N</em></span> (not valid),
+<span class="emphasis"><em>A</em></span> (Autonomous) modes or <span class="emphasis"><em>E</em></span> (Estimated). The
+remaining modes are either testing modes or require
+additional data.</p><div class="table"><a id="idm1247"></a><p class="title"><strong>Table 17. GPS Mode</strong></p><div class="table-contents"><table class="table" summary="GPS Mode" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Mode</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>N</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Not Valid</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>All data are invalid</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>A</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Autonomous mode</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data are derived from satellite data</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>D</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Differential Mode</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data are augmented with differential data from a
+known ground station. The SkyTraq unit in TeleMetrum
+does not support this mode</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>E</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Estimated</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data are estimated using dead reckoning from the
+last known data</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>M</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Manual</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data were entered manually</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>S</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Simulated</p></td><td style="" align="left" valign="top"><p>GPS receiver testing mode</p></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_gps_satellite_data"></a>2.8. GPS Satellite Data</h3></div></div></div><div class="table"><a id="idm1305"></a><p class="title"><strong>Table 18. GPS Satellite Data Packet Type</strong></p><div class="table-contents"><table class="table" summary="GPS Satellite Data Packet Type" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Type</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>0x06</p></td><td style="" align="left" valign="top"><p>GPS Satellite Data</p></td></tr></tbody></table></div></div><br class="table-break" /><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 id="idm1323"></a><p class="title"><strong>Table 19. GPS Satellite Data Contents</strong></p><div class="table-contents"><table class="table" summary="GPS Satellite Data Contents" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>channels</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Number of reported satellite information</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>sat_info_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>sats[12]</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>See Per-Satellite data table below</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>30</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>unused[2]</p></td><td style="" align="left" valign="top"><p></p></td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idm1367"></a><p class="title"><strong>Table 20. GPS Per-Satellite data (sat_info_t)</strong></p><div class="table-contents"><table class="table" summary="GPS Per-Satellite data (sat_info_t)" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>svid</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Space Vehicle Identifier</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>1</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>c_n_1</p></td><td style="" align="left" valign="top"><p>C/N1 signal quality indicator</p></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_companion_data"></a>2.9. Companion Data</h3></div></div></div><div class="table"><a id="idm1404"></a><p class="title"><strong>Table 21. Companion Data Packet Type</strong></p><div class="table-contents"><table class="table" summary="Companion Data Packet Type" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Type</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>0x07</p></td><td style="" align="left" valign="top"><p>Companion Data</p></td></tr></tbody></table></div></div><br class="table-break" /><p>When a companion board is attached to TeleMega or
+TeleMetrum, it can provide telemetry data to be
+included in the downlink. The companion board can
+provide up to 12 16-bit data values.</p><p>The companion board itself specifies the transmission
+rate. On the ground and during descent, that rate is
+limited to one packet per second. During ascent, that
+rate is limited to 10 packets per second.</p><div class="table"><a id="idm1422"></a><p class="title"><strong>Table 22. Companion Data Contents</strong></p><div class="table-contents"><table class="table" summary="Companion Data Contents" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Data Type</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>board_id</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Type of companion board attached</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>6</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>update_period</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>How often telemetry is sent, in 1/100ths of a second</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>7</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>uint8_t</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>channels</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Number of data channels supplied</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>8</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>uint16_t[12]</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>companion_data</p></td><td style="" align="left" valign="top"><p>Up to 12 channels of 16-bit companion data</p></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 id="_data_transmission"></a>3. Data Transmission</h2></div></div></div><p>Altus Metrum devices use Texas Instruments sub-GHz digital
+radio products. Ground stations use parts with HW FEC while
+some flight computers perform FEC in software. TeleGPS is
+transmit-only.</p><div class="table"><a id="idm1478"></a><p class="title"><strong>Table 23. Altus Metrum Radio Parts</strong></p><div class="table-contents"><table class="table" summary="Altus Metrum Radio Parts" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Part Number</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Used in</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>CC1111</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>10mW transceiver with integrated SoC</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleDongle v0.2, TeleBT v1.0, TeleMetrum v1.x, TeleMini</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>CC1120</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>35mW transceiver with SW FEC</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleMetrum v2, TeleMega</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>CC1200</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>35mW transceiver with HW FEC</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>TeleDongle v3.0, TeleBT v3.0</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>CC115L</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>14mW transmitter with SW FEC</p></td><td style="" align="left" valign="top"><p>TeleGPS</p></td></tr></tbody></table></div></div><br class="table-break" /><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_modulation_scheme"></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.</p><p>While we might like to use something with better
+low-signal performance like BPSK, the radios we use
+don’t support that, but do support Gaussian frequency
+shift keying (GFSK). Regular frequency shift keying
+(FSK) encodes the signal by switching the carrier
+between two frequencies. The Gaussian version is
+essentially the same, but the shift between
+frequencies gently follows a gaussian curve, rather
+than switching immediately. This tames the bandwidth
+of the signal without affecting the ability to
+transmit data.</p><p>For AltOS, there are three available bit rates,
+38.4kBaud, 9.6kBaud and 2.4kBaud resulting in the
+following signal parmeters:</p><div class="table"><a id="idm1525"></a><p class="title"><strong>Table 24. Modulation Scheme</strong></p><div class="table-contents"><table class="table" summary="Modulation Scheme" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Rate</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Deviation</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Receiver Bandwidth</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>38.4kBaud</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>20.5kHz</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>100kHz</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>9.6kBaud</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>5.125kHz</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>25kHz</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>2.4kBaud</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>1.5kHz</p></td><td style="" align="left" valign="top"><p>5kHz</p></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_error_correction"></a>3.2. Error Correction</h3></div></div></div><p>The cc1111 and cc1200 provide forward error correction
+in hardware; on the cc1120 and cc115l that’s done in
+software. AltOS uses this to improve reception of weak
+signals. As it’s a rate 1/2 encoding, each bit of data
+takes two bits when transmitted, so the effective data
+rate is half of the raw transmitted bit rate.</p><div class="table"><a id="idm1563"></a><p class="title"><strong>Table 25. Error Correction</strong></p><div class="table-contents"><table class="table" summary="Error Correction" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Parameter</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Value</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Error Correction</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Convolutional coding</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1/2 rate, constraint length m=4</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Interleaving</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>4 x 4</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Reduce effect of noise burst</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>Data Whitening</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>XOR with 9-bit PNR</p></td><td style="" align="left" valign="top"><p>Rotate right with bit 8 = bit 0 xor bit 5, initial value 111111111</p></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 id="_teledongle_serial_packet_format"></a>4. TeleDongle serial 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,
+TeleDongle produces a single line of text. This line starts with
+the string "TELEM " and is followed by a list of hexadecimal
+encoded bytes.</p><pre class="literallayout">TELEM 224f01080b05765e00701f1a1bbeb8d7b60b070605140c000600000000000000003fa988</pre><p>The hexadecimal encoded string of bytes contains a length byte,
+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 id="idm1603"></a><p class="title"><strong>Table 26. TeleDongle serial Packet Format</strong></p><div class="table-contents"><table class="table" summary="TeleDongle serial Packet Format" cellpadding="4px" style="border-collapse: collapse;border-top: 1px solid #78079a; border-bottom: 1px solid #78079a; border-left: 1px solid #78079a; border-right: 1px solid #78079a; "><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /><col class="col_4" /></colgroup><tbody><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Offset</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Name</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Example</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Description</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>0</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>length</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>22</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Total length of data bytes in the line. Note that
+this includes the added RSSI and status bytes</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>1 ·· length-3</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>packet</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>4f ·· 00</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Bytes of actual packet data</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>length-2</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>rssi</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>3f</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Received signal strength. dBm = rssi / 2 - 74</p></td></tr><tr><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>length-1</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>lqi</p></td><td style="border-right: 1px solid #78079a; border-bottom: 1px solid #78079a; " align="left" valign="top"><p>a9</p></td><td style="border-bottom: 1px solid #78079a; " align="left" valign="top"><p>Link Quality Indicator and CRC status. Bit 7
+is set when the CRC is correct</p></td></tr><tr><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>length</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>checksum</p></td><td style="border-right: 1px solid #78079a; " align="left" valign="top"><p>88</p></td><td style="" align="left" valign="top"><p>(0x5a + sum(bytes 1 ·· length-1)) % 256</p></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 id="_history_and_motivation"></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
+little data—some raw sensor readings along with the current GPS
+coordinates when a GPS receiver was connected. Over time, the
+amount of data grew to include sensor calibration data, GPS
+satellite information and a host of internal state information
+designed to help diagnose flight failures in case of a loss of
+the on-board flight data.</p><p>Because every packet contained all of the data, packets were
+huge—95 bytes long. Much of the information was also specific to
+the TeleMetrum hardware. With the introduction of the TeleMini
+flight computer, most of the data contained in the telemetry
+packets was unavailable. Initially, a shorter, but still
+comprehensive packet was implemented. This required that the
+ground station be pre-configured as to which kind of packet to
+expect.</p><p>The development of several companion boards also made the
+shortcomings evident—each companion board would want to include
+telemetry data in the radio link; with the original design, the
+packet would have to hold the new data as well, requiring
+additional TeleMetrum and ground station changes.</p></div></div></body></html>
\ No newline at end of file
index e17d772bd577a48e18abe1d6497b22b4c3e11e43..9c0a21eda6898dd37436c724de6b04b8e70d2dba 100644 (file)
Binary files a/AltOS/doc/telemetry.pdf and b/AltOS/doc/telemetry.pdf differ
index c513a5551ceee5004f7bf0705b5e64391de7dfd7..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
Binary files a/AltOS/doc/telemini-v1-outline.pdf and b/AltOS/doc/telemini-v1-outline.pdf differ
index 3c8b4ee9b5c72db7e7e8300a0d218a60321a0718..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
Binary files a/AltOS/doc/telemini-v3-outline.pdf and b/AltOS/doc/telemini-v3-outline.pdf differ