switch (log_format) {
case AltosLib.AO_LOG_FORMAT_FULL:
case AltosLib.AO_LOG_FORMAT_TINY:
- case AltosLib.AO_LOG_FORMAT_MEGAMETRUM:
+ case AltosLib.AO_LOG_FORMAT_TELEMEGA:
link.printf("l\n");
read_link(link, "done");
default:
}
boolean has_sensor_mm(AltosConfigData config_data) {
- return config_data.product.startsWith("MegaMetrum");
+ return config_data.product.startsWith("TeleMega");
}
boolean has_gps(AltosConfigData config_data) {
- return config_data.product.startsWith("TeleMetrum") || config_data.product.startsWith("MegaMetrum");
+ return config_data.product.startsWith("TeleMetrum") || config_data.product.startsWith("TeleMega");
}
AltosRecord sensor_mm(AltosConfigData config_data) throws InterruptedException, TimeoutException {
public static final int AO_LOG_SERIAL_NUMBER = 2002;
public static final int AO_LOG_LOG_FORMAT = 2003;
- /* Added for header fields in megametrum files */
+ /* Added for header fields in telemega files */
public static final int AO_LOG_BARO_RESERVED = 3000;
public static final int AO_LOG_BARO_SENS = 3001;
public static final int AO_LOG_BARO_OFF = 3002;
public final static int product_telelco = 0x0010;
public final static int product_telescience = 0x0011;
public final static int product_telepyro =0x0012;
- public final static int product_megametrum = 0x0023;
+ public final static int product_telemega = 0x0023;
public final static int product_megadongle = 0x0024;
public final static int product_telegps = 0x0025;
public final static int product_altusmetrum_min = 0x000a;
public static final int AO_LOG_FORMAT_TINY = 2;
public static final int AO_LOG_FORMAT_TELEMETRY = 3;
public static final int AO_LOG_FORMAT_TELESCIENCE = 4;
- public static final int AO_LOG_FORMAT_MEGAMETRUM = 5;
+ public static final int AO_LOG_FORMAT_TELEMEGA = 5;
public static final int AO_LOG_FORMAT_NONE = 127;
public static boolean isspace(int c) {
"eeprom"));
setFileFilter(new FileNameExtensionFilter("Telemetry file",
"telem"));
- setFileFilter(new FileNameExtensionFilter("MegaMetrum eeprom file",
+ setFileFilter(new FileNameExtensionFilter("TeleMega eeprom file",
"mega"));
setFileFilter(new FileNameExtensionFilter("Flight data file",
"telem", "eeprom", "mega"));
extension = "science";
CaptureTeleScience(eechunk);
break;
- case AltosLib.AO_LOG_FORMAT_MEGAMETRUM:
+ case AltosLib.AO_LOG_FORMAT_TELEMEGA:
extension = "mega";
CaptureMega(eechunk);
}
ALTUSMETRUM_DOC=$(top_srcdir)/doc/altusmetrum.pdf
ALTOS_DOC=$(top_srcdir)/doc/altos.pdf
TELEMETRY_DOC=$(top_srcdir)/doc/telemetry.pdf
-TEMPLATE_DOC=$(top_srcdir)/doc/telemetrum-outline.pdf $(top_srcdir)/doc/megametrum-outline.pdf
+TEMPLATE_DOC=$(top_srcdir)/doc/telemetrum-outline.pdf $(top_srcdir)/doc/telemega-outline.pdf
DOC=$(ALTUSMETRUM_DOC) $(ALTOS_DOC) $(TELEMETRY_DOC) $(TEMPLATE_DOC)
File "../doc/altos.pdf"
File "../doc/telemetry.pdf"
File "../doc/telemetrum-outline.pdf"
- File "../doc/megametrum-outline.pdf"
+ File "../doc/telemega-outline.pdf"
SectionEnd
Section "Uninstaller"
return matchProduct(AltosUILib.product_teledongle) ||
matchProduct(AltosUILib.product_teleterra) ||
matchProduct(AltosUILib.product_telebt) ||
- matchProduct(AltosUILib.product_megadongle);
+ matchProduct(AltosUILib.product_telemega);
if (want_product == AltosUILib.product_altimeter)
return matchProduct(AltosUILib.product_telemetrum) ||
- matchProduct(AltosUILib.product_megametrum) ||
+ matchProduct(AltosUILib.product_telemega) ||
matchProduct(AltosUILib.product_telegps);
int have_product = getProduct();
return device_list;
}
-}
\ No newline at end of file
+}
+++ /dev/null
-# openocd config for MegaMetrum using the Olimex ARM-USB-OCD dongle
-
-source /opt/stm32/share/openocd/scripts/interface/olimex-arm-usb-ocd.cfg
-source /opt/stm32/share/openocd/scripts/target/stm32l.cfg
+++ /dev/null
-target remote localhost:3333
-monitor poll
--- /dev/null
+# openocd config for TeleMega using the Olimex ARM-USB-OCD dongle
+
+source /opt/stm32/share/openocd/scripts/interface/olimex-arm-usb-ocd.cfg
+source /opt/stm32/share/openocd/scripts/target/stm32l.cfg
--- /dev/null
+target remote localhost:3333
+monitor poll
doc/altos.html
doc/altos.pdf
doc/telemetrum-outline.pdf
-doc/megametrum-outline.pdf
+doc/telemega-outline.pdf
STM32L series from ST Microelectronics. This ARM Cortex-M3
based microcontroller offers low power consumption and a
wide variety of built-in peripherals. Altus Metrum uses
- this in the MegaMetrum, MegaDongle and TeleLCO projects.
+ this in the TeleMega, MegaDongle and TeleLCO projects.
</para>
</listitem>
<listitem>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="427.5"
- height="270"
- id="svg2"
- version="1.1"
- inkscape:version="0.48.3.1 r9886"
- sodipodi:docname="megametrum-outline.svg">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow2Lend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow2Lend"
- style="overflow:visible;">
- <path
- id="path3866"
- style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="scale(1.1) rotate(180) translate(1,0)" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective10" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="2.1783851"
- inkscape:cx="315.40175"
- inkscape:cy="122.33575"
- inkscape:document-units="in"
- inkscape:current-layer="layer1"
- showgrid="true"
- inkscape:window-width="1527"
- inkscape:window-height="1313"
- inkscape:window-x="813"
- inkscape:window-y="166"
- inkscape:window-maximized="0"
- units="in"
- showguides="true"
- inkscape:guide-bbox="true">
- <sodipodi:guide
- position="0,0"
- orientation="0,427.5"
- id="guide3005" />
- <sodipodi:guide
- position="427.5,0"
- orientation="-270,0"
- id="guide3007" />
- <sodipodi:guide
- position="427.5,270"
- orientation="0,-427.5"
- id="guide3009" />
- <sodipodi:guide
- position="0,270"
- orientation="270,0"
- id="guide3011" />
- <inkscape:grid
- type="xygrid"
- id="grid3013"
- empspacing="4"
- visible="true"
- enabled="true"
- snapvisiblegridlinesonly="true"
- units="in"
- spacingx="0.025in"
- spacingy="0.025in" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-782.35975)">
- <rect
- style="fill:none;stroke:#000000;stroke-width:0.54555845;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect2816"
- width="291.95444"
- height="111.95444"
- x="90.272781"
- y="850.13251" />
- <g
- inkscape:tile-y0="681.11218"
- inkscape:tile-x0="90"
- id="use3601"
- transform="matrix(0.97131843,0,0,0.97528987,8.397686,191.32255)">
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:1.41507304;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="path3611"
- sodipodi:cx="116"
- sodipodi:cy="739.36218"
- sodipodi:rx="17"
- sodipodi:ry="18"
- d="m 133,739.36218 c 0,9.94113 -7.61116,18 -17,18 -9.38884,0 -17,-8.05887 -17,-18 0,-9.94112 7.61116,-18 17,-18 9.38884,0 17,8.05888 17,18 z"
- transform="matrix(0.32722728,0,0,0.3090422,57.632964,458.24316)" />
- <path
- style="color:#000000;fill:#67615b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.10785132;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 95.625,692.36218 0,-11.25"
- id="path3613"
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cc"
- id="path3615"
- d="m 90,686.73718 11.25,0"
- style="color:#000000;fill:#67615b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.09;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- </g>
- <g
- inkscape:tile-y0="681.11218"
- inkscape:tile-x0="90"
- id="use3603"
- transform="matrix(0.97186116,0,0,0.97241431,278.34851,193.3134)">
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:1.41507304;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="path3619"
- sodipodi:cx="116"
- sodipodi:cy="739.36218"
- sodipodi:rx="17"
- sodipodi:ry="18"
- d="m 133,739.36218 c 0,9.94113 -7.61116,18 -17,18 -9.38884,0 -17,-8.05887 -17,-18 0,-9.94112 7.61116,-18 17,-18 9.38884,0 17,8.05888 17,18 z"
- transform="matrix(0.32722728,0,0,0.3090422,57.632964,458.24316)" />
- <path
- style="color:#000000;fill:#67615b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.10785132;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 95.625,692.36218 0,-11.25"
- id="path3621"
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cc"
- id="path3623"
- d="m 90,686.73718 11.25,0"
- style="color:#000000;fill:#67615b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.09;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- </g>
- <g
- inkscape:tile-y0="681.11218"
- inkscape:tile-x0="90"
- id="use3605"
- transform="matrix(0.97475506,0,0,0.97241431,278.08835,283.31323)">
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:1.41507304;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="path3627"
- sodipodi:cx="116"
- sodipodi:cy="739.36218"
- sodipodi:rx="17"
- sodipodi:ry="18"
- d="m 133,739.36218 c 0,9.94113 -7.61116,18 -17,18 -9.38884,0 -17,-8.05887 -17,-18 0,-9.94112 7.61116,-18 17,-18 9.38884,0 17,8.05888 17,18 z"
- transform="matrix(0.32722728,0,0,0.3090422,57.632964,458.24316)" />
- <path
- style="color:#000000;fill:#67615b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.10785132;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 95.625,692.36218 0,-11.25"
- id="path3629"
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cc"
- id="path3631"
- d="m 90,686.73718 11.25,0"
- style="color:#000000;fill:#67615b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.09;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- </g>
- <g
- inkscape:tile-y0="681.11218"
- inkscape:tile-x0="90"
- id="use3607"
- transform="matrix(0.97186116,0,0,0.97241431,8.3485628,283.31356)">
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:1.41507304;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="path3635"
- sodipodi:cx="116"
- sodipodi:cy="739.36218"
- sodipodi:rx="17"
- sodipodi:ry="18"
- d="m 133,739.36218 c 0,9.94113 -7.61116,18 -17,18 -9.38884,0 -17,-8.05887 -17,-18 0,-9.94112 7.61116,-18 17,-18 9.38884,0 17,8.05888 17,18 z"
- transform="matrix(0.32722728,0,0,0.3090422,57.632964,458.24316)" />
- <path
- style="color:#000000;fill:#67615b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.10785132;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 95.625,692.36218 0,-11.25"
- id="path3637"
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cc"
- id="path3639"
- d="m 90,686.73718 11.25,0"
- style="color:#000000;fill:#67615b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.09;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- </g>
- <path
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#Arrow2Lend);visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 135,903.85975 157.5,0"
- id="path2829"
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0" />
- <text
- xml:space="preserve"
- style="font-size:22px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Minion Pro;-inkscape-font-specification:Minion Pro"
- x="888.10974"
- y="-303.75"
- id="text4236"
- sodipodi:linespacing="125%"
- transform="matrix(0,1,-1,0,0,0)"><tspan
- sodipodi:role="line"
- x="888.10974"
- y="-303.75"
- id="tspan4242">UP</tspan></text>
- </g>
-</svg>
raised, breaking the Descent tab contents.
</listitem>
<listitem>
- Add preliminary MegaMetrum support, including configuration,
+ Add preliminary TeleMega support, including configuration,
data download and analysis.
</listitem>
<listitem>
telescience-v0.1 telescience-pwm telepyro-v0.1 micropeak
ARMDIRS=\
- megametrum-v0.1 megadongle-v0.1 stm-bringup stm-demo telelco-v0.1 \
+ telemega-v0.1 megadongle-v0.1 stm-bringup stm-demo telelco-v0.1 \
telescience-v0.2
ifneq ($(shell which sdcc),)
#include <ao_fec.h>
#include <stdio.h>
-#ifdef MEGAMETRUM
+#ifdef TELEMEGA
#include <ao.h>
#endif
#define AO_LOG_FORMAT_TINY 2 /* two byte state/baro records */
#define AO_LOG_FORMAT_TELEMETRY 3 /* 32 byte ao_telemetry records */
#define AO_LOG_FORMAT_TELESCIENCE 4 /* 32 byte typed telescience records */
-#define AO_LOG_FORMAT_MEGAMETRUM 5 /* 32 byte typed megametrum records */
+#define AO_LOG_FORMAT_TELEMEGA 5 /* 32 byte typed telemega records */
#define AO_LOG_FORMAT_NONE 127 /* No log at all */
extern __code uint8_t ao_log_format;
static __xdata uint8_t ao_log_mutex;
static __xdata struct ao_log_mega log;
-__code uint8_t ao_log_format = AO_LOG_FORMAT_MEGAMETRUM;
+__code uint8_t ao_log_format = AO_LOG_FORMAT_TELEMEGA;
static uint8_t
ao_log_csum(__xdata uint8_t *b) __reentrant
#include <ao_aprs.h>
#endif
-#if defined(MEGAMETRUM)
+#if defined(TELEMEGA)
#define AO_SEND_MEGA 1
#endif
#include <ao.h>
#include <ao_companion.h>
-#ifdef MEGAMETRUM
+#ifdef TELEMEGA
#define ao_spi_slow(b)
#define ao_spi_fast(b)
#endif
+++ /dev/null
-ao_product.h
-megametrum-*.elf
+++ /dev/null
-#
-# AltOS build
-#
-#
-
-include ../stm/Makefile.defs
-
-INC = \
- ao.h \
- ao_arch.h \
- ao_arch_funcs.h \
- ao_companion.h \
- ao_data.h \
- ao_sample.h \
- ao_pins.h \
- altitude-pa.h \
- ao_kalman.h \
- ao_product.h \
- ao_ms5607.h \
- ao_hmc5883.h \
- ao_mpu6000.h \
- ao_mma655x.h \
- ao_cc1120_CC1120.h \
- ao_profile.h \
- ao_task.h \
- ao_whiten.h \
- ao_sample_profile.h \
- ao_mpu.h \
- stm32l.h \
- Makefile
-
-#
-# Common AltOS sources
-#
-# ao_hmc5883.c
-
-#PROFILE=ao_profile.c
-#PROFILE_DEF=-DAO_PROFILE=1
-
-#SAMPLE_PROFILE=ao_sample_profile.c \
-# ao_sample_profile_timer.c
-#SAMPLE_PROFILE_DEF=-DHAS_SAMPLE_PROFILE=1
-
-#STACK_GUARD=ao_mpu_stm.c
-#STACK_GUARD_DEF=-DHAS_STACK_GUARD=1
-
-ALTOS_SRC = \
- ao_interrupt.c \
- ao_product.c \
- ao_romconfig.c \
- ao_cmd.c \
- ao_config.c \
- ao_task.c \
- ao_led.c \
- ao_stdio.c \
- ao_panic.c \
- ao_timer.c \
- ao_mutex.c \
- ao_serial_stm.c \
- ao_gps_skytraq.c \
- ao_gps_report_mega.c \
- ao_ignite.c \
- ao_freq.c \
- ao_dma_stm.c \
- ao_spi_stm.c \
- ao_cc1120.c \
- ao_fec_tx.c \
- ao_fec_rx.c \
- ao_data.c \
- ao_ms5607.c \
- ao_mma655x.c \
- ao_hmc5883.c \
- ao_adc_stm.c \
- ao_beep_stm.c \
- ao_storage.c \
- ao_m25.c \
- ao_usb_stm.c \
- ao_exti_stm.c \
- ao_report.c \
- ao_i2c_stm.c \
- ao_mpu6000.c \
- ao_convert_pa.c \
- ao_log.c \
- ao_log_mega.c \
- ao_sample.c \
- ao_kalman.c \
- ao_flight.c \
- ao_telemetry.c \
- ao_packet_slave.c \
- ao_packet.c \
- ao_companion.c \
- ao_pyro.c \
- ao_aprs.c \
- $(PROFILE) \
- $(SAMPLE_PROFILE) \
- $(STACK_GUARD)
-
-PRODUCT=MegaMetrum-v0.1
-PRODUCT_DEF=-DMEGAMETRUM
-IDPRODUCT=0x0023
-
-CFLAGS = $(PRODUCT_DEF) $(STM_CFLAGS) $(PROFILE_DEF) $(SAMPLE_PROFILE_DEF) $(STACK_GUARD_DEF) -Os -g
-
-PROGNAME=megametrum-v0.1
-PROG=$(PROGNAME)-$(VERSION).elf
-
-SRC=$(ALTOS_SRC) ao_megametrum.c
-OBJ=$(SRC:.c=.o)
-
-all: $(PROG)
-
-$(PROG): Makefile $(OBJ) altos.ld
- $(call quiet,CC) $(LDFLAGS) $(CFLAGS) -o $(PROG) $(OBJ) $(SAT_CLIB) -lgcc
-
-../altitude-pa.h: make-altitude-pa
- nickle $< > $@
-
-$(OBJ): $(INC)
-
-ao_product.h: ao-make-product.5c ../Version
- $(call quiet,NICKLE,$<) $< -m altusmetrum.org -i $(IDPRODUCT) -p $(PRODUCT) -v $(VERSION) > $@
-
-distclean: clean
-
-clean:
- rm -f *.o $(PROGNAME)-*.elf
- rm -f ao_product.h
-
-install:
-
-uninstall:
+++ /dev/null
-/*
- * Copyright © 2011 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-#include <ao.h>
-#include <ao_hmc5883.h>
-#include <ao_mpu6000.h>
-#include <ao_mma655x.h>
-#include <ao_log.h>
-#include <ao_exti.h>
-#include <ao_packet.h>
-#include <ao_companion.h>
-#include <ao_profile.h>
-#if HAS_SAMPLE_PROFILE
-#include <ao_sample_profile.h>
-#endif
-#include <ao_pyro.h>
-#if HAS_STACK_GUARD
-#include <ao_mpu.h>
-#endif
-
-int
-main(void)
-{
- ao_clock_init();
-
-#if HAS_STACK_GUARD
- ao_mpu_init();
-#endif
-
- ao_task_init();
- ao_serial_init();
- ao_led_init(LEDS_AVAILABLE);
- ao_led_on(AO_LED_GREEN);
- ao_timer_init();
-
- ao_i2c_init();
- ao_spi_init();
- ao_dma_init();
- ao_exti_init();
-
- ao_adc_init();
-#if HAS_BEEP
- ao_beep_init();
-#endif
- ao_cmd_init();
-
-#if HAS_MS5607
- ao_ms5607_init();
-#endif
-#if HAS_HMC5883
- ao_hmc5883_init();
-#endif
-#if HAS_MPU6000
- ao_mpu6000_init();
-#endif
-#if HAS_MMA655X
- ao_mma655x_init();
-#endif
-
- ao_storage_init();
-
- ao_flight_init();
- ao_log_init();
- ao_report_init();
-
- ao_usb_init();
- ao_gps_init();
- ao_gps_report_mega_init();
- ao_telemetry_init();
- ao_radio_init();
- ao_packet_slave_init(FALSE);
- ao_igniter_init();
- ao_companion_init();
- ao_pyro_init();
-
- ao_config_init();
-#if AO_PROFILE
- ao_profile_init();
-#endif
-#if HAS_SAMPLE_PROFILE
- ao_sample_profile_init();
-#endif
-
- ao_start_scheduler();
- return 0;
-}
+++ /dev/null
-/*
- * Copyright © 2012 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-#ifndef _AO_PINS_H_
-#define _AO_PINS_H_
-
-#define HAS_TASK_QUEUE 1
-
-/* 8MHz High speed external crystal */
-#define AO_HSE 8000000
-
-/* PLLVCO = 96MHz (so that USB will work) */
-#define AO_PLLMUL 12
-#define AO_RCC_CFGR_PLLMUL (STM_RCC_CFGR_PLLMUL_12)
-
-/* SYSCLK = 32MHz (no need to go faster than CPU) */
-#define AO_PLLDIV 3
-#define AO_RCC_CFGR_PLLDIV (STM_RCC_CFGR_PLLDIV_3)
-
-/* HCLK = 32MHz (CPU clock) */
-#define AO_AHB_PRESCALER 1
-#define AO_RCC_CFGR_HPRE_DIV STM_RCC_CFGR_HPRE_DIV_1
-
-/* Run APB1 at 16MHz (HCLK/2) */
-#define AO_APB1_PRESCALER 2
-#define AO_RCC_CFGR_PPRE1_DIV STM_RCC_CFGR_PPRE2_DIV_2
-
-/* Run APB2 at 16MHz (HCLK/2) */
-#define AO_APB2_PRESCALER 2
-#define AO_RCC_CFGR_PPRE2_DIV STM_RCC_CFGR_PPRE2_DIV_2
-
-#define HAS_SERIAL_1 1
-#define USE_SERIAL_1_STDIN 0
-#define SERIAL_1_PB6_PB7 0
-#define SERIAL_1_PA9_PA10 1
-
-#define HAS_SERIAL_2 0
-#define USE_SERIAL_2_STDIN 0
-#define SERIAL_2_PA2_PA3 0
-#define SERIAL_2_PD5_PD6 0
-
-#define HAS_SERIAL_3 1
-#define USE_SERIAL_3_STDIN 0
-#define SERIAL_3_PB10_PB11 0
-#define SERIAL_3_PC10_PC11 1
-#define SERIAL_3_PD8_PD9 0
-
-#define ao_gps_getchar ao_serial3_getchar
-#define ao_gps_putchar ao_serial3_putchar
-#define ao_gps_set_speed ao_serial3_set_speed
-#define ao_gps_fifo (ao_stm_usart3.rx_fifo)
-
-#define HAS_EEPROM 1
-#define USE_INTERNAL_FLASH 0
-#define HAS_USB 1
-#define HAS_BEEP 1
-#define HAS_RADIO 1
-#define HAS_TELEMETRY 1
-#define HAS_APRS 1
-
-#define HAS_SPI_1 1
-#define SPI_1_PA5_PA6_PA7 1 /* Barometer */
-#define SPI_1_PB3_PB4_PB5 0
-#define SPI_1_PE13_PE14_PE15 1 /* Accelerometer */
-#define SPI_1_OSPEEDR STM_OSPEEDR_10MHz
-
-#define HAS_SPI_2 1
-#define SPI_2_PB13_PB14_PB15 1 /* Flash, Companion */
-#define SPI_2_PD1_PD3_PD4 0
-#define SPI_2_OSPEEDR STM_OSPEEDR_10MHz
-
-#define SPI_2_PORT (&stm_gpiob)
-#define SPI_2_SCK_PIN 13
-#define SPI_2_MISO_PIN 14
-#define SPI_2_MOSI_PIN 15
-
-#define HAS_I2C_1 1
-#define I2C_1_PB8_PB9 1
-
-#define HAS_I2C_2 1
-#define I2C_2_PB10_PB11 1
-
-#define PACKET_HAS_SLAVE 1
-#define PACKET_HAS_MASTER 0
-
-#define LOW_LEVEL_DEBUG 0
-
-#define LED_PORT_ENABLE STM_RCC_AHBENR_GPIOCEN
-#define LED_PORT (&stm_gpioc)
-#define LED_PIN_RED 8
-#define LED_PIN_GREEN 9
-#define AO_LED_RED (1 << LED_PIN_RED)
-#define AO_LED_GREEN (1 << LED_PIN_GREEN)
-
-#define LEDS_AVAILABLE (AO_LED_RED | AO_LED_GREEN)
-
-#define HAS_GPS 1
-#define HAS_FLIGHT 1
-#define HAS_ADC 1
-#define HAS_LOG 1
-
-/*
- * Igniter
- */
-
-#define HAS_IGNITE 1
-#define HAS_IGNITE_REPORT 1
-
-#define AO_SENSE_DROGUE(p) ((p)->adc.sense[0])
-#define AO_SENSE_MAIN(p) ((p)->adc.sense[1])
-#define AO_IGNITER_CLOSED 400
-#define AO_IGNITER_OPEN 60
-
-#define AO_IGNITER_DROGUE_PORT (&stm_gpiod)
-#define AO_IGNITER_DROGUE_PIN 6
-
-#define AO_IGNITER_MAIN_PORT (&stm_gpiod)
-#define AO_IGNITER_MAIN_PIN 7
-
-#define AO_PYRO_PORT_0 (&stm_gpiob)
-#define AO_PYRO_PIN_0 5
-
-#define AO_PYRO_PORT_1 (&stm_gpioe)
-#define AO_PYRO_PIN_1 4
-
-#define AO_PYRO_PORT_2 (&stm_gpioe)
-#define AO_PYRO_PIN_2 6
-
-#define AO_PYRO_PORT_3 (&stm_gpioe)
-#define AO_PYRO_PIN_3 5
-
-/* Number of general purpose pyro channels available */
-#define AO_PYRO_NUM 4
-
-#define AO_IGNITER_SET_DROGUE(v) stm_gpio_set(AO_IGNITER_DROGUE_PORT, AO_IGNITER_DROGUE_PIN, v)
-#define AO_IGNITER_SET_MAIN(v) stm_gpio_set(AO_IGNITER_MAIN_PORT, AO_IGNITER_MAIN_PIN, v)
-
-/*
- * ADC
- */
-#define AO_DATA_RING 32
-#define AO_ADC_NUM_SENSE 6
-
-struct ao_adc {
- int16_t sense[AO_ADC_NUM_SENSE];
- int16_t v_batt;
- int16_t v_pbatt;
- int16_t accel_ref;
- int16_t accel;
- int16_t temp;
-};
-
-#define AO_ADC_SENSE_A 0
-#define AO_ADC_SENSE_A_PORT (&stm_gpioa)
-#define AO_ADC_SENSE_A_PIN 0
-
-#define AO_ADC_SENSE_B 1
-#define AO_ADC_SENSE_B_PORT (&stm_gpioa)
-#define AO_ADC_SENSE_B_PIN 1
-
-#define AO_ADC_SENSE_C 2
-#define AO_ADC_SENSE_C_PORT (&stm_gpioa)
-#define AO_ADC_SENSE_C_PIN 2
-
-#define AO_ADC_SENSE_D 3
-#define AO_ADC_SENSE_D_PORT (&stm_gpioa)
-#define AO_ADC_SENSE_D_PIN 3
-
-#define AO_ADC_SENSE_E 4
-#define AO_ADC_SENSE_E_PORT (&stm_gpioa)
-#define AO_ADC_SENSE_E_PIN 4
-
-#define AO_ADC_SENSE_F 22
-#define AO_ADC_SENSE_F_PORT (&stm_gpioe)
-#define AO_ADC_SENSE_F_PIN 7
-
-#define AO_ADC_V_BATT 8
-#define AO_ADC_V_BATT_PORT (&stm_gpiob)
-#define AO_ADC_V_BATT_PIN 0
-
-#define AO_ADC_V_PBATT 9
-#define AO_ADC_V_PBATT_PORT (&stm_gpiob)
-#define AO_ADC_V_PBATT_PIN 1
-
-#define AO_ADC_ACCEL_REF 10
-#define AO_ADC_ACCEL_REF_PORT (&stm_gpioc)
-#define AO_ADC_ACCEL_REF_PIN 0
-
-#define AO_ADC_ACCEL 11
-#define AO_ADC_ACCEL_PORT (&stm_gpioc)
-#define AO_ADC_ACCEL_PIN 1
-
-#define AO_ADC_TEMP 16
-
-#define AO_ADC_RCC_AHBENR ((1 << STM_RCC_AHBENR_GPIOAEN) | \
- (1 << STM_RCC_AHBENR_GPIOEEN) | \
- (1 << STM_RCC_AHBENR_GPIOBEN) | \
- (1 << STM_RCC_AHBENR_GPIOCEN))
-
-#define AO_NUM_ADC_PIN (AO_ADC_NUM_SENSE + 4)
-
-#define AO_ADC_PIN0_PORT AO_ADC_SENSE_A_PORT
-#define AO_ADC_PIN0_PIN AO_ADC_SENSE_A_PIN
-#define AO_ADC_PIN1_PORT AO_ADC_SENSE_B_PORT
-#define AO_ADC_PIN1_PIN AO_ADC_SENSE_B_PIN
-#define AO_ADC_PIN2_PORT AO_ADC_SENSE_C_PORT
-#define AO_ADC_PIN2_PIN AO_ADC_SENSE_C_PIN
-#define AO_ADC_PIN3_PORT AO_ADC_SENSE_D_PORT
-#define AO_ADC_PIN3_PIN AO_ADC_SENSE_D_PIN
-#define AO_ADC_PIN4_PORT AO_ADC_SENSE_E_PORT
-#define AO_ADC_PIN4_PIN AO_ADC_SENSE_E_PIN
-#define AO_ADC_PIN5_PORT AO_ADC_SENSE_F_PORT
-#define AO_ADC_PIN5_PIN AO_ADC_SENSE_F_PIN
-#define AO_ADC_PIN6_PORT AO_ADC_V_BATT_PORT
-#define AO_ADC_PIN6_PIN AO_ADC_V_BATT_PIN
-#define AO_ADC_PIN7_PORT AO_ADC_V_PBATT_PORT
-#define AO_ADC_PIN7_PIN AO_ADC_V_PBATT_PIN
-#define AO_ADC_PIN8_PORT AO_ADC_ACCEL_REF_PORT
-#define AO_ADC_PIN8_PIN AO_ADC_ACCEL_REF_PIN
-#define AO_ADC_PIN9_PORT AO_ADC_ACCEL_PORT
-#define AO_ADC_PIN9_PIN AO_ADC_ACCEL_PIN
-
-#define AO_NUM_ADC (AO_ADC_NUM_SENSE + 5)
-
-#define AO_ADC_SQ1 AO_ADC_SENSE_A
-#define AO_ADC_SQ2 AO_ADC_SENSE_B
-#define AO_ADC_SQ3 AO_ADC_SENSE_C
-#define AO_ADC_SQ4 AO_ADC_SENSE_D
-#define AO_ADC_SQ5 AO_ADC_SENSE_E
-#define AO_ADC_SQ6 AO_ADC_SENSE_F
-#define AO_ADC_SQ7 AO_ADC_V_BATT
-#define AO_ADC_SQ8 AO_ADC_V_PBATT
-#define AO_ADC_SQ9 AO_ADC_ACCEL_REF
-#define AO_ADC_SQ10 AO_ADC_ACCEL
-#define AO_ADC_SQ11 AO_ADC_TEMP
-
-/*
- * Pressure sensor settings
- */
-#define HAS_MS5607 1
-#define HAS_MS5611 0
-#define AO_MS5607_PRIVATE_PINS 1
-#define AO_MS5607_CS_PORT (&stm_gpioc)
-#define AO_MS5607_CS_PIN 4
-#define AO_MS5607_CS_MASK (1 << AO_MS5607_CS)
-#define AO_MS5607_MISO_PORT (&stm_gpioa)
-#define AO_MS5607_MISO_PIN 6
-#define AO_MS5607_MISO_MASK (1 << AO_MS5607_MISO)
-#define AO_MS5607_SPI_INDEX AO_SPI_1_PA5_PA6_PA7
-
-/*
- * SPI Flash memory
- */
-
-#define M25_MAX_CHIPS 1
-#define AO_M25_SPI_CS_PORT (&stm_gpiod)
-#define AO_M25_SPI_CS_MASK (1 << 3)
-#define AO_M25_SPI_BUS AO_SPI_2_PB13_PB14_PB15
-
-/*
- * Radio (cc1120)
- */
-
-/* gets pretty close to 434.550 */
-
-#define AO_RADIO_CAL_DEFAULT 0x6ca333
-
-#define AO_FEC_DEBUG 0
-#define AO_CC1120_SPI_CS_PORT (&stm_gpioc)
-#define AO_CC1120_SPI_CS_PIN 5
-#define AO_CC1120_SPI_BUS AO_SPI_2_PB13_PB14_PB15
-#define AO_CC1120_SPI stm_spi2
-
-#define AO_CC1120_INT_PORT (&stm_gpioc)
-#define AO_CC1120_INT_PIN 14
-#define AO_CC1120_MCU_WAKEUP_PORT (&stm_gpioc)
-#define AO_CC1120_MCU_WAKEUP_PIN (0)
-
-#define AO_CC1120_INT_GPIO 2
-#define AO_CC1120_INT_GPIO_IOCFG CC1120_IOCFG2
-
-#define AO_CC1120_MARC_GPIO 3
-#define AO_CC1120_MARC_GPIO_IOCFG CC1120_IOCFG3
-
-
-#define HAS_BOOT_RADIO 0
-
-/*
- * Mag sensor (hmc5883)
- */
-
-#define HAS_HMC5883 0
-#define AO_HMC5883_INT_PORT (&stm_gpioc)
-#define AO_HMC5883_INT_PIN 12
-#define AO_HMC5883_I2C_INDEX STM_I2C_INDEX(1)
-
-/*
- * mpu6000
- */
-
-#define HAS_MPU6000 1
-#define AO_MPU6000_INT_PORT (&stm_gpioc)
-#define AO_MPU6000_INT_PIN 13
-#define AO_MPU6000_I2C_INDEX STM_I2C_INDEX(1)
-
-#define HAS_HIGHG_ACCEL 0
-
-/*
- * mma655x
- */
-
-#define HAS_MMA655X 1
-#define AO_MMA655X_SPI_INDEX AO_SPI_1_PE13_PE14_PE15
-#define AO_MMA655X_CS_PORT (&stm_gpiod)
-#define AO_MMA655X_CS_PIN 4
-
-#define NUM_CMDS 16
-
-/*
- * Companion
- */
-
-#define AO_COMPANION_CS_PORT (&stm_gpiod)
-#define AO_COMPANION_CS_PIN (0)
-#define AO_COMPANION_SPI_BUS AO_SPI_2_PB13_PB14_PB15
-
-/*
- * Monitor
- */
-
-#define HAS_MONITOR 0
-#define LEGACY_MONITOR 0
-#define HAS_MONITOR_PUT 1
-#define AO_MONITOR_LED 0
-#define HAS_RSSI 0
-
-/*
- * Profiling Viterbi decoding
- */
-
-#ifndef AO_PROFILE
-#define AO_PROFILE 0
-#endif
-
-#endif /* _AO_PINS_H_ */
+++ /dev/null
-ST discovery card pins
-
-1 AIN-1
-2 JTCK
-3 GND
-4 JTMS
-5 NRST
-6 SWO
-
-MegaMetrum v0.1 misc connector
-
-1 GND
-2 reset_n
-3 boot0
-4 tx1
-5 rx1
-6 +3.3V
-7 GND
-8 jtms
-9 jtck
-10 jtdi
-11 jtdo
-12 jntrst
-13 sda2
-14 scl2
-15 pe1
-16 pe0
-
-For debugging:
-
- ST MM v0.1
-JTCK 2 9
-GND 3 7
-JTMS 4 8
-NRST 5 2
-
-Altus Metrum STM32L standard debug connector (4 pin MicoMaTch):
-
- TL ST
-GND 1 3
-NRST 2 5
-SWDIO 3 4
-SWCLK 4 2
-
-Altus Metrum standard 4-pin connector to MegaMetrum v0.1 misc connector:
-
- AMstd MM v0.1
-gnd 1 1
-nrst 2 2
-swdio 3 8
-swclk 4 9
-
-MegaAccel:
-
-Jumpers
-PC0 (pin15) (blue) PE0 (pin97) accel_ref (debug 16)
-PC1 (pin16) (green) PE1 (pin98) accel (debug 15)
uint8_t ao_i2c_mutex[STM_NUM_I2C];
# define I2C_HIGH_SLOW 5000 /* ns, 100kHz clock */
-#ifdef MEGAMETRUM
+#ifdef TELEMEGA
# define I2C_HIGH_FAST 2000 /* ns, 167kHz clock */
#else
# define I2C_HIGH_FAST 1000 /* ns, 333kHz clock */
ao_radio_cmac_cmd.c
PRODUCT=TeleLCO-v0.1
-PRODUCT_DEF=-DMEGAMETRUM
+PRODUCT_DEF=-DTELEMEGA
IDPRODUCT=0x0023
CFLAGS = $(PRODUCT_DEF) $(STM_CFLAGS) $(PROFILE_DEF) -Os -g
cc $(CFLAGS) -o $@ -DFORCE_ACCEL=1 ao_flight_test.c
ao_flight_test_mm: ao_flight_test.c ao_host.h ao_flight.c ao_sample.c ao_kalman.c $(INCS)
- cc -DMEGAMETRUM=1 $(CFLAGS) -o $@ $< -lm
+ cc -DTELEMEGA=1 $(CFLAGS) -o $@ $< -lm
ao_gps_test: ao_gps_test.c ao_gps_sirf.c ao_gps_print.c ao_host.h
cc $(CFLAGS) -o $@ $<
#define AO_MS_TO_SPEED(ms) ((int16_t) ((ms) * 16))
#define AO_MSS_TO_ACCEL(mss) ((int16_t) ((mss) * 16))
-#if MEGAMETRUM
+#if TELEMEGA
#define AO_ADC_NUM_SENSE 6
#define HAS_MS5607 1
#define HAS_MPU6000 1
#define ao_xmemcmp(d,s,c) memcmp(d,s,c)
#define AO_NEED_ALTITUDE_TO_PRES 1
-#if MEGAMETRUM
+#if TELEMEGA
#include "ao_convert_pa.c"
#include <ao_ms5607.h>
struct ao_ms5607_prom ms5607_prom;
#else
double accel = 0.0;
#endif
-#if MEGAMETRUM
+#if TELEMEGA
double height;
ao_ms5607_convert(&ao_data_static.ms5607_raw, &ao_data_static.ms5607_cooked);
if (!ao_summary) {
printf("%7.2f height %8.2f accel %8.3f "
-#if MEGAMETRUM
+#if TELEMEGA
"roll %8.3f angle %8.3f qangle %8.3f "
"accel_x %8.3f accel_y %8.3f accel_z %8.3f gyro_x %8.3f gyro_y %8.3f gyro_z %8.3f "
#endif
time,
height,
accel,
-#if MEGAMETRUM
+#if TELEMEGA
ao_mpu6000_gyro(ao_sample_roll_angle) / 100.0,
ao_mpu6000_gyro(ao_sample_angle) / 100.0,
ao_sample_qangle,
static int log_format;
-#if MEGAMETRUM
+#if TELEMEGA
static double
ao_vec_norm(double x, double y, double z)
for (;;) {
if (ao_records_read > 2 && ao_flight_state == ao_flight_startup)
{
-#if MEGAMETRUM
+#if TELEMEGA
ao_data_static.mpu6000 = ao_ground_mpu6000;
#else
ao_data_static.adc.accel = ao_flight_ground_accel;
if (words[nword] == NULL)
break;
}
-#if MEGAMETRUM
- if (log_format == AO_LOG_FORMAT_MEGAMETRUM && nword == 30 && strlen(words[0]) == 1) {
+#if TELEMEGA
+ if (log_format == AO_LOG_FORMAT_TELEMEGA && nword == 30 && strlen(words[0]) == 1) {
int i;
struct ao_ms5607_value value;
continue;
}
#else
- if (nword == 4 && log_format != AO_LOG_FORMAT_MEGAMETRUM) {
+ if (nword == 4 && log_format != AO_LOG_FORMAT_TELEMEGA) {
type = words[0][0];
tick = strtoul(words[1], NULL, 16);
a = strtoul(words[2], NULL, 16);
if (type != 'F' && !ao_flight_started)
continue;
-#if MEGAMETRUM
+#if TELEMEGA
(void) a;
(void) b;
#else
%TeleScience% = AltusMetrum.Install, USB\VID_FFFE&PID_0011, AltusMetrumSerial\r
%TelePyro% = AltusMetrum.Install, USB\VID_FFFE&PID_0012, AltusMetrumSerial\r
%TeleShield% = AltusMetrum.Install, USB\VID_FFFE&PID_0013, AltusMetrumSerial\r
-%MegaMetrum% = AltusMetrum.Install, USB\VID_FFFE&PID_0023, AltusMetrumSerial\r
+%TeleMega% = AltusMetrum.Install, USB\VID_FFFE&PID_0023, AltusMetrumSerial\r
%MegaDongle = AltusMetrum.Install, USB\VID_FFFE&PID_0024, AltusMetrumSerial\r
%TeleGPS% = AltusMetrum.Install, USB\VID_FFFE&PID_0025, AltusMetrumSerial\r
%AltusMetrum26% = AltusMetrum.Install, USB\VID_FFFE&PID_0026, AltusMetrumSerial\r
%TeleScience% = AltusMetrum.Install, USB\VID_FFFE&PID_0011, AltusMetrumSerial\r
%TelePyro% = AltusMetrum.Install, USB\VID_FFFE&PID_0012, AltusMetrumSerial\r
%TeleShield% = AltusMetrum.Install, USB\VID_FFFE&PID_0013, AltusMetrumSerial\r
-%MegaMetrum% = AltusMetrum.Install, USB\VID_FFFE&PID_0023, AltusMetrumSerial\r
+%TeleMega% = AltusMetrum.Install, USB\VID_FFFE&PID_0023, AltusMetrumSerial\r
%MegaDongle = AltusMetrum.Install, USB\VID_FFFE&PID_0024, AltusMetrumSerial\r
%TeleGPS% = AltusMetrum.Install, USB\VID_FFFE&PID_0025, AltusMetrumSerial\r
%AltusMetrum26% = AltusMetrum.Install, USB\VID_FFFE&PID_0026, AltusMetrumSerial\r
%TeleScience% = AltusMetrum.Install, USB\VID_FFFE&PID_0011, AltusMetrumSerial\r
%TelePyro% = AltusMetrum.Install, USB\VID_FFFE&PID_0012, AltusMetrumSerial\r
%TeleShield% = AltusMetrum.Install, USB\VID_FFFE&PID_0013, AltusMetrumSerial\r
-%MegaMetrum% = AltusMetrum.Install, USB\VID_FFFE&PID_0023, AltusMetrumSerial\r
+%TeleMega% = AltusMetrum.Install, USB\VID_FFFE&PID_0023, AltusMetrumSerial\r
%MegaDongle = AltusMetrum.Install, USB\VID_FFFE&PID_0024, AltusMetrumSerial\r
%TeleGPS% = AltusMetrum.Install, USB\VID_FFFE&PID_0025, AltusMetrumSerial\r
%AltusMetrum26% = AltusMetrum.Install, USB\VID_FFFE&PID_0026, AltusMetrumSerial\r
%TeleScience% = AltusMetrum.Install, USB\VID_FFFE&PID_0011, AltusMetrumSerial\r
%TelePyro% = AltusMetrum.Install, USB\VID_FFFE&PID_0012, AltusMetrumSerial\r
%TeleShield% = AltusMetrum.Install, USB\VID_FFFE&PID_0013, AltusMetrumSerial\r
-%MegaMetrum% = AltusMetrum.Install, USB\VID_FFFE&PID_0023, AltusMetrumSerial\r
+%TeleMega% = AltusMetrum.Install, USB\VID_FFFE&PID_0023, AltusMetrumSerial\r
%MegaDongle = AltusMetrum.Install, USB\VID_FFFE&PID_0024, AltusMetrumSerial\r
%TeleGPS% = AltusMetrum.Install, USB\VID_FFFE&PID_0025, AltusMetrumSerial\r
%AltusMetrum26% = AltusMetrum.Install, USB\VID_FFFE&PID_0026, AltusMetrumSerial\r