Skip to content

Commit 17aab20

Browse files
committed
Improve Bds17/Bds45 detection
1 parent e21059f commit 17aab20

File tree

2 files changed

+67
-4
lines changed

2 files changed

+67
-4
lines changed

src/main/java/aero/t2s/modes/decoder/df/bds/Bds45.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,31 @@ public Bds45(short[] data) {
129129
return;
130130
}
131131
}
132+
133+
if (statusTurbulence || statusWindShear || statusMicroBurst || statusIcing || statusWake) {
134+
boolean nothing = true;
135+
136+
if (statusTurbulence && turbulence != Hazard.NIL) {
137+
nothing = false;
138+
}
139+
if (statusWindShear && windShear != Hazard.NIL) {
140+
nothing = false;
141+
}
142+
if (statusMicroBurst && microBurst != Hazard.NIL) {
143+
nothing = false;
144+
}
145+
if (statusIcing && icing != Hazard.NIL) {
146+
nothing = false;
147+
}
148+
if (statusWake && wake != Hazard.NIL) {
149+
nothing = false;
150+
}
151+
152+
if (nothing) {
153+
invalidate();
154+
return;
155+
}
156+
}
132157
}
133158

134159

src/test/java/aero/t2s/modes/decoder/df/DfRealMessageTest.java

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@
55
import aero.t2s.modes.database.ModeSDatabase;
66
import aero.t2s.modes.decoder.Decoder;
77
import aero.t2s.modes.decoder.UnknownDownlinkFormatException;
8-
import aero.t2s.modes.decoder.df.bds.Bds10;
9-
import aero.t2s.modes.decoder.df.bds.Bds40;
10-
import aero.t2s.modes.decoder.df.bds.Bds50;
11-
import aero.t2s.modes.decoder.df.bds.Bds60;
8+
import aero.t2s.modes.decoder.df.bds.*;
129
import org.junit.jupiter.api.Test;
1310

1411
import java.util.HashMap;
@@ -392,6 +389,47 @@ public void test_df21_bds50_02A185() throws UnknownDownlinkFormatException {
392389
assertEquals(210.9, bds.getTrueTrack(), 0.1);
393390
}
394391

392+
@Test
393+
public void test_df20_bds17_3D2C7C() throws UnknownDownlinkFormatException {
394+
DownlinkFormat df = testMessage("A0280314020100000000004E25E8");
395+
396+
assertInstanceOf(DF20.class, df);
397+
DF20 df20 = (DF20) df;
398+
assertEquals("3D2C7C", df.getIcao()); // Military / corrupt transponder
399+
assertEquals(3900, df20.getAltitude().getAltitude());
400+
401+
assertFalse(df20.isMultipleMatches());
402+
assertTrue(df20.isValid());
403+
assertEquals(Bds17.class, df20.getBds().getClass());
404+
405+
Bds17 bds = (Bds17) df20.getBds();
406+
assertFalse(bds.isBds0A());
407+
assertFalse(bds.isBds05());
408+
assertFalse(bds.isBds06());
409+
assertFalse(bds.isBds07());
410+
assertFalse(bds.isBds08());
411+
assertFalse(bds.isBds09());
412+
assertFalse(bds.isBds0A());
413+
assertTrue(bds.isBds20());
414+
assertFalse(bds.isBds21());
415+
assertFalse(bds.isBds40());
416+
assertFalse(bds.isBds41());
417+
assertFalse(bds.isBds42());
418+
assertFalse(bds.isBds43());
419+
assertFalse(bds.isBds44());
420+
assertFalse(bds.isBds45());
421+
assertFalse(bds.isBds48());
422+
assertTrue(bds.isBds50());
423+
assertFalse(bds.isBds51());
424+
assertFalse(bds.isBds52());
425+
assertFalse(bds.isBds53());
426+
assertFalse(bds.isBds54());
427+
assertFalse(bds.isBds55());
428+
assertFalse(bds.isBds56());
429+
assertFalse(bds.isBds5F());
430+
assertFalse(bds.isBds60());
431+
}
432+
395433
private DownlinkFormat testMessage(String message) throws UnknownDownlinkFormatException {
396434
Decoder decoder = new Decoder(new HashMap<>(), 50, 2, ModeSDatabase.createDatabase());
397435

0 commit comments

Comments
 (0)