summaryrefslogtreecommitdiff
path: root/driver_ais.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2013-10-01 07:28:34 -0400
committerEric S. Raymond <esr@thyrsus.com>2013-10-01 07:28:34 -0400
commit8f990b3bc6dcdb62d6cae285fd61b64efdb20500 (patch)
tree9897b21033d7abbce2768dec8e1f88d5ae6cb9b4 /driver_ais.c
parent10374a53fcef50b599ab83848df3eb61b0fb7df4 (diff)
downloadgpsd-8f990b3bc6dcdb62d6cae285fd61b64efdb20500.tar.gz
Support for Inland AIS ETA at lock/bridge/terminal.
Diffstat (limited to 'driver_ais.c')
-rw-r--r--driver_ais.c40
1 files changed, 31 insertions, 9 deletions
diff --git a/driver_ais.c b/driver_ais.c
index b2131169..247283c5 100644
--- a/driver_ais.c
+++ b/driver_ais.c
@@ -175,20 +175,42 @@ bool ais_binary_decode(const int debug,
ais->type6.fid = UBITS(82, 6);
ais->type6.bitcount = bitlen - 88;
imo = false;
+ /* Inland AIS */
+ if (ais->type6.dac == 200) {
+ switch (ais->type6.fid) {
+ case 21: /* ETA at lock/bridge/terminal */
+ UCHARS(88, ais->type6.dac200fid21.country);
+ UCHARS(100, ais->type6.dac200fid21.locode);
+ UCHARS(118, ais->type6.dac200fid21.section);
+ UCHARS(148, ais->type6.dac200fid21.terminal);
+ UCHARS(178, ais->type6.dac200fid21.hectometre);
+ ais->type6.dac200fid21.month = UBITS(208, 4);
+ ais->type6.dac200fid21.day = UBITS(212, 5);
+ ais->type6.dac200fid21.hour = UBITS(217, 5);
+ ais->type6.dac200fid21.minute = UBITS(222, 6);
+ ais->type6.dac200fid21.tugs = UBITS(228, 3);
+ ais->type6.dac200fid21.airdraught = UBITS(231, 12);
+ /* skip 5 bits */
+ imo = true;
+ break;
+ }
+ break;
+ }
/* UK and Republic Of Ireland */
- if (ais->type6.dac == 235 || ais->type6.dac == 250) {
+ else if (ais->type6.dac == 235 || ais->type6.dac == 250) {
switch (ais->type6.fid) {
case 10: /* GLA - AtoN monitoring data */
- ais->type6.dac235fid10.ana_int = UBITS(88, 10);
- ais->type6.dac235fid10.ana_ext1 = UBITS(98, 10);
- ais->type6.dac235fid10.ana_ext2 = UBITS(108, 10);
- ais->type6.dac235fid10.racon = UBITS(118, 2);
- ais->type6.dac235fid10.light = UBITS(120, 2);
- ais->type6.dac235fid10.alarm = UBITS(122, 1);
- ais->type6.dac235fid10.stat_ext = UBITS(123, 8);
- ais->type6.dac235fid10.off_pos = UBITS(131, 1);
+ ais->type6.dac235fid10.ana_int = UBITS(88, 10);
+ ais->type6.dac235fid10.ana_ext1 = UBITS(98, 10);
+ ais->type6.dac235fid10.ana_ext2 = UBITS(108, 10);
+ ais->type6.dac235fid10.racon = UBITS(118, 2);
+ ais->type6.dac235fid10.light = UBITS(120, 2);
+ ais->type6.dac235fid10.alarm = UBITS(122, 1);
+ ais->type6.dac235fid10.stat_ext = UBITS(123, 8);
+ ais->type6.dac235fid10.off_pos = UBITS(131, 1);
/* skip 4 bits */
imo = true;
+ break;
}
break;
}