summaryrefslogtreecommitdiff
path: root/pseudoais.c
diff options
context:
space:
mode:
authorReinhard Arlt <reinhard.arlt@t-online.de>2013-07-22 11:51:30 +0200
committerReinhard Arlt <reinhard.arlt@t-online.de>2013-07-22 11:51:30 +0200
commitd3cb684caa9fa4080b380e4d248dd56dec97b604 (patch)
tree5638900a8debf9f58e3ae545de3adb1a3e00c4b0 /pseudoais.c
parentb8fffbe3871316d1cf892d1288fc6ddce017c038 (diff)
downloadgpsd-d3cb684caa9fa4080b380e4d248dd56dec97b604.tar.gz
Encode a few more AIVDM messages.
Diffstat (limited to 'pseudoais.c')
-rw-r--r--pseudoais.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/pseudoais.c b/pseudoais.c
index ff2c5a6d..93a6658c 100644
--- a/pseudoais.c
+++ b/pseudoais.c
@@ -64,6 +64,7 @@ static unsigned int ais_binary_to_ascii(unsigned char *bits, unsigned int len)
for (l=0;l<len;l+=6) {
bits[l/6] = convtab[bits[l/6] & 0x3f];
}
+ return 0;
}
@@ -91,19 +92,51 @@ unsigned int ais_binary_encode(struct ais_t *ais,
ais_addbits(bits, 128, 9, ais->type1.heading);
ais_addbits(bits, 137, 6, ais->type1.second);
ais_addbits(bits, 143, 2, ais->type1.maneuver);
- /* ais->type1.spare = UBITS(145, 3); */
+/* ais_addbits(bits, 145, 3, ais->type1.spare); */
ais_addbits(bits, 148, 1, ais->type1.raim);
ais_addbits(bits, 149, 19, ais->type1.radio);
len = 149 + 19;
break;
case 4: /* Base Station Report */
case 11: /* UTC/Date Response */
+ ais_addbits(bits, 38, 14, ais->type4.year);
+ ais_addbits(bits, 52, 4, ais->type4.month);
+ ais_addbits(bits, 56, 5, ais->type4.day);
+ ais_addbits(bits, 61, 5, ais->type4.hour);
+ ais_addbits(bits, 66, 6, ais->type4.minute);
+ ais_addbits(bits, 72, 6, ais->type4.second);
+ ais_addbits(bits, 78, 1, ais->type4.accuracy);
+ ais_addbits(bits, 79, 28, ais->type4.lon);
+ ais_addbits(bits, 107, 27, ais->type4.lat);
+ ais_addbits(bits, 134, 4, ais->type4.epfd);
+/* ais_addbits(bits, 138, 10, ais->type4.spare); */
+ ais_addbits(bits, 148, 1, ais->type4.raim);
+ ais_addbits(bits, 149, 19, ais->type4.radio);
+ len = 149 + 19;
break;
case 5: /* Ship static and voyage related data */
break;
case 9: /* Standard SAR Aircraft Position Report */
break;
case 18: /* Standard Class B CS Position Report */
+ ais_addbits(bits, 38, 8, ais->type18.reserved);
+ ais_addbits(bits, 46, 10, ais->type18.speed);
+ ais_addbits(bits, 56, 1, ais->type18.accuracy);
+ ais_addbits(bits, 57, 28, ais->type18.lon);
+ ais_addbits(bits, 85, 27, ais->type18.lat);
+ ais_addbits(bits, 112, 12, ais->type18.course);
+ ais_addbits(bits, 124, 9, ais->type18.heading);
+ ais_addbits(bits, 133, 6, ais->type18.second);
+ ais_addbits(bits, 139, 2, ais->type18.regional);
+ ais_addbits(bits, 141, 1, ais->type18.cs);
+ ais_addbits(bits, 142, 1, ais->type18.display);
+ ais_addbits(bits, 143, 1, ais->type18.dsc);
+ ais_addbits(bits, 144, 1, ais->type18.band);
+ ais_addbits(bits, 145, 1, ais->type18.msg22);
+ ais_addbits(bits, 146, 1, ais->type18.assigned);
+ ais_addbits(bits, 147, 1, ais->type18.raim);
+ ais_addbits(bits, 148, 20, ais->type18.radio);
+ len = 148 + 20;
break;
case 19: /* Extended Class B CS Position Report */
break;