summaryrefslogtreecommitdiff
path: root/src/skytraq-cksum
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 /src/skytraq-cksum
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>
Diffstat (limited to 'src/skytraq-cksum')
-rw-r--r--src/skytraq-cksum44
1 files changed, 44 insertions, 0 deletions
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();