summaryrefslogtreecommitdiff
path: root/pseudoais.c
diff options
context:
space:
mode:
authorReinhard Arlt <reinhard.arlt@t-online.de>2015-02-16 15:06:20 +0100
committerReinhard Arlt <reinhard.arlt@t-online.de>2015-02-16 15:06:20 +0100
commitcba7e5ad33368e5e77ccc487e81f1f0148d32dc7 (patch)
tree5e254a47585229e3835bc045c0b0cac9cdc87358 /pseudoais.c
parent7e15f0cbf72a5710195e0d717d528c1ae9ed585e (diff)
downloadgpsd-cba7e5ad33368e5e77ccc487e81f1f0148d32dc7.tar.gz
Fix bug in type24 msg in pseudoais.c .
Diffstat (limited to 'pseudoais.c')
-rw-r--r--pseudoais.c40
1 files changed, 22 insertions, 18 deletions
diff --git a/pseudoais.c b/pseudoais.c
index eac3607b..d079e467 100644
--- a/pseudoais.c
+++ b/pseudoais.c
@@ -279,27 +279,31 @@ unsigned int ais_binary_encode(struct ais_t *ais,
}
break;
case 24: /* Class B CS Static Data Report Part 1 */
- ais_addbits(bits, 38, 2, (uint64_t)0);
- ais_addchar(bits, 40, 20, ais->type24.shipname);
-/* ais_addbits(bits, 160, 8, (uint64_t)ais->type24.a.spare); */
- len = 160;
+ if (ais->type24.part == part_a) {
+ ais_addbits(bits, 38, 2, (uint64_t)0);
+ ais_addchar(bits, 40, 20, ais->type24.shipname);
+/* ais_addbits(bits, 160, 8, (uint64_t)ais->type24.a.spare); */
+ len = 160;
+ }
break;
case 24 | AIS_MSG_PART2_FLAG: /* Class B CS Static Data Report Part 2 */
- ais_addbits(bits, 38, 2, (uint64_t)1);
- ais_addbits(bits, 40, 8, (uint64_t)ais->type24.shiptype);
- ais_addchar(bits, 48, 3, &ais->type24.vendorid[0]);
- ais_adddata(bits, 66, 3, &ais->type24.vendorid[3]);
- ais_addchar(bits, 90, 7, ais->type24.callsign);
- if (AIS_AUXILIARY_MMSI(ais->mmsi)) {
- ais_addbits(bits, 132, 30, (uint64_t)ais->type24.mothership_mmsi);
- } else {
- ais_addbits(bits, 132, 9, (uint64_t)ais->type24.dim.to_bow);
- ais_addbits(bits, 141, 9, (uint64_t)ais->type24.dim.to_stern);
- ais_addbits(bits, 150, 6, (uint64_t)ais->type24.dim.to_port);
- ais_addbits(bits, 156, 6, (uint64_t)ais->type24.dim.to_starboard);
+ if ((ais->type24.part == part_b) || (ais->type24.part == both)) {
+ ais_addbits(bits, 38, 2, (uint64_t)1);
+ ais_addbits(bits, 40, 8, (uint64_t)ais->type24.shiptype);
+ ais_addchar(bits, 48, 3, &ais->type24.vendorid[0]);
+ ais_adddata(bits, 66, 3, &ais->type24.vendorid[3]);
+ ais_addchar(bits, 90, 7, ais->type24.callsign);
+ if (AIS_AUXILIARY_MMSI(ais->mmsi)) {
+ ais_addbits(bits, 132, 30, (uint64_t)ais->type24.mothership_mmsi);
+ } else {
+ ais_addbits(bits, 132, 9, (uint64_t)ais->type24.dim.to_bow);
+ ais_addbits(bits, 141, 9, (uint64_t)ais->type24.dim.to_stern);
+ ais_addbits(bits, 150, 6, (uint64_t)ais->type24.dim.to_port);
+ ais_addbits(bits, 156, 6, (uint64_t)ais->type24.dim.to_starboard);
+ }
+/* ais_addbits(bits, 162, 6, ais->type24.b.spare); */
+ len = 162 + 6;
}
-/* ais_addbits(bits, 162, 6, ais->type24.b.spare); */
- len = 162 + 6;
break;
case 27: /* Long Range AIS Broadcast message */
ais_addbits(bits, 38, 1, (uint64_t)ais->type27.accuracy);