summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-10-09 22:48:29 -0700
committerKeith Packard <keithp@keithp.com>2009-10-09 22:48:29 -0700
commit2f7603490a169df8f18b565db4fa967832ffc9bd (patch)
tree3f18dfe786fcff179cfc4ae39d930133134f76df
parent33b0b6f2f2e07de105619a7b463226d2813152ab (diff)
Build two versions of TM, one for SiRF, one for SkyTraq
This creates two separate images, depending on which GPS unit is connected. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--.gitignore4
-rw-r--r--src/Makefile41
-rw-r--r--src/ao_teleterra.c1
-rw-r--r--src/skytraq-cksum44
4 files changed, 81 insertions, 9 deletions
diff --git a/.gitignore b/.gitignore
index 0ca4bed4..a6f94439 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,7 @@ TAGS
aclocal.m4
src/ao_flight_test
src/ao_gps_test
+src/ao_gps_test_skytraq
ao-teledongle.h
ao-telemetrum.h
ao-teleterra.h
@@ -47,6 +48,7 @@ missing
stamp-h1
tags
teledongle
-telemetrum
+telemetrum-sirf
+telemetrum-sky
teleterra
tidongle
diff --git a/src/Makefile b/src/Makefile
index 892635cb..9891cdad 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -59,7 +59,6 @@ TELE_RECEIVER_SRC =\
TELE_DRIVER_SRC = \
ao_convert.c \
- ao_gps_skytraq.c \
ao_serial.c
#
@@ -85,6 +84,17 @@ TM_DRIVER_SRC = \
ao_ignite.c
#
+# Drivers only on TeleMetrum
+#
+TM_SIRF_DRIVER_SRC = \
+ ao_gps_sirf.c
+#
+# Drivers only on TeleMetrum
+#
+TM_SKY_DRIVER_SRC = \
+ ao_gps_skytraq.c
+
+#
# Tasks run on TeleMetrum
#
TM_TASK_SRC = \
@@ -108,6 +118,14 @@ TM_SRC = \
$(TM_TASK_SRC) \
$(TM_MAIN_SRC)
+TM_SIRF_SRC = \
+ $(TM_SRC) \
+ $(TM_SIRF_DRIVER_SRC)
+
+TM_SKY_SRC = \
+ $(TM_SRC) \
+ $(TM_SKY_DRIVER_SRC)
+
TI_MAIN_SRC = \
ao_tidongle.c
@@ -161,13 +179,16 @@ SRC = \
$(TELE_COMMON_SRC) \
$(TELE_FAKE_SRC) \
$(TM_DRIVER_SRC) \
+ $(TM_SIRF_DRIVER_SRC) \
+ $(TM_SKY_DRIVER_SRC) \
$(TM_TASK_SRC) \
$(TM_MAIN_SRC) \
$(TI_MAIN_SRC) \
$(TD_MAIN_SRC) \
$(TT_MAIN_SRC)
-TM_REL=$(TM_SRC:.c=.rel) ao_product-telemetrum.rel
+TM_SIRF_REL=$(TM_SIRF_SRC:.c=.rel) ao_product-telemetrum.rel
+TM_SKY_REL=$(TM_SKY_SRC:.c=.rel) ao_product-telemetrum.rel
TI_REL=$(TI_SRC:.c=.rel) ao_product-tidongle.rel
TT_REL=$(TT_SRC:.c=.rel) ao_product-teleterra.rel
TD_REL=$(TD_SRC:.c=.rel) ao_product-teledongle.rel
@@ -186,7 +207,7 @@ LST=$(REL:.rel=.lst)
RST=$(REL:.rel=.rst)
SYM=$(REL:.rel=.sym)
-PROGS= telemetrum.ihx tidongle.ihx \
+PROGS= telemetrum-sirf.ihx telemetrum-sky.ihx tidongle.ihx \
teleterra.ihx teledongle.ihx
HOST_PROGS=ao_flight_test ao_gps_test ao_gps_test_skytraq
@@ -202,15 +223,21 @@ PAOM=$(PROGS:.ihx=)
all: $(PROGS) $(HOST_PROGS)
-telemetrum.ihx: $(TM_REL) Makefile
- $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $(TM_REL)
- sh check-stack ao.h telemetrum.mem
+telemetrum-sirf.ihx: $(TM_SIRF_REL) Makefile
+ $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $(TM_SIRF_REL)
+ sh check-stack ao.h telemetrum-sirf.mem
+
+telemetrum-sky.ihx: $(TM_SKY_REL) Makefile
+ $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $(TM_SKY_REL)
+ sh check-stack ao.h telemetrum-sky.mem
+
+telemetrum-sky.ihx: telemetrum-sirf.ihx
tidongle.ihx: $(TI_REL) Makefile
$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $(TI_REL)
sh check-stack ao.h tidongle.mem
-tidongle.ihx: telemetrum.ihx
+tidongle.ihx: telemetrum-sky.ihx
teleterra.ihx: $(TT_REL) Makefile
$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $(TT_REL)
diff --git a/src/ao_teleterra.c b/src/ao_teleterra.c
index deb63597..d696b914 100644
--- a/src/ao_teleterra.c
+++ b/src/ao_teleterra.c
@@ -31,7 +31,6 @@ main(void)
ao_cmd_init();
ao_usb_init();
ao_serial_init();
- ao_gps_init();
ao_monitor_init(AO_LED_GREEN, TRUE);
ao_radio_init();
ao_config_init();
diff --git a/src/skytraq-cksum b/src/skytraq-cksum
new file mode 100644
index 00000000..e4960bff
--- /dev/null
+++ b/src/skytraq-cksum
@@ -0,0 +1,44 @@
+#!/usr/bin/env nickle
+
+int checksum(int[] msg)
+{
+ int sum = 0;
+ for (int i = 0; i < dim(msg); i++) {
+ sum ^= msg[i];
+ sum &= 0xff;
+ }
+ return sum;
+}
+
+void main()
+{
+ string[...] input;
+ int[...] msg;
+
+ setdim(input, 0);
+ while (!File::end(stdin)) {
+ input[dim(input)] = gets();
+ }
+
+ setdim(msg, 0);
+ for (int i = 0; i < dim(input); i++) {
+ string[*] words = String::wordsplit(input[i], " ,\t");
+ for (int j = 0; j < dim(words); j++) {
+ if (words[j] == "/" + "*")
+ break;
+ if (String::length(words[j]) > 0 &&
+ Ctype::isdigit(words[j][0])) {
+ msg[dim(msg)] = string_to_integer(words[j]);
+ }
+ }
+ }
+ printf("\t0xa0, 0xa1, 0x02x, 0x%02x,\t\t/* length: %d bytes */\n",
+ dim(msg) >> 8, dim(msg) & 0xff, dim(msg));
+ for (int i = 0; i < dim(input); i++)
+ printf("%s\n", input[i]);
+ int csum = checksum(msg);
+ printf ("\t0x%02x, 0x0d, 0x0a,\n",
+ csum);
+}
+
+main();