update docs
[web/altusmetrum] / AltOS / doc / telemetry.html
1 <?xml version="1.0" encoding="UTF-8"?>
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>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>
3     This document is released under the terms of the
4     <a class="ulink" href="http://creativecommons.org/licenses/by-sa/3.0/" target="_top">
5       Creative Commons ShareAlike 3.0
6     </a>
7     license.
8   </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,
9 all the same size, but each includs an identifier so that the
10 ground station can distinguish among different types. A single
11 flight board will transmit multiple packet types, each type on
12 a different schedule. The ground software need look for only a
13 single packet size, and then decode the information within the
14 packet and merge data from multiple packets to construct the
15 full flight computer state.</p><p>Each AltOS packet is 32 bytes long. This size was chosen based
16 on the known telemetry data requirements. The power of two
17 size allows them to be stored easily in flash memory without
18 having them split across blocks or leaving gaps at the end.</p><p>All packet types start with a five byte header which encodes
19 the device serial number, device clock value and the packet
20 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
21 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
22 which device has transmitted the packet, when it was transmitted
23 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
24 packet format for sensor data. Each uses a distinct
25 packet type so that the receiver knows which data
26 values are valid and which are undefined.</p><p>Sensor Data packets are transmitted once per second on
27 the ground, 10 times per second during ascent and once
28 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
29 data into two packets. The raw IMU data are sent more often;
30 the voltage values don’t change very fast, and the Kalman
31 values can be reconstructed from the IMU data.</p><p>IMU Sensor Data packets are transmitted once per second on the
32 ground, 10 times per second during ascent and once per second
33 during descent and landing</p><p>Kalman and Voltage Data packets are transmitted once per second on the
34 ground, 5 times per second during ascent and once per second
35 during descent and landing</p><p>The high-g accelerometer is reported separately from the data
36 for the 9-axis IMU (accel/gyro/mag). The 9-axis IMU is mounted
37 so that the X axis is "across" the board (along the short
38 axis0, the Y axis is "along" the board (along the long axis,
39 with the high-g accelerometer) and the Z axis is "through" the
40 board (perpendicular to the board). Rotation measurements are
41 around the respective axis, so Y rotation measures the spin
42 rate of the rocket while X and Z rotation measure the tilt
43 rate.</p><p>The overall tilt angle of the rocket is computed by first
44 measuring the orientation of the rocket on the pad using the 3
45 axis accelerometer, and then integrating the overall tilt rate
46 from the 3 axis gyroscope to compute the total orientation
47 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
48 TeleMetrum v1, and so the constant calibration data is
49 split out into a separate packet.</p><p>TeleMetrum v2 Sensor Data packets are transmitted once per second on the
50 ground, 10 times per second during ascent and once per second
51 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
52 packet format for sensor data.</p><p>Sensor Data packets are transmitted once per second on
53 the ground, 10 times per second during ascent and once
54 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
55 flight computer as well as any user-specified configuration data.</p><p>Configuration data packets are transmitted once per second
56 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
57 GPS receiver—position, time, speed and precision
58 estimates.</p><p>GPS Location packets are transmitted once per second during
59 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
60 count of satellites used to compute the position
61 fix. Note that this number may be lower than the
62 number of satellites being tracked; the receiver will
63 not use information from satellites with weak signals
64 or which are close enough to the horizon to have
65 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
66 Metrum products will only ever report <span class="emphasis"><em>N</em></span> (not valid),
67 <span class="emphasis"><em>A</em></span> (Autonomous) modes or <span class="emphasis"><em>E</em></span> (Estimated). The
68 remaining modes are either testing modes or require
69 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
70 known ground station. The SkyTraq unit in TeleMetrum
71 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
72 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
73 signal quality information in the form of a C/N1
74 number for up to 12 satellites. The order of the svids
75 is not specified.</p><p>GPS Satellite data are transmitted once per second
76 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
77 TeleMetrum, it can provide telemetry data to be
78 included in the downlink. The companion board can
79 provide up to 12 16-bit data values.</p><p>The companion board itself specifies the transmission
80 rate. On the ground and during descent, that rate is
81 limited to one packet per second. During ascent, that
82 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
83 radio products. Ground stations use parts with HW FEC while
84 some flight computers perform FEC in software. TeleGPS is
85 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
86 modulation parameters given a desired modulation
87 format and basic bit rate.</p><p>While we might like to use something with better
88 low-signal performance like BPSK, the radios we use
89 don’t support that, but do support Gaussian frequency
90 shift keying (GFSK). Regular frequency shift keying
91 (FSK) encodes the signal by switching the carrier
92 between two frequencies. The Gaussian version is
93 essentially the same, but the shift between
94 frequencies gently follows a gaussian curve, rather
95 than switching immediately. This tames the bandwidth
96 of the signal without affecting the ability to
97 transmit data.</p><p>For AltOS, there are three available bit rates,
98 38.4kBaud, 9.6kBaud and 2.4kBaud resulting in the
99 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
100 in hardware; on the cc1120 and cc115l that’s done in
101 software. AltOS uses this to improve reception of weak
102 signals. As it’s a rate 1/2 encoding, each bit of data
103 takes two bits when transmitted, so the effective data
104 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,
105 instead it is configured to receive packets of a specified
106 length (32 bytes in this case). For each received packet,
107 TeleDongle produces a single line of text. This line starts with
108 the string "TELEM " and is followed by a list of hexadecimal
109 encoded bytes.</p><pre class="literallayout">TELEM 224f01080b05765e00701f1a1bbeb8d7b60b070605140c000600000000000000003fa988</pre><p>The hexadecimal encoded string of bytes contains a length byte,
110 the packet data, two bytes added by the cc1111 radio receiver
111 hardware and finally a checksum so that the host software can
112 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
113 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
114 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
115 available piece of information on the TeleMetrum hardware into a
116 single unified packet. Initially, the packets contained very
117 little data—some raw sensor readings along with the current GPS
118 coordinates when a GPS receiver was connected. Over time, the
119 amount of data grew to include sensor calibration data, GPS
120 satellite information and a host of internal state information
121 designed to help diagnose flight failures in case of a loss of
122 the on-board flight data.</p><p>Because every packet contained all of the data, packets were
123 huge—95 bytes long. Much of the information was also specific to
124 the TeleMetrum hardware. With the introduction of the TeleMini
125 flight computer, most of the data contained in the telemetry
126 packets was unavailable. Initially, a shorter, but still
127 comprehensive packet was implemented. This required that the
128 ground station be pre-configured as to which kind of packet to
129 expect.</p><p>The development of several companion boards also made the
130 shortcomings evident—each companion board would want to include
131 telemetry data in the radio link; with the original design, the
132 packet would have to hold the new data as well, requiring
133 additional TeleMetrum and ground station changes.</p></div></div></body></html>