update docs
[web/altusmetrum] / AltOS / doc / telemetry.html
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <meta name="generator" content="Asciidoctor 2.0.16">
8 <meta name="author" content="Keith Packard, Bdale Garbee">
9 <meta name="copyright" content="Bdale Garbee and Keith Packard 2021">
10 <title>AltOS Telemetry</title>
11 <link rel="stylesheet" href="./am.css">
12 </head>
13 <body class="article">
14 <div id="header">
15 <h1>AltOS Telemetry</h1>
16 <div class="details">
17 <span id="author" class="author">Keith Packard</span><br>
18 <span id="email" class="email"><a href="mailto:keithp@keithp.com">keithp@keithp.com</a></span><br>
19 <span id="author2" class="author">Bdale Garbee</span><br>
20 <span id="email2" class="email"><a href="mailto:bdale@gag.com">bdale@gag.com</a></span><br>
21 <span id="revnumber">version v1.9.11,</span>
22 <span id="revdate">29 May 2022</span>
23 </div>
24 <div id="toc" class="toc">
25 <div id="toctitle">Table of Contents</div>
26 <ul class="sectlevel1">
27 <li><a href="#_license">License</a></li>
28 <li><a href="#_packet_format_design">1. Packet Format Design</a></li>
29 <li><a href="#_packet_formats">2. Packet Formats</a>
30 <ul class="sectlevel2">
31 <li><a href="#_packet_header">2.1. Packet Header</a></li>
32 <li><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></li>
33 <li><a href="#_telemega_sensor_data">2.3. TeleMega Sensor Data</a></li>
34 <li><a href="#_telemetrum_v2_and_newer_sensor_data">2.4. TeleMetrum v2 and newer Sensor Data</a></li>
35 <li><a href="#_telemini_v3_0_sensor_data">2.5. TeleMini v3.0 Sensor Data</a></li>
36 <li><a href="#_configuration_data">2.6. Configuration Data</a></li>
37 <li><a href="#_gps_location">2.7. GPS Location</a></li>
38 <li><a href="#_gps_satellite_data">2.8. GPS Satellite Data</a></li>
39 <li><a href="#_companion_data">2.9. Companion Data</a></li>
40 </ul>
41 </li>
42 <li><a href="#_data_transmission">3. Data Transmission</a>
43 <ul class="sectlevel2">
44 <li><a href="#_modulation_scheme">3.1. Modulation Scheme</a></li>
45 <li><a href="#_error_correction">3.2. Error Correction</a></li>
46 </ul>
47 </li>
48 <li><a href="#_teledongle_serial_packet_format">4. TeleDongle serial packet format</a></li>
49 <li><a href="#_history_and_motivation">5. History and Motivation</a></li>
50 </ul>
51 </div>
52 </div>
53 <div id="content">
54 <div id="preamble">
55 <div class="sectionbody">
56 <div id="logo" class="imageblock">
57 <div class="content">
58 <a class="image" href="https://altusmetrum.org"><img src="altusmetrum-oneline.svg" alt="Altus Metrum"></a>
59 </div>
60 </div>
61 </div>
62 </div>
63 <div class="sect1">
64 <h2 id="_license">License</h2>
65 <div class="sectionbody">
66 <div class="paragraph">
67 <p>Copyright © 2022 Bdale Garbee and Keith Packard</p>
68 </div>
69 <div class="paragraph">
70 <p>This document is released under the terms of the <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons ShareAlike 3.0 License</a></p>
71 </div>
72 </div>
73 </div>
74 <div class="sect1">
75 <h2 id="_packet_format_design">1. Packet Format Design</h2>
76 <div class="sectionbody">
77 <div class="paragraph">
78 <p>AltOS telemetry data is split into multiple different packets,
79 all the same size, but each includs an identifier so that the
80 ground station can distinguish among different types. A single
81 flight board will transmit multiple packet types, each type on
82 a different schedule. The ground software need look for only a
83 single packet size, and then decode the information within the
84 packet and merge data from multiple packets to construct the
85 full flight computer state.</p>
86 </div>
87 <div class="paragraph">
88 <p>Each AltOS packet is 32 bytes long. This size was chosen based
89 on the known telemetry data requirements. The power of two
90 size allows them to be stored easily in flash memory without
91 having them split across blocks or leaving gaps at the end.</p>
92 </div>
93 <div class="paragraph">
94 <p>All packet types start with a five byte header which encodes
95 the device serial number, device clock value and the packet
96 type. The remaining 27 bytes encode type-specific data.</p>
97 </div>
98 </div>
99 </div>
100 <div class="sect1">
101 <h2 id="_packet_formats">2. Packet Formats</h2>
102 <div class="sectionbody">
103 <div class="paragraph">
104 <p>This section first defines the packet header common to all packets
105 and then the per-packet data layout.</p>
106 </div>
107 <div class="sect2">
108 <h3 id="_packet_header">2.1. Packet Header</h3>
109 <table class="tableblock frame-all grid-all stretch">
110 <caption class="title">Table 1. Telemetry Packet Header</caption>
111 <colgroup>
112 <col style="width: 11.7647%;">
113 <col style="width: 17.647%;">
114 <col style="width: 17.647%;">
115 <col style="width: 52.9413%;">
116 </colgroup>
117 <tbody>
118 <tr>
119 <td class="tableblock halign-left valign-top"><p class="tableblock">Offset</p></td>
120 <td class="tableblock halign-left valign-top"><p class="tableblock">Data Type</p></td>
121 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
122 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
123 </tr>
124 <tr>
125 <td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td>
126 <td class="tableblock halign-left valign-top"><p class="tableblock">uint16_t</p></td>
127 <td class="tableblock halign-left valign-top"><p class="tableblock">serial</p></td>
128 <td class="tableblock halign-left valign-top"><p class="tableblock">Device serial Number</p></td>
129 </tr>
130 <tr>
131 <td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
132 <td class="tableblock halign-left valign-top"><p class="tableblock">uint16_t</p></td>
133 <td class="tableblock halign-left valign-top"><p class="tableblock">tick</p></td>
134 <td class="tableblock halign-left valign-top"><p class="tableblock">Device time in 100ths of a second</p></td>
135 </tr>
136 <tr>
137 <td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
138 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
139 <td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
140 <td class="tableblock halign-left valign-top"><p class="tableblock">Packet type</p></td>
141 </tr>
142 </tbody>
143 </table>
144 <div class="paragraph">
145 <p>Each packet starts with these five bytes which serve to identify
146 which device has transmitted the packet, when it was transmitted
147 and what the rest of the packet contains.</p>
148 </div>
149 </div>
150 <div class="sect2">
151 <h3 id="_telemetrum_v1_x_telemini_v1_0_and_telenano_sensor_data">2.2. TeleMetrum v1.x, TeleMini v1.0 and TeleNano Sensor Data</h3>
152 <table class="tableblock frame-all grid-all stretch">
153 <caption class="title">Table 2. Sensor Packet Type</caption>
154 <colgroup>
155 <col style="width: 25%;">
156 <col style="width: 75%;">
157 </colgroup>
158 <tbody>
159 <tr>
160 <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
161 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
162 </tr>
163 <tr>
164 <td class="tableblock halign-left valign-top"><p class="tableblock">0x01</p></td>
165 <td class="tableblock halign-left valign-top"><p class="tableblock">TeleMetrum v1.x Sensor Data</p></td>
166 </tr>
167 <tr>
168 <td class="tableblock halign-left valign-top"><p class="tableblock">0x02</p></td>
169 <td class="tableblock halign-left valign-top"><p class="tableblock">TeleMini v1.0 Sensor Data</p></td>
170 </tr>
171 <tr>
172 <td class="tableblock halign-left valign-top"><p class="tableblock">0x03</p></td>
173 <td class="tableblock halign-left valign-top"><p class="tableblock">TeleNano Sensor Data</p></td>
174 </tr>
175 </tbody>
176 </table>
177 <div class="paragraph">
178 <p>TeleMetrum v1.x, TeleMini v1.0 and TeleNano share this same
179 packet format for sensor data. Each uses a distinct
180 packet type so that the receiver knows which data
181 values are valid and which are undefined.</p>
182 </div>
183 <div class="paragraph">
184 <p>Sensor Data packets are transmitted once per second on
185 the ground, 10 times per second during ascent and once
186 per second during descent and landing</p>
187 </div>
188 <table class="tableblock frame-all grid-all stretch">
189 <caption class="title">Table 3. Sensor Packet Contents</caption>
190 <colgroup>
191 <col style="width: 11.7647%;">
192 <col style="width: 17.647%;">
193 <col style="width: 17.647%;">
194 <col style="width: 52.9413%;">
195 </colgroup>
196 <tbody>
197 <tr>
198 <td class="tableblock halign-left valign-top"><p class="tableblock">Offset</p></td>
199 <td class="tableblock halign-left valign-top"><p class="tableblock">Data Type</p></td>
200 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
201 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
202 </tr>
203 <tr>
204 <td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
205 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
206 <td class="tableblock halign-left valign-top"><p class="tableblock">state</p></td>
207 <td class="tableblock halign-left valign-top"><p class="tableblock">Flight state</p></td>
208 </tr>
209 <tr>
210 <td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
211 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
212 <td class="tableblock halign-left valign-top"><p class="tableblock">accel</p></td>
213 <td class="tableblock halign-left valign-top"><p class="tableblock">accelerometer (TM only)</p></td>
214 </tr>
215 <tr>
216 <td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
217 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
218 <td class="tableblock halign-left valign-top"><p class="tableblock">pres</p></td>
219 <td class="tableblock halign-left valign-top"><p class="tableblock">pressure sensor</p></td>
220 </tr>
221 <tr>
222 <td class="tableblock halign-left valign-top"><p class="tableblock">10</p></td>
223 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
224 <td class="tableblock halign-left valign-top"><p class="tableblock">temp</p></td>
225 <td class="tableblock halign-left valign-top"><p class="tableblock">temperature sensor</p></td>
226 </tr>
227 <tr>
228 <td class="tableblock halign-left valign-top"><p class="tableblock">12</p></td>
229 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
230 <td class="tableblock halign-left valign-top"><p class="tableblock">v_batt</p></td>
231 <td class="tableblock halign-left valign-top"><p class="tableblock">battery voltage</p></td>
232 </tr>
233 <tr>
234 <td class="tableblock halign-left valign-top"><p class="tableblock">14</p></td>
235 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
236 <td class="tableblock halign-left valign-top"><p class="tableblock">sense_d</p></td>
237 <td class="tableblock halign-left valign-top"><p class="tableblock">drogue continuity sense (TM/Tm)</p></td>
238 </tr>
239 <tr>
240 <td class="tableblock halign-left valign-top"><p class="tableblock">16</p></td>
241 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
242 <td class="tableblock halign-left valign-top"><p class="tableblock">sense_m</p></td>
243 <td class="tableblock halign-left valign-top"><p class="tableblock">main continuity sense (TM/Tm)</p></td>
244 </tr>
245 <tr>
246 <td class="tableblock halign-left valign-top"><p class="tableblock">18</p></td>
247 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
248 <td class="tableblock halign-left valign-top"><p class="tableblock">acceleration</p></td>
249 <td class="tableblock halign-left valign-top"><p class="tableblock">m/s² * 16</p></td>
250 </tr>
251 <tr>
252 <td class="tableblock halign-left valign-top"><p class="tableblock">20</p></td>
253 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
254 <td class="tableblock halign-left valign-top"><p class="tableblock">speed</p></td>
255 <td class="tableblock halign-left valign-top"><p class="tableblock">m/s * 16</p></td>
256 </tr>
257 <tr>
258 <td class="tableblock halign-left valign-top"><p class="tableblock">22</p></td>
259 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
260 <td class="tableblock halign-left valign-top"><p class="tableblock">height</p></td>
261 <td class="tableblock halign-left valign-top"><p class="tableblock">m</p></td>
262 </tr>
263 <tr>
264 <td class="tableblock halign-left valign-top"><p class="tableblock">24</p></td>
265 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
266 <td class="tableblock halign-left valign-top"><p class="tableblock">ground_pres</p></td>
267 <td class="tableblock halign-left valign-top"><p class="tableblock">Average barometer reading on ground</p></td>
268 </tr>
269 <tr>
270 <td class="tableblock halign-left valign-top"><p class="tableblock">26</p></td>
271 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
272 <td class="tableblock halign-left valign-top"><p class="tableblock">ground_accel</p></td>
273 <td class="tableblock halign-left valign-top"><p class="tableblock">TM</p></td>
274 </tr>
275 <tr>
276 <td class="tableblock halign-left valign-top"><p class="tableblock">28</p></td>
277 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
278 <td class="tableblock halign-left valign-top"><p class="tableblock">accel_plus_g</p></td>
279 <td class="tableblock halign-left valign-top"><p class="tableblock">TM</p></td>
280 </tr>
281 <tr>
282 <td class="tableblock halign-left valign-top"><p class="tableblock">30</p></td>
283 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
284 <td class="tableblock halign-left valign-top"><p class="tableblock">accel_minus_g</p></td>
285 <td class="tableblock halign-left valign-top"><p class="tableblock">TM</p></td>
286 </tr>
287 </tbody>
288 </table>
289 </div>
290 <div class="sect2">
291 <h3 id="_telemega_sensor_data">2.3. TeleMega Sensor Data</h3>
292 <table class="tableblock frame-all grid-all stretch">
293 <caption class="title">Table 4. TeleMega Packet Type</caption>
294 <colgroup>
295 <col style="width: 25%;">
296 <col style="width: 75%;">
297 </colgroup>
298 <tbody>
299 <tr>
300 <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
301 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
302 </tr>
303 <tr>
304 <td class="tableblock halign-left valign-top"><p class="tableblock">0x08</p></td>
305 <td class="tableblock halign-left valign-top"><p class="tableblock">TeleMega IMU Sensor Data</p></td>
306 </tr>
307 <tr>
308 <td class="tableblock halign-left valign-top"><p class="tableblock">0x09</p></td>
309 <td class="tableblock halign-left valign-top"><p class="tableblock">TeleMega Kalman and Voltage Data</p></td>
310 </tr>
311 </tbody>
312 </table>
313 <div class="paragraph">
314 <p>TeleMega has a lot of sensors, and so it splits the sensor
315 data into two packets. The raw IMU data are sent more often;
316 the voltage values don&#8217;t change very fast, and the Kalman
317 values can be reconstructed from the IMU data.</p>
318 </div>
319 <div class="paragraph">
320 <p>IMU Sensor Data packets are transmitted once per second on the
321 ground, 10 times per second during ascent and once per second
322 during descent and landing</p>
323 </div>
324 <div class="paragraph">
325 <p>Kalman and Voltage Data packets are transmitted once per second on the
326 ground, 5 times per second during ascent and once per second
327 during descent and landing</p>
328 </div>
329 <div class="paragraph">
330 <p>The high-g accelerometer is reported separately from the data
331 for the 9-axis IMU (accel/gyro/mag). The 9-axis IMU is mounted
332 so that the X axis is "across" the board (along the short
333 axis0, the Y axis is "along" the board (along the long axis,
334 with the high-g accelerometer) and the Z axis is "through" the
335 board (perpendicular to the board). Rotation measurements are
336 around the respective axis, so Y rotation measures the spin
337 rate of the rocket while X and Z rotation measure the tilt
338 rate.</p>
339 </div>
340 <div class="paragraph">
341 <p>The overall tilt angle of the rocket is computed by first
342 measuring the orientation of the rocket on the pad using the 3
343 axis accelerometer, and then integrating the overall tilt rate
344 from the 3 axis gyroscope to compute the total orientation
345 change of the airframe since liftoff.</p>
346 </div>
347 <table class="tableblock frame-all grid-all stretch">
348 <caption class="title">Table 5. TeleMega IMU Sensor Packet Contents</caption>
349 <colgroup>
350 <col style="width: 11.7647%;">
351 <col style="width: 17.647%;">
352 <col style="width: 17.647%;">
353 <col style="width: 52.9413%;">
354 </colgroup>
355 <tbody>
356 <tr>
357 <td class="tableblock halign-left valign-top"><p class="tableblock">Offset</p></td>
358 <td class="tableblock halign-left valign-top"><p class="tableblock">Data Type</p></td>
359 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
360 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
361 </tr>
362 <tr>
363 <td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
364 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
365 <td class="tableblock halign-left valign-top"><p class="tableblock">orient</p></td>
366 <td class="tableblock halign-left valign-top"><p class="tableblock">Angle from vertical in degrees</p></td>
367 </tr>
368 <tr>
369 <td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
370 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
371 <td class="tableblock halign-left valign-top"><p class="tableblock">accel</p></td>
372 <td class="tableblock halign-left valign-top"><p class="tableblock">High G accelerometer</p></td>
373 </tr>
374 <tr>
375 <td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
376 <td class="tableblock halign-left valign-top"><p class="tableblock">int32_t</p></td>
377 <td class="tableblock halign-left valign-top"><p class="tableblock">pres</p></td>
378 <td class="tableblock halign-left valign-top"><p class="tableblock">pressure (Pa * 10)</p></td>
379 </tr>
380 <tr>
381 <td class="tableblock halign-left valign-top"><p class="tableblock">12</p></td>
382 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
383 <td class="tableblock halign-left valign-top"><p class="tableblock">temp</p></td>
384 <td class="tableblock halign-left valign-top"><p class="tableblock">temperature (°C * 100)</p></td>
385 </tr>
386 <tr>
387 <td class="tableblock halign-left valign-top"><p class="tableblock">14</p></td>
388 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
389 <td class="tableblock halign-left valign-top"><p class="tableblock">accel_x</p></td>
390 <td class="tableblock halign-left valign-top"><p class="tableblock">X axis acceleration (across)</p></td>
391 </tr>
392 <tr>
393 <td class="tableblock halign-left valign-top"><p class="tableblock">16</p></td>
394 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
395 <td class="tableblock halign-left valign-top"><p class="tableblock">accel_y</p></td>
396 <td class="tableblock halign-left valign-top"><p class="tableblock">Y axis acceleration (along)</p></td>
397 </tr>
398 <tr>
399 <td class="tableblock halign-left valign-top"><p class="tableblock">18</p></td>
400 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
401 <td class="tableblock halign-left valign-top"><p class="tableblock">accel_z</p></td>
402 <td class="tableblock halign-left valign-top"><p class="tableblock">Z axis acceleration (through)</p></td>
403 </tr>
404 <tr>
405 <td class="tableblock halign-left valign-top"><p class="tableblock">20</p></td>
406 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
407 <td class="tableblock halign-left valign-top"><p class="tableblock">gyro_x</p></td>
408 <td class="tableblock halign-left valign-top"><p class="tableblock">X axis rotation (across)</p></td>
409 </tr>
410 <tr>
411 <td class="tableblock halign-left valign-top"><p class="tableblock">22</p></td>
412 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
413 <td class="tableblock halign-left valign-top"><p class="tableblock">gyro_y</p></td>
414 <td class="tableblock halign-left valign-top"><p class="tableblock">Y axis rotation (along)</p></td>
415 </tr>
416 <tr>
417 <td class="tableblock halign-left valign-top"><p class="tableblock">24</p></td>
418 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
419 <td class="tableblock halign-left valign-top"><p class="tableblock">gyro_z</p></td>
420 <td class="tableblock halign-left valign-top"><p class="tableblock">Z axis rotation (through)</p></td>
421 </tr>
422 <tr>
423 <td class="tableblock halign-left valign-top"><p class="tableblock">26</p></td>
424 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
425 <td class="tableblock halign-left valign-top"><p class="tableblock">mag_x</p></td>
426 <td class="tableblock halign-left valign-top"><p class="tableblock">X field strength (across)</p></td>
427 </tr>
428 <tr>
429 <td class="tableblock halign-left valign-top"><p class="tableblock">28</p></td>
430 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
431 <td class="tableblock halign-left valign-top"><p class="tableblock">mag_y</p></td>
432 <td class="tableblock halign-left valign-top"><p class="tableblock">Y field strength (along)</p></td>
433 </tr>
434 <tr>
435 <td class="tableblock halign-left valign-top"><p class="tableblock">30</p></td>
436 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
437 <td class="tableblock halign-left valign-top"><p class="tableblock">mag_z</p></td>
438 <td class="tableblock halign-left valign-top"><p class="tableblock">Z field strength (through)</p></td>
439 </tr>
440 </tbody>
441 </table>
442 <table class="tableblock frame-all grid-all stretch">
443 <caption class="title">Table 6. TeleMega Kalman and Voltage Data Packet Contents</caption>
444 <colgroup>
445 <col style="width: 11.7647%;">
446 <col style="width: 17.647%;">
447 <col style="width: 17.647%;">
448 <col style="width: 52.9413%;">
449 </colgroup>
450 <tbody>
451 <tr>
452 <td class="tableblock halign-left valign-top"><p class="tableblock">Offset</p></td>
453 <td class="tableblock halign-left valign-top"><p class="tableblock">Data Type</p></td>
454 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
455 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
456 </tr>
457 <tr>
458 <td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
459 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
460 <td class="tableblock halign-left valign-top"><p class="tableblock">state</p></td>
461 <td class="tableblock halign-left valign-top"><p class="tableblock">Flight state</p></td>
462 </tr>
463 <tr>
464 <td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
465 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
466 <td class="tableblock halign-left valign-top"><p class="tableblock">v_batt</p></td>
467 <td class="tableblock halign-left valign-top"><p class="tableblock">battery voltage</p></td>
468 </tr>
469 <tr>
470 <td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
471 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
472 <td class="tableblock halign-left valign-top"><p class="tableblock">v_pyro</p></td>
473 <td class="tableblock halign-left valign-top"><p class="tableblock">pyro battery voltage</p></td>
474 </tr>
475 <tr>
476 <td class="tableblock halign-left valign-top"><p class="tableblock">10</p></td>
477 <td class="tableblock halign-left valign-top"><p class="tableblock">int8_t[6]</p></td>
478 <td class="tableblock halign-left valign-top"><p class="tableblock">sense</p></td>
479 <td class="tableblock halign-left valign-top"><p class="tableblock">pyro continuity sense</p></td>
480 </tr>
481 <tr>
482 <td class="tableblock halign-left valign-top"><p class="tableblock">16</p></td>
483 <td class="tableblock halign-left valign-top"><p class="tableblock">int32_t</p></td>
484 <td class="tableblock halign-left valign-top"><p class="tableblock">ground_pres</p></td>
485 <td class="tableblock halign-left valign-top"><p class="tableblock">Average barometer reading on ground</p></td>
486 </tr>
487 <tr>
488 <td class="tableblock halign-left valign-top"><p class="tableblock">20</p></td>
489 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
490 <td class="tableblock halign-left valign-top"><p class="tableblock">ground_accel</p></td>
491 <td class="tableblock halign-left valign-top"><p class="tableblock">Average accelerometer reading on ground</p></td>
492 </tr>
493 <tr>
494 <td class="tableblock halign-left valign-top"><p class="tableblock">22</p></td>
495 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
496 <td class="tableblock halign-left valign-top"><p class="tableblock">accel_plus_g</p></td>
497 <td class="tableblock halign-left valign-top"><p class="tableblock">Accel calibration at +1g</p></td>
498 </tr>
499 <tr>
500 <td class="tableblock halign-left valign-top"><p class="tableblock">24</p></td>
501 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
502 <td class="tableblock halign-left valign-top"><p class="tableblock">accel_minus_g</p></td>
503 <td class="tableblock halign-left valign-top"><p class="tableblock">Accel calibration at -1g</p></td>
504 </tr>
505 <tr>
506 <td class="tableblock halign-left valign-top"><p class="tableblock">26</p></td>
507 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
508 <td class="tableblock halign-left valign-top"><p class="tableblock">acceleration</p></td>
509 <td class="tableblock halign-left valign-top"><p class="tableblock">m/s² * 16</p></td>
510 </tr>
511 <tr>
512 <td class="tableblock halign-left valign-top"><p class="tableblock">28</p></td>
513 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
514 <td class="tableblock halign-left valign-top"><p class="tableblock">speed</p></td>
515 <td class="tableblock halign-left valign-top"><p class="tableblock">m/s * 16</p></td>
516 </tr>
517 <tr>
518 <td class="tableblock halign-left valign-top"><p class="tableblock">30</p></td>
519 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
520 <td class="tableblock halign-left valign-top"><p class="tableblock">height</p></td>
521 <td class="tableblock halign-left valign-top"><p class="tableblock">m</p></td>
522 </tr>
523 </tbody>
524 </table>
525 </div>
526 <div class="sect2">
527 <h3 id="_telemetrum_v2_and_newer_sensor_data">2.4. TeleMetrum v2 and newer Sensor Data</h3>
528 <table class="tableblock frame-all grid-all stretch">
529 <caption class="title">Table 7. TeleMetrum v2 Packet Type</caption>
530 <colgroup>
531 <col style="width: 25%;">
532 <col style="width: 75%;">
533 </colgroup>
534 <tbody>
535 <tr>
536 <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
537 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
538 </tr>
539 <tr>
540 <td class="tableblock halign-left valign-top"><p class="tableblock">0x0A</p></td>
541 <td class="tableblock halign-left valign-top"><p class="tableblock">TeleMetrum v2 Sensor Data</p></td>
542 </tr>
543 <tr>
544 <td class="tableblock halign-left valign-top"><p class="tableblock">0x0B</p></td>
545 <td class="tableblock halign-left valign-top"><p class="tableblock">TeleMetrum v2 Calibration Data</p></td>
546 </tr>
547 </tbody>
548 </table>
549 <div class="paragraph">
550 <p>TeleMetrum v2 and newer have higher resolution barometric data than
551 TeleMetrum v1, and so the constant calibration data is
552 split out into a separate packet.</p>
553 </div>
554 <div class="paragraph">
555 <p>TeleMetrum v2 and newer Sensor Data packets are transmitted once per second on the
556 ground, 10 times per second during ascent and once per second
557 during descent and landing</p>
558 </div>
559 <div class="paragraph">
560 <p>TeleMetrum v2 and newer Calibration Data packets are always transmitted once per second.</p>
561 </div>
562 <table class="tableblock frame-all grid-all stretch">
563 <caption class="title">Table 8. TeleMetrum v2 and newer Sensor Packet Contents</caption>
564 <colgroup>
565 <col style="width: 11.7647%;">
566 <col style="width: 17.647%;">
567 <col style="width: 17.647%;">
568 <col style="width: 52.9413%;">
569 </colgroup>
570 <tbody>
571 <tr>
572 <td class="tableblock halign-left valign-top"><p class="tableblock">Offset</p></td>
573 <td class="tableblock halign-left valign-top"><p class="tableblock">Data Type</p></td>
574 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
575 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
576 </tr>
577 <tr>
578 <td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
579 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
580 <td class="tableblock halign-left valign-top"><p class="tableblock">state</p></td>
581 <td class="tableblock halign-left valign-top"><p class="tableblock">Flight state</p></td>
582 </tr>
583 <tr>
584 <td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
585 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
586 <td class="tableblock halign-left valign-top"><p class="tableblock">accel</p></td>
587 <td class="tableblock halign-left valign-top"><p class="tableblock">accelerometer</p></td>
588 </tr>
589 <tr>
590 <td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
591 <td class="tableblock halign-left valign-top"><p class="tableblock">int32_t</p></td>
592 <td class="tableblock halign-left valign-top"><p class="tableblock">pres</p></td>
593 <td class="tableblock halign-left valign-top"><p class="tableblock">pressure sensor (Pa * 10)</p></td>
594 </tr>
595 <tr>
596 <td class="tableblock halign-left valign-top"><p class="tableblock">12</p></td>
597 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
598 <td class="tableblock halign-left valign-top"><p class="tableblock">temp</p></td>
599 <td class="tableblock halign-left valign-top"><p class="tableblock">temperature sensor (°C * 100)</p></td>
600 </tr>
601 <tr>
602 <td class="tableblock halign-left valign-top"><p class="tableblock">14</p></td>
603 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
604 <td class="tableblock halign-left valign-top"><p class="tableblock">acceleration</p></td>
605 <td class="tableblock halign-left valign-top"><p class="tableblock">m/s² * 16</p></td>
606 </tr>
607 <tr>
608 <td class="tableblock halign-left valign-top"><p class="tableblock">16</p></td>
609 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
610 <td class="tableblock halign-left valign-top"><p class="tableblock">speed</p></td>
611 <td class="tableblock halign-left valign-top"><p class="tableblock">m/s * 16</p></td>
612 </tr>
613 <tr>
614 <td class="tableblock halign-left valign-top"><p class="tableblock">18</p></td>
615 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
616 <td class="tableblock halign-left valign-top"><p class="tableblock">height</p></td>
617 <td class="tableblock halign-left valign-top"><p class="tableblock">m</p></td>
618 </tr>
619 <tr>
620 <td class="tableblock halign-left valign-top"><p class="tableblock">20</p></td>
621 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
622 <td class="tableblock halign-left valign-top"><p class="tableblock">v_batt</p></td>
623 <td class="tableblock halign-left valign-top"><p class="tableblock">battery voltage</p></td>
624 </tr>
625 <tr>
626 <td class="tableblock halign-left valign-top"><p class="tableblock">22</p></td>
627 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
628 <td class="tableblock halign-left valign-top"><p class="tableblock">sense_d</p></td>
629 <td class="tableblock halign-left valign-top"><p class="tableblock">drogue continuity sense</p></td>
630 </tr>
631 <tr>
632 <td class="tableblock halign-left valign-top"><p class="tableblock">24</p></td>
633 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
634 <td class="tableblock halign-left valign-top"><p class="tableblock">sense_m</p></td>
635 <td class="tableblock halign-left valign-top"><p class="tableblock">main continuity sense</p></td>
636 </tr>
637 <tr>
638 <td class="tableblock halign-left valign-top"><p class="tableblock">26</p></td>
639 <td class="tableblock halign-left valign-top"><p class="tableblock">pad[6]</p></td>
640 <td class="tableblock halign-left valign-top"><p class="tableblock">pad bytes</p></td>
641 <td class="tableblock halign-left valign-top"></td>
642 </tr>
643 </tbody>
644 </table>
645 <table class="tableblock frame-all grid-all stretch">
646 <caption class="title">Table 9. TeleMetrum v2 and newer Calibration Data Packet Contents</caption>
647 <colgroup>
648 <col style="width: 11.7647%;">
649 <col style="width: 17.647%;">
650 <col style="width: 17.647%;">
651 <col style="width: 52.9413%;">
652 </colgroup>
653 <tbody>
654 <tr>
655 <td class="tableblock halign-left valign-top"><p class="tableblock">Offset</p></td>
656 <td class="tableblock halign-left valign-top"><p class="tableblock">Data Type</p></td>
657 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
658 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
659 </tr>
660 <tr>
661 <td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
662 <td class="tableblock halign-left valign-top"><p class="tableblock">pad[3]</p></td>
663 <td class="tableblock halign-left valign-top"><p class="tableblock">pad bytes</p></td>
664 <td class="tableblock halign-left valign-top"></td>
665 </tr>
666 <tr>
667 <td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
668 <td class="tableblock halign-left valign-top"><p class="tableblock">int32_t</p></td>
669 <td class="tableblock halign-left valign-top"><p class="tableblock">ground_pres</p></td>
670 <td class="tableblock halign-left valign-top"><p class="tableblock">Average barometer reading on ground</p></td>
671 </tr>
672 <tr>
673 <td class="tableblock halign-left valign-top"><p class="tableblock">12</p></td>
674 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
675 <td class="tableblock halign-left valign-top"><p class="tableblock">ground_accel</p></td>
676 <td class="tableblock halign-left valign-top"><p class="tableblock">Average accelerometer reading on ground</p></td>
677 </tr>
678 <tr>
679 <td class="tableblock halign-left valign-top"><p class="tableblock">14</p></td>
680 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
681 <td class="tableblock halign-left valign-top"><p class="tableblock">accel_plus_g</p></td>
682 <td class="tableblock halign-left valign-top"><p class="tableblock">Accel calibration at +1g</p></td>
683 </tr>
684 <tr>
685 <td class="tableblock halign-left valign-top"><p class="tableblock">16</p></td>
686 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
687 <td class="tableblock halign-left valign-top"><p class="tableblock">accel_minus_g</p></td>
688 <td class="tableblock halign-left valign-top"><p class="tableblock">Accel calibration at -1g</p></td>
689 </tr>
690 <tr>
691 <td class="tableblock halign-left valign-top"><p class="tableblock">18</p></td>
692 <td class="tableblock halign-left valign-top"><p class="tableblock">pad[14]</p></td>
693 <td class="tableblock halign-left valign-top"><p class="tableblock">pad bytes</p></td>
694 <td class="tableblock halign-left valign-top"></td>
695 </tr>
696 </tbody>
697 </table>
698 </div>
699 <div class="sect2">
700 <h3 id="_telemini_v3_0_sensor_data">2.5. TeleMini v3.0 Sensor Data</h3>
701 <table class="tableblock frame-all grid-all stretch">
702 <caption class="title">Table 10. Sensor Packet Type</caption>
703 <colgroup>
704 <col style="width: 25%;">
705 <col style="width: 75%;">
706 </colgroup>
707 <tbody>
708 <tr>
709 <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
710 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
711 </tr>
712 <tr>
713 <td class="tableblock halign-left valign-top"><p class="tableblock">0x11</p></td>
714 <td class="tableblock halign-left valign-top"><p class="tableblock">TeleMini v3.0 Sensor Data</p></td>
715 </tr>
716 </tbody>
717 </table>
718 <div class="paragraph">
719 <p>TeleMini v3.0 uses this
720 packet format for sensor data.</p>
721 </div>
722 <div class="paragraph">
723 <p>Sensor Data packets are transmitted once per second on
724 the ground, 10 times per second during ascent and once
725 per second during descent and landing</p>
726 </div>
727 <table class="tableblock frame-all grid-all stretch">
728 <caption class="title">Table 11. Sensor Packet Contents</caption>
729 <colgroup>
730 <col style="width: 11.7647%;">
731 <col style="width: 17.647%;">
732 <col style="width: 17.647%;">
733 <col style="width: 52.9413%;">
734 </colgroup>
735 <tbody>
736 <tr>
737 <td class="tableblock halign-left valign-top"><p class="tableblock">Offset</p></td>
738 <td class="tableblock halign-left valign-top"><p class="tableblock">Data Type</p></td>
739 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
740 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
741 </tr>
742 <tr>
743 <td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
744 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
745 <td class="tableblock halign-left valign-top"><p class="tableblock">state</p></td>
746 <td class="tableblock halign-left valign-top"><p class="tableblock">Flight state</p></td>
747 </tr>
748 <tr>
749 <td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
750 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
751 <td class="tableblock halign-left valign-top"><p class="tableblock">v_batt</p></td>
752 <td class="tableblock halign-left valign-top"><p class="tableblock">battery voltage</p></td>
753 </tr>
754 <tr>
755 <td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
756 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
757 <td class="tableblock halign-left valign-top"><p class="tableblock">sense_a</p></td>
758 <td class="tableblock halign-left valign-top"><p class="tableblock">apogee continuity sense</p></td>
759 </tr>
760 <tr>
761 <td class="tableblock halign-left valign-top"><p class="tableblock">10</p></td>
762 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
763 <td class="tableblock halign-left valign-top"><p class="tableblock">sense_m</p></td>
764 <td class="tableblock halign-left valign-top"><p class="tableblock">main continuity sense</p></td>
765 </tr>
766 <tr>
767 <td class="tableblock halign-left valign-top"><p class="tableblock">12</p></td>
768 <td class="tableblock halign-left valign-top"><p class="tableblock">int32_t</p></td>
769 <td class="tableblock halign-left valign-top"><p class="tableblock">pres</p></td>
770 <td class="tableblock halign-left valign-top"><p class="tableblock">pressure sensor (Pa * 10)</p></td>
771 </tr>
772 <tr>
773 <td class="tableblock halign-left valign-top"><p class="tableblock">16</p></td>
774 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
775 <td class="tableblock halign-left valign-top"><p class="tableblock">temp</p></td>
776 <td class="tableblock halign-left valign-top"><p class="tableblock">temperature sensor (°C * 100)</p></td>
777 </tr>
778 <tr>
779 <td class="tableblock halign-left valign-top"><p class="tableblock">18</p></td>
780 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
781 <td class="tableblock halign-left valign-top"><p class="tableblock">acceleration</p></td>
782 <td class="tableblock halign-left valign-top"><p class="tableblock">m/s² * 16</p></td>
783 </tr>
784 <tr>
785 <td class="tableblock halign-left valign-top"><p class="tableblock">20</p></td>
786 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
787 <td class="tableblock halign-left valign-top"><p class="tableblock">speed</p></td>
788 <td class="tableblock halign-left valign-top"><p class="tableblock">m/s * 16</p></td>
789 </tr>
790 <tr>
791 <td class="tableblock halign-left valign-top"><p class="tableblock">22</p></td>
792 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
793 <td class="tableblock halign-left valign-top"><p class="tableblock">height</p></td>
794 <td class="tableblock halign-left valign-top"><p class="tableblock">m</p></td>
795 </tr>
796 <tr>
797 <td class="tableblock halign-left valign-top"><p class="tableblock">24</p></td>
798 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
799 <td class="tableblock halign-left valign-top"><p class="tableblock">ground_pres</p></td>
800 <td class="tableblock halign-left valign-top"><p class="tableblock">Average barometer reading on ground</p></td>
801 </tr>
802 <tr>
803 <td class="tableblock halign-left valign-top"><p class="tableblock">28</p></td>
804 <td class="tableblock halign-left valign-top"><p class="tableblock">pad[4]</p></td>
805 <td class="tableblock halign-left valign-top"><p class="tableblock">pad bytes</p></td>
806 <td class="tableblock halign-left valign-top"></td>
807 </tr>
808 </tbody>
809 </table>
810 </div>
811 <div class="sect2">
812 <h3 id="_configuration_data">2.6. Configuration Data</h3>
813 <table class="tableblock frame-all grid-all stretch">
814 <caption class="title">Table 12. Configuration Packet Type</caption>
815 <colgroup>
816 <col style="width: 25%;">
817 <col style="width: 75%;">
818 </colgroup>
819 <tbody>
820 <tr>
821 <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
822 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
823 </tr>
824 <tr>
825 <td class="tableblock halign-left valign-top"><p class="tableblock">0x04</p></td>
826 <td class="tableblock halign-left valign-top"><p class="tableblock">Configuration Data</p></td>
827 </tr>
828 </tbody>
829 </table>
830 <div class="paragraph">
831 <p>This provides a description of the software installed on the
832 flight computer as well as any user-specified configuration data.</p>
833 </div>
834 <div class="paragraph">
835 <p>Configuration data packets are transmitted once per second
836 during all phases of the flight</p>
837 </div>
838 <table class="tableblock frame-all grid-all stretch">
839 <caption class="title">Table 13. Configuration Packet Contents</caption>
840 <colgroup>
841 <col style="width: 11.7647%;">
842 <col style="width: 17.647%;">
843 <col style="width: 17.647%;">
844 <col style="width: 52.9413%;">
845 </colgroup>
846 <tbody>
847 <tr>
848 <td class="tableblock halign-left valign-top"><p class="tableblock">Offset</p></td>
849 <td class="tableblock halign-left valign-top"><p class="tableblock">Data Type</p></td>
850 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
851 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
852 </tr>
853 <tr>
854 <td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
855 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
856 <td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
857 <td class="tableblock halign-left valign-top"><p class="tableblock">Device type</p></td>
858 </tr>
859 <tr>
860 <td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
861 <td class="tableblock halign-left valign-top"><p class="tableblock">uint16_t</p></td>
862 <td class="tableblock halign-left valign-top"><p class="tableblock">flight</p></td>
863 <td class="tableblock halign-left valign-top"><p class="tableblock">Flight number</p></td>
864 </tr>
865 <tr>
866 <td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
867 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
868 <td class="tableblock halign-left valign-top"><p class="tableblock">config_major</p></td>
869 <td class="tableblock halign-left valign-top"><p class="tableblock">Config major version</p></td>
870 </tr>
871 <tr>
872 <td class="tableblock halign-left valign-top"><p class="tableblock">9</p></td>
873 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
874 <td class="tableblock halign-left valign-top"><p class="tableblock">config_minor</p></td>
875 <td class="tableblock halign-left valign-top"><p class="tableblock">Config minor version</p></td>
876 </tr>
877 <tr>
878 <td class="tableblock halign-left valign-top"><p class="tableblock">10</p></td>
879 <td class="tableblock halign-left valign-top"><p class="tableblock">uint16_t</p></td>
880 <td class="tableblock halign-left valign-top"><p class="tableblock">apogee_delay</p></td>
881 <td class="tableblock halign-left valign-top"><p class="tableblock">Apogee deploy delay in seconds</p></td>
882 </tr>
883 <tr>
884 <td class="tableblock halign-left valign-top"><p class="tableblock">12</p></td>
885 <td class="tableblock halign-left valign-top"><p class="tableblock">uint16_t</p></td>
886 <td class="tableblock halign-left valign-top"><p class="tableblock">main_deploy</p></td>
887 <td class="tableblock halign-left valign-top"><p class="tableblock">Main deploy alt in meters</p></td>
888 </tr>
889 <tr>
890 <td class="tableblock halign-left valign-top"><p class="tableblock">14</p></td>
891 <td class="tableblock halign-left valign-top"><p class="tableblock">uint16_t</p></td>
892 <td class="tableblock halign-left valign-top"><p class="tableblock">flight_log_max</p></td>
893 <td class="tableblock halign-left valign-top"><p class="tableblock">Maximum flight log size (kB)</p></td>
894 </tr>
895 <tr>
896 <td class="tableblock halign-left valign-top"><p class="tableblock">16</p></td>
897 <td class="tableblock halign-left valign-top"><p class="tableblock">char</p></td>
898 <td class="tableblock halign-left valign-top"><p class="tableblock">callsign[8]</p></td>
899 <td class="tableblock halign-left valign-top"><p class="tableblock">Radio operator identifier</p></td>
900 </tr>
901 <tr>
902 <td class="tableblock halign-left valign-top"><p class="tableblock">24</p></td>
903 <td class="tableblock halign-left valign-top"><p class="tableblock">char</p></td>
904 <td class="tableblock halign-left valign-top"><p class="tableblock">version[8]</p></td>
905 <td class="tableblock halign-left valign-top"><p class="tableblock">Software version identifier</p></td>
906 </tr>
907 </tbody>
908 </table>
909 </div>
910 <div class="sect2">
911 <h3 id="_gps_location">2.7. GPS Location</h3>
912 <table class="tableblock frame-all grid-all stretch">
913 <caption class="title">Table 14. GPS Packet Type</caption>
914 <colgroup>
915 <col style="width: 25%;">
916 <col style="width: 75%;">
917 </colgroup>
918 <tbody>
919 <tr>
920 <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
921 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
922 </tr>
923 <tr>
924 <td class="tableblock halign-left valign-top"><p class="tableblock">0x05</p></td>
925 <td class="tableblock halign-left valign-top"><p class="tableblock">GPS Location</p></td>
926 </tr>
927 </tbody>
928 </table>
929 <div class="paragraph">
930 <p>This packet provides all of the information available from the
931 GPS receiver—position, time, speed and precision
932 estimates.</p>
933 </div>
934 <div class="paragraph">
935 <p>GPS Location packets are transmitted once per second during
936 all phases of the flight</p>
937 </div>
938 <table class="tableblock frame-all grid-all stretch">
939 <caption class="title">Table 15. GPS Location Packet Contents</caption>
940 <colgroup>
941 <col style="width: 11.7647%;">
942 <col style="width: 17.647%;">
943 <col style="width: 17.647%;">
944 <col style="width: 52.9413%;">
945 </colgroup>
946 <tbody>
947 <tr>
948 <td class="tableblock halign-left valign-top"><p class="tableblock">Offset</p></td>
949 <td class="tableblock halign-left valign-top"><p class="tableblock">Data Type</p></td>
950 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
951 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
952 </tr>
953 <tr>
954 <td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
955 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
956 <td class="tableblock halign-left valign-top"><p class="tableblock">flags</p></td>
957 <td class="tableblock halign-left valign-top"><p class="tableblock">See GPS Flags table below</p></td>
958 </tr>
959 <tr>
960 <td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
961 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
962 <td class="tableblock halign-left valign-top"><p class="tableblock">altitude</p></td>
963 <td class="tableblock halign-left valign-top"><p class="tableblock">m</p></td>
964 </tr>
965 <tr>
966 <td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
967 <td class="tableblock halign-left valign-top"><p class="tableblock">int32_t</p></td>
968 <td class="tableblock halign-left valign-top"><p class="tableblock">latitude</p></td>
969 <td class="tableblock halign-left valign-top"><p class="tableblock">degrees * 107</p></td>
970 </tr>
971 <tr>
972 <td class="tableblock halign-left valign-top"><p class="tableblock">12</p></td>
973 <td class="tableblock halign-left valign-top"><p class="tableblock">int32_t</p></td>
974 <td class="tableblock halign-left valign-top"><p class="tableblock">longitude</p></td>
975 <td class="tableblock halign-left valign-top"><p class="tableblock">degrees * 107</p></td>
976 </tr>
977 <tr>
978 <td class="tableblock halign-left valign-top"><p class="tableblock">16</p></td>
979 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
980 <td class="tableblock halign-left valign-top"><p class="tableblock">year</p></td>
981 <td class="tableblock halign-left valign-top"></td>
982 </tr>
983 <tr>
984 <td class="tableblock halign-left valign-top"><p class="tableblock">17</p></td>
985 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
986 <td class="tableblock halign-left valign-top"><p class="tableblock">month</p></td>
987 <td class="tableblock halign-left valign-top"></td>
988 </tr>
989 <tr>
990 <td class="tableblock halign-left valign-top"><p class="tableblock">18</p></td>
991 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
992 <td class="tableblock halign-left valign-top"><p class="tableblock">day</p></td>
993 <td class="tableblock halign-left valign-top"></td>
994 </tr>
995 <tr>
996 <td class="tableblock halign-left valign-top"><p class="tableblock">19</p></td>
997 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
998 <td class="tableblock halign-left valign-top"><p class="tableblock">hour</p></td>
999 <td class="tableblock halign-left valign-top"></td>
1000 </tr>
1001 <tr>
1002 <td class="tableblock halign-left valign-top"><p class="tableblock">20</p></td>
1003 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1004 <td class="tableblock halign-left valign-top"><p class="tableblock">minute</p></td>
1005 <td class="tableblock halign-left valign-top"></td>
1006 </tr>
1007 <tr>
1008 <td class="tableblock halign-left valign-top"><p class="tableblock">21</p></td>
1009 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1010 <td class="tableblock halign-left valign-top"><p class="tableblock">second</p></td>
1011 <td class="tableblock halign-left valign-top"></td>
1012 </tr>
1013 <tr>
1014 <td class="tableblock halign-left valign-top"><p class="tableblock">22</p></td>
1015 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1016 <td class="tableblock halign-left valign-top"><p class="tableblock">pdop</p></td>
1017 <td class="tableblock halign-left valign-top"><p class="tableblock">* 5</p></td>
1018 </tr>
1019 <tr>
1020 <td class="tableblock halign-left valign-top"><p class="tableblock">23</p></td>
1021 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1022 <td class="tableblock halign-left valign-top"><p class="tableblock">hdop</p></td>
1023 <td class="tableblock halign-left valign-top"><p class="tableblock">* 5</p></td>
1024 </tr>
1025 <tr>
1026 <td class="tableblock halign-left valign-top"><p class="tableblock">24</p></td>
1027 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1028 <td class="tableblock halign-left valign-top"><p class="tableblock">vdop</p></td>
1029 <td class="tableblock halign-left valign-top"><p class="tableblock">* 5</p></td>
1030 </tr>
1031 <tr>
1032 <td class="tableblock halign-left valign-top"><p class="tableblock">25</p></td>
1033 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1034 <td class="tableblock halign-left valign-top"><p class="tableblock">mode</p></td>
1035 <td class="tableblock halign-left valign-top"><p class="tableblock">See GPS Mode table below</p></td>
1036 </tr>
1037 <tr>
1038 <td class="tableblock halign-left valign-top"><p class="tableblock">26</p></td>
1039 <td class="tableblock halign-left valign-top"><p class="tableblock">uint16_t</p></td>
1040 <td class="tableblock halign-left valign-top"><p class="tableblock">ground_speed</p></td>
1041 <td class="tableblock halign-left valign-top"><p class="tableblock">cm/s</p></td>
1042 </tr>
1043 <tr>
1044 <td class="tableblock halign-left valign-top"><p class="tableblock">28</p></td>
1045 <td class="tableblock halign-left valign-top"><p class="tableblock">int16_t</p></td>
1046 <td class="tableblock halign-left valign-top"><p class="tableblock">climb_rate</p></td>
1047 <td class="tableblock halign-left valign-top"><p class="tableblock">cm/s</p></td>
1048 </tr>
1049 <tr>
1050 <td class="tableblock halign-left valign-top"><p class="tableblock">30</p></td>
1051 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1052 <td class="tableblock halign-left valign-top"><p class="tableblock">course</p></td>
1053 <td class="tableblock halign-left valign-top"><p class="tableblock">/ 2</p></td>
1054 </tr>
1055 <tr>
1056 <td class="tableblock halign-left valign-top"><p class="tableblock">31</p></td>
1057 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1058 <td class="tableblock halign-left valign-top"><p class="tableblock">unused[1]</p></td>
1059 <td class="tableblock halign-left valign-top"></td>
1060 </tr>
1061 </tbody>
1062 </table>
1063 <div class="paragraph">
1064 <p>Packed into a one byte field are status flags and the
1065 count of satellites used to compute the position
1066 fix. Note that this number may be lower than the
1067 number of satellites being tracked; the receiver will
1068 not use information from satellites with weak signals
1069 or which are close enough to the horizon to have
1070 significantly degraded position accuracy.</p>
1071 </div>
1072 <table class="tableblock frame-all grid-all stretch">
1073 <caption class="title">Table 16. GPS Flags</caption>
1074 <colgroup>
1075 <col style="width: 10%;">
1076 <col style="width: 20%;">
1077 <col style="width: 70%;">
1078 </colgroup>
1079 <tbody>
1080 <tr>
1081 <td class="tableblock halign-left valign-top"><p class="tableblock">Bits</p></td>
1082 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
1083 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1084 </tr>
1085 <tr>
1086 <td class="tableblock halign-left valign-top"><p class="tableblock">0-3</p></td>
1087 <td class="tableblock halign-left valign-top"><p class="tableblock">nsats</p></td>
1088 <td class="tableblock halign-left valign-top"><p class="tableblock">Number of satellites in solution</p></td>
1089 </tr>
1090 <tr>
1091 <td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
1092 <td class="tableblock halign-left valign-top"><p class="tableblock">valid</p></td>
1093 <td class="tableblock halign-left valign-top"><p class="tableblock">GPS solution is valid</p></td>
1094 </tr>
1095 <tr>
1096 <td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
1097 <td class="tableblock halign-left valign-top"><p class="tableblock">running</p></td>
1098 <td class="tableblock halign-left valign-top"><p class="tableblock">GPS receiver is operational</p></td>
1099 </tr>
1100 <tr>
1101 <td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
1102 <td class="tableblock halign-left valign-top"><p class="tableblock">date_valid</p></td>
1103 <td class="tableblock halign-left valign-top"><p class="tableblock">Reported date is valid</p></td>
1104 </tr>
1105 <tr>
1106 <td class="tableblock halign-left valign-top"><p class="tableblock">7</p></td>
1107 <td class="tableblock halign-left valign-top"><p class="tableblock">course_valid</p></td>
1108 <td class="tableblock halign-left valign-top"><p class="tableblock">ground speed, course and climb rates are valid</p></td>
1109 </tr>
1110 </tbody>
1111 </table>
1112 <div class="paragraph">
1113 <p>Here are all of the valid GPS operational modes. Altus
1114 Metrum products will only ever report 'N' (not valid),
1115 'A' (Autonomous) modes or 'E' (Estimated). The
1116 remaining modes are either testing modes or require
1117 additional data.</p>
1118 </div>
1119 <table class="tableblock frame-all grid-all stretch">
1120 <caption class="title">Table 17. GPS Mode</caption>
1121 <colgroup>
1122 <col style="width: 9.0909%;">
1123 <col style="width: 27.2727%;">
1124 <col style="width: 63.6364%;">
1125 </colgroup>
1126 <tbody>
1127 <tr>
1128 <td class="tableblock halign-left valign-top"><p class="tableblock">Mode</p></td>
1129 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
1130 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1131 </tr>
1132 <tr>
1133 <td class="tableblock halign-left valign-top"><p class="tableblock">N</p></td>
1134 <td class="tableblock halign-left valign-top"><p class="tableblock">Not Valid</p></td>
1135 <td class="tableblock halign-left valign-top"><p class="tableblock">All data are invalid</p></td>
1136 </tr>
1137 <tr>
1138 <td class="tableblock halign-left valign-top"><p class="tableblock">A</p></td>
1139 <td class="tableblock halign-left valign-top"><p class="tableblock">Autonomous mode</p></td>
1140 <td class="tableblock halign-left valign-top"><p class="tableblock">Data are derived from satellite data</p></td>
1141 </tr>
1142 <tr>
1143 <td class="tableblock halign-left valign-top"><p class="tableblock">D</p></td>
1144 <td class="tableblock halign-left valign-top"><p class="tableblock">Differential Mode</p></td>
1145 <td class="tableblock halign-left valign-top"><p class="tableblock">Data are augmented with differential data from a
1146 known ground station. The SkyTraq unit in TeleMetrum
1147 does not support this mode</p></td>
1148 </tr>
1149 <tr>
1150 <td class="tableblock halign-left valign-top"><p class="tableblock">E</p></td>
1151 <td class="tableblock halign-left valign-top"><p class="tableblock">Estimated</p></td>
1152 <td class="tableblock halign-left valign-top"><p class="tableblock">Data are estimated using dead reckoning from the
1153 last known data</p></td>
1154 </tr>
1155 <tr>
1156 <td class="tableblock halign-left valign-top"><p class="tableblock">M</p></td>
1157 <td class="tableblock halign-left valign-top"><p class="tableblock">Manual</p></td>
1158 <td class="tableblock halign-left valign-top"><p class="tableblock">Data were entered manually</p></td>
1159 </tr>
1160 <tr>
1161 <td class="tableblock halign-left valign-top"><p class="tableblock">S</p></td>
1162 <td class="tableblock halign-left valign-top"><p class="tableblock">Simulated</p></td>
1163 <td class="tableblock halign-left valign-top"><p class="tableblock">GPS receiver testing mode</p></td>
1164 </tr>
1165 </tbody>
1166 </table>
1167 </div>
1168 <div class="sect2">
1169 <h3 id="_gps_satellite_data">2.8. GPS Satellite Data</h3>
1170 <table class="tableblock frame-all grid-all stretch">
1171 <caption class="title">Table 18. GPS Satellite Data Packet Type</caption>
1172 <colgroup>
1173 <col style="width: 25%;">
1174 <col style="width: 75%;">
1175 </colgroup>
1176 <tbody>
1177 <tr>
1178 <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
1179 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1180 </tr>
1181 <tr>
1182 <td class="tableblock halign-left valign-top"><p class="tableblock">0x06</p></td>
1183 <td class="tableblock halign-left valign-top"><p class="tableblock">GPS Satellite Data</p></td>
1184 </tr>
1185 </tbody>
1186 </table>
1187 <div class="paragraph">
1188 <p>This packet provides space vehicle identifiers and
1189 signal quality information in the form of a C/N1
1190 number for up to 12 satellites. The order of the svids
1191 is not specified.</p>
1192 </div>
1193 <div class="paragraph">
1194 <p>GPS Satellite data are transmitted once per second
1195 during all phases of the flight.</p>
1196 </div>
1197 <table class="tableblock frame-all grid-all stretch">
1198 <caption class="title">Table 19. GPS Satellite Data Contents</caption>
1199 <colgroup>
1200 <col style="width: 11.7647%;">
1201 <col style="width: 17.647%;">
1202 <col style="width: 17.647%;">
1203 <col style="width: 52.9413%;">
1204 </colgroup>
1205 <tbody>
1206 <tr>
1207 <td class="tableblock halign-left valign-top"><p class="tableblock">Offset</p></td>
1208 <td class="tableblock halign-left valign-top"><p class="tableblock">Data Type</p></td>
1209 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
1210 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1211 </tr>
1212 <tr>
1213 <td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
1214 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1215 <td class="tableblock halign-left valign-top"><p class="tableblock">channels</p></td>
1216 <td class="tableblock halign-left valign-top"><p class="tableblock">Number of reported satellite information</p></td>
1217 </tr>
1218 <tr>
1219 <td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
1220 <td class="tableblock halign-left valign-top"><p class="tableblock">sat_info_t</p></td>
1221 <td class="tableblock halign-left valign-top"><p class="tableblock">sats[12]</p></td>
1222 <td class="tableblock halign-left valign-top"><p class="tableblock">See Per-Satellite data table below</p></td>
1223 </tr>
1224 <tr>
1225 <td class="tableblock halign-left valign-top"><p class="tableblock">30</p></td>
1226 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1227 <td class="tableblock halign-left valign-top"><p class="tableblock">unused[2]</p></td>
1228 <td class="tableblock halign-left valign-top"></td>
1229 </tr>
1230 </tbody>
1231 </table>
1232 <table class="tableblock frame-all grid-all stretch">
1233 <caption class="title">Table 20. GPS Per-Satellite data (sat_info_t)</caption>
1234 <colgroup>
1235 <col style="width: 11.7647%;">
1236 <col style="width: 17.647%;">
1237 <col style="width: 17.647%;">
1238 <col style="width: 52.9413%;">
1239 </colgroup>
1240 <tbody>
1241 <tr>
1242 <td class="tableblock halign-left valign-top"><p class="tableblock">Offset</p></td>
1243 <td class="tableblock halign-left valign-top"><p class="tableblock">Data Type</p></td>
1244 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
1245 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1246 </tr>
1247 <tr>
1248 <td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td>
1249 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1250 <td class="tableblock halign-left valign-top"><p class="tableblock">svid</p></td>
1251 <td class="tableblock halign-left valign-top"><p class="tableblock">Space Vehicle Identifier</p></td>
1252 </tr>
1253 <tr>
1254 <td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
1255 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1256 <td class="tableblock halign-left valign-top"><p class="tableblock">c_n_1</p></td>
1257 <td class="tableblock halign-left valign-top"><p class="tableblock">C/N1 signal quality indicator</p></td>
1258 </tr>
1259 </tbody>
1260 </table>
1261 </div>
1262 <div class="sect2">
1263 <h3 id="_companion_data">2.9. Companion Data</h3>
1264 <table class="tableblock frame-all grid-all stretch">
1265 <caption class="title">Table 21. Companion Data Packet Type</caption>
1266 <colgroup>
1267 <col style="width: 25%;">
1268 <col style="width: 75%;">
1269 </colgroup>
1270 <tbody>
1271 <tr>
1272 <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
1273 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1274 </tr>
1275 <tr>
1276 <td class="tableblock halign-left valign-top"><p class="tableblock">0x07</p></td>
1277 <td class="tableblock halign-left valign-top"><p class="tableblock">Companion Data</p></td>
1278 </tr>
1279 </tbody>
1280 </table>
1281 <div class="paragraph">
1282 <p>When a companion board is attached to TeleMega or
1283 TeleMetrum, it can provide telemetry data to be
1284 included in the downlink. The companion board can
1285 provide up to 12 16-bit data values.</p>
1286 </div>
1287 <div class="paragraph">
1288 <p>The companion board itself specifies the transmission
1289 rate. On the ground and during descent, that rate is
1290 limited to one packet per second. During ascent, that
1291 rate is limited to 10 packets per second.</p>
1292 </div>
1293 <table class="tableblock frame-all grid-all stretch">
1294 <caption class="title">Table 22. Companion Data Contents</caption>
1295 <colgroup>
1296 <col style="width: 11.7647%;">
1297 <col style="width: 17.647%;">
1298 <col style="width: 17.647%;">
1299 <col style="width: 52.9413%;">
1300 </colgroup>
1301 <tbody>
1302 <tr>
1303 <td class="tableblock halign-left valign-top"><p class="tableblock">Offset</p></td>
1304 <td class="tableblock halign-left valign-top"><p class="tableblock">Data Type</p></td>
1305 <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
1306 <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1307 </tr>
1308 <tr>
1309 <td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
1310 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1311 <td class="tableblock halign-left valign-top"><p class="tableblock">board_id</p></td>
1312 <td class="tableblock halign-left valign-top"><p class="tableblock">Type of companion board attached</p></td>
1313 </tr>
1314 <tr>
1315 <td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
1316 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1317 <td class="tableblock halign-left valign-top"><p class="tableblock">update_period</p></td>
1318 <td class="tableblock halign-left valign-top"><p class="tableblock">How often telemetry is sent, in 1/100ths of a second</p></td>
1319 </tr>
1320 <tr>
1321 <td class="tableblock halign-left valign-top"><p class="tableblock">7</p></td>
1322 <td class="tableblock halign-left valign-top"><p class="tableblock">uint8_t</p></td>
1323 <td class="tableblock halign-left valign-top"><p class="tableblock">channels</p></td>
1324 <td class="tableblock halign-left valign-top"><p class="tableblock">Number of data channels supplied</p></td>
1325 </tr>
1326 <tr>
1327 <td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
1328 <td class="tableblock halign-left valign-top"><p class="tableblock">uint16_t[12]</p></td>
1329 <td class="tableblock halign-left valign-top"><p class="tableblock">companion_data</p></td>
1330 <td class="tableblock halign-left valign-top"><p class="tableblock">Up to 12 channels of 16-bit companion data</p></td>
1331 </tr>
1332 </tbody>
1333 </table>
1334 </div>
1335 </div>
1336 </div>
1337 <div class="sect1">
1338 <h2 id="_data_transmission">3. Data Transmission</h2>
1339 <div class="sectionbody">
1340 <div class="paragraph">
1341 <p>Altus Metrum devices use Texas Instruments sub-GHz digital
1342 radio products. Ground stations use parts with HW FEC while
1343 some flight computers perform FEC in software. TeleGPS is
1344 transmit-only.</p>
1345 </div>
1346 <table class="tableblock frame-all grid-all stretch">
1347 <caption class="title">Table 23. Altus Metrum Radio Parts</caption>
1348 <colgroup>
1349 <col style="width: 11.1111%;">
1350 <col style="width: 44.4444%;">
1351 <col style="width: 44.4445%;">
1352 </colgroup>
1353 <thead>
1354 <tr>
1355 <th class="tableblock halign-left valign-top">Part Number</th>
1356 <th class="tableblock halign-left valign-top">Description</th>
1357 <th class="tableblock halign-left valign-top">Used in</th>
1358 </tr>
1359 </thead>
1360 <tbody>
1361 <tr>
1362 <td class="tableblock halign-left valign-top"><p class="tableblock">CC1111</p></td>
1363 <td class="tableblock halign-left valign-top"><p class="tableblock">10mW transceiver with integrated SoC</p></td>
1364 <td class="tableblock halign-left valign-top"><p class="tableblock">TeleDongle v0.2, TeleBT v1.0, TeleMetrum v1.x, TeleMini v1</p></td>
1365 </tr>
1366 <tr>
1367 <td class="tableblock halign-left valign-top"><p class="tableblock">CC1120</p></td>
1368 <td class="tableblock halign-left valign-top"><p class="tableblock">35mW transceiver with SW FEC</p></td>
1369 <td class="tableblock halign-left valign-top"><p class="tableblock">TeleMetrum v2, TeleMega v1</p></td>
1370 </tr>
1371 <tr>
1372 <td class="tableblock halign-left valign-top"><p class="tableblock">CC1200</p></td>
1373 <td class="tableblock halign-left valign-top"><p class="tableblock">35mW transceiver with HW FEC</p></td>
1374 <td class="tableblock halign-left valign-top"><p class="tableblock">TeleMetrum v3, TeleMega v2, TeleDongle v3.0, TeleMini v3, TeleBT v3.0, TeleGPS v2</p></td>
1375 </tr>
1376 <tr>
1377 <td class="tableblock halign-left valign-top"><p class="tableblock">CC115L</p></td>
1378 <td class="tableblock halign-left valign-top"><p class="tableblock">14mW transmitter with SW FEC</p></td>
1379 <td class="tableblock halign-left valign-top"><p class="tableblock">TeleGPS v1</p></td>
1380 </tr>
1381 </tbody>
1382 </table>
1383 <div class="sect2">
1384 <h3 id="_modulation_scheme">3.1. Modulation Scheme</h3>
1385 <div class="paragraph">
1386 <p>Texas Instruments provides a tool for computing
1387 modulation parameters given a desired modulation
1388 format and basic bit rate.</p>
1389 </div>
1390 <div class="paragraph">
1391 <p>While we might like to use something with better
1392 low-signal performance like BPSK, the radios we use
1393 don&#8217;t support that, but do support Gaussian frequency
1394 shift keying (GFSK). Regular frequency shift keying
1395 (FSK) encodes the signal by switching the carrier
1396 between two frequencies. The Gaussian version is
1397 essentially the same, but the shift between
1398 frequencies gently follows a gaussian curve, rather
1399 than switching immediately. This tames the bandwidth
1400 of the signal without affecting the ability to
1401 transmit data.</p>
1402 </div>
1403 <div class="paragraph">
1404 <p>For AltOS, there are three available bit rates,
1405 38.4kBaud, 9.6kBaud and 2.4kBaud resulting in the
1406 following signal parmeters:</p>
1407 </div>
1408 <table class="tableblock frame-all grid-all stretch">
1409 <caption class="title">Table 24. Modulation Scheme</caption>
1410 <colgroup>
1411 <col style="width: 33.3333%;">
1412 <col style="width: 33.3333%;">
1413 <col style="width: 33.3334%;">
1414 </colgroup>
1415 <tbody>
1416 <tr>
1417 <td class="tableblock halign-left valign-top"><p class="tableblock">Rate</p></td>
1418 <td class="tableblock halign-left valign-top"><p class="tableblock">Deviation</p></td>
1419 <td class="tableblock halign-left valign-top"><p class="tableblock">Receiver Bandwidth</p></td>
1420 </tr>
1421 <tr>
1422 <td class="tableblock halign-left valign-top"><p class="tableblock">38.4kBaud</p></td>
1423 <td class="tableblock halign-left valign-top"><p class="tableblock">20.5kHz</p></td>
1424 <td class="tableblock halign-left valign-top"><p class="tableblock">100kHz</p></td>
1425 </tr>
1426 <tr>
1427 <td class="tableblock halign-left valign-top"><p class="tableblock">9.6kBaud</p></td>
1428 <td class="tableblock halign-left valign-top"><p class="tableblock">5.125kHz</p></td>
1429 <td class="tableblock halign-left valign-top"><p class="tableblock">25kHz</p></td>
1430 </tr>
1431 <tr>
1432 <td class="tableblock halign-left valign-top"><p class="tableblock">2.4kBaud</p></td>
1433 <td class="tableblock halign-left valign-top"><p class="tableblock">1.5kHz</p></td>
1434 <td class="tableblock halign-left valign-top"><p class="tableblock">5kHz</p></td>
1435 </tr>
1436 </tbody>
1437 </table>
1438 </div>
1439 <div class="sect2">
1440 <h3 id="_error_correction">3.2. Error Correction</h3>
1441 <div class="paragraph">
1442 <p>The cc1111 and cc1200 provide forward error correction
1443 in hardware; on the cc1120 and cc115l that&#8217;s done in
1444 software. AltOS uses this to improve reception of weak
1445 signals. As it&#8217;s a rate 1/2 encoding, each bit of data
1446 takes two bits when transmitted, so the effective data
1447 rate is half of the raw transmitted bit rate.</p>
1448 </div>
1449 <table class="tableblock frame-all grid-all stretch">
1450 <caption class="title">Table 25. Error Correction</caption>
1451 <colgroup>
1452 <col style="width: 33.3333%;">
1453 <col style="width: 33.3333%;">
1454 <col style="width: 33.3334%;">
1455 </colgroup>
1456 <thead>
1457 <tr>
1458 <th class="tableblock halign-left valign-top">Parameter</th>
1459 <th class="tableblock halign-left valign-top">Value</th>
1460 <th class="tableblock halign-left valign-top">Description</th>
1461 </tr>
1462 </thead>
1463 <tbody>
1464 <tr>
1465 <td class="tableblock halign-left valign-top"><p class="tableblock">Error Correction</p></td>
1466 <td class="tableblock halign-left valign-top"><p class="tableblock">Convolutional coding</p></td>
1467 <td class="tableblock halign-left valign-top"><p class="tableblock">1/2 rate, constraint length m=4</p></td>
1468 </tr>
1469 <tr>
1470 <td class="tableblock halign-left valign-top"><p class="tableblock">Interleaving</p></td>
1471 <td class="tableblock halign-left valign-top"><p class="tableblock">4 x 4</p></td>
1472 <td class="tableblock halign-left valign-top"><p class="tableblock">Reduce effect of noise burst</p></td>
1473 </tr>
1474 <tr>
1475 <td class="tableblock halign-left valign-top"><p class="tableblock">Data Whitening</p></td>
1476 <td class="tableblock halign-left valign-top"><p class="tableblock">XOR with 9-bit PNR</p></td>
1477 <td class="tableblock halign-left valign-top"><p class="tableblock">Rotate right with bit 8 = bit 0 xor bit 5, initial value 111111111</p></td>
1478 </tr>
1479 </tbody>
1480 </table>
1481 </div>
1482 </div>
1483 </div>
1484 <div class="sect1">
1485 <h2 id="_teledongle_serial_packet_format">4. TeleDongle serial packet format</h2>
1486 <div class="sectionbody">
1487 <div class="paragraph">
1488 <p>TeleDongle does not do any interpretation of the packet data,
1489 instead it is configured to receive packets of a specified
1490 length (32 bytes in this case). For each received packet,
1491 TeleDongle produces a single line of text. This line starts with
1492 the string "TELEM " and is followed by a list of hexadecimal
1493 encoded bytes.</p>
1494 </div>
1495 <div class="literalblock">
1496 <div class="content">
1497 <pre>TELEM 224f01080b05765e00701f1a1bbeb8d7b60b070605140c000600000000000000003fa988</pre>
1498 </div>
1499 </div>
1500 <div class="paragraph">
1501 <p>The hexadecimal encoded string of bytes contains a length byte,
1502 the packet data, two bytes added by the cc1111 radio receiver
1503 hardware and finally a checksum so that the host software can
1504 validate that the line was transmitted without any errors.</p>
1505 </div>
1506 <table class="tableblock frame-all grid-all stretch">
1507 <caption class="title">Table 26. TeleDongle serial Packet Format</caption>
1508 <colgroup>
1509 <col style="width: 22.2222%;">
1510 <col style="width: 11.1111%;">
1511 <col style="width: 11.1111%;">
1512 <col style="width: 55.5556%;">
1513 </colgroup>
1514 <thead>
1515 <tr>
1516 <th class="tableblock halign-left valign-top">Offset</th>
1517 <th class="tableblock halign-left valign-top">Name</th>
1518 <th class="tableblock halign-left valign-top">Example</th>
1519 <th class="tableblock halign-left valign-top">Description</th>
1520 </tr>
1521 </thead>
1522 <tbody>
1523 <tr>
1524 <td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td>
1525 <td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
1526 <td class="tableblock halign-left valign-top"><p class="tableblock">22</p></td>
1527 <td class="tableblock halign-left valign-top"><p class="tableblock">Total length of data bytes in the line. Note that
1528 this includes the added RSSI and status bytes</p></td>
1529 </tr>
1530 <tr>
1531 <td class="tableblock halign-left valign-top"><p class="tableblock">1 ·· length-3</p></td>
1532 <td class="tableblock halign-left valign-top"><p class="tableblock">packet</p></td>
1533 <td class="tableblock halign-left valign-top"><p class="tableblock">4f ·· 00</p></td>
1534 <td class="tableblock halign-left valign-top"><p class="tableblock">Bytes of actual packet data</p></td>
1535 </tr>
1536 <tr>
1537 <td class="tableblock halign-left valign-top"><p class="tableblock">length-2</p></td>
1538 <td class="tableblock halign-left valign-top"><p class="tableblock">rssi</p></td>
1539 <td class="tableblock halign-left valign-top"><p class="tableblock">3f</p></td>
1540 <td class="tableblock halign-left valign-top"><p class="tableblock">Received signal strength. dBm = rssi / 2 - 74</p></td>
1541 </tr>
1542 <tr>
1543 <td class="tableblock halign-left valign-top"><p class="tableblock">length-1</p></td>
1544 <td class="tableblock halign-left valign-top"><p class="tableblock">lqi</p></td>
1545 <td class="tableblock halign-left valign-top"><p class="tableblock">a9</p></td>
1546 <td class="tableblock halign-left valign-top"><p class="tableblock">Link Quality Indicator and CRC status. Bit 7
1547 is set when the CRC is correct</p></td>
1548 </tr>
1549 <tr>
1550 <td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
1551 <td class="tableblock halign-left valign-top"><p class="tableblock">checksum</p></td>
1552 <td class="tableblock halign-left valign-top"><p class="tableblock">88</p></td>
1553 <td class="tableblock halign-left valign-top"><p class="tableblock">(0x5a + sum(bytes 1 ·· length-1)) % 256</p></td>
1554 </tr>
1555 </tbody>
1556 </table>
1557 </div>
1558 </div>
1559 <div class="sect1">
1560 <h2 id="_history_and_motivation">5. History and Motivation</h2>
1561 <div class="sectionbody">
1562 <div class="paragraph">
1563 <p>The original AltoOS telemetry mechanism encoded everything
1564 available piece of information on the TeleMetrum hardware into a
1565 single unified packet. Initially, the packets contained very
1566 little data—some raw sensor readings along with the current GPS
1567 coordinates when a GPS receiver was connected. Over time, the
1568 amount of data grew to include sensor calibration data, GPS
1569 satellite information and a host of internal state information
1570 designed to help diagnose flight failures in case of a loss of
1571 the on-board flight data.</p>
1572 </div>
1573 <div class="paragraph">
1574 <p>Because every packet contained all of the data, packets were
1575 huge—95 bytes long. Much of the information was also specific to
1576 the TeleMetrum hardware. With the introduction of the TeleMini
1577 flight computer, most of the data contained in the telemetry
1578 packets was unavailable. Initially, a shorter, but still
1579 comprehensive packet was implemented. This required that the
1580 ground station be pre-configured as to which kind of packet to
1581 expect.</p>
1582 </div>
1583 <div class="paragraph">
1584 <p>The development of several companion boards also made the
1585 shortcomings evident—each companion board would want to include
1586 telemetry data in the radio link; with the original design, the
1587 packet would have to hold the new data as well, requiring
1588 additional TeleMetrum and ground station changes.</p>
1589 </div>
1590 </div>
1591 </div>
1592 </div>
1593 <div id="footer">
1594 <div id="footer-text">
1595 Version v1.9.11<br>
1596 Last updated 2022-05-29 21:31:42 -0600
1597 </div>
1598 </div>
1599 </body>
1600 </html>