/* Copyright (c) 2011 Danish Maritime Authority.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package dk.dma.ais.encode;
import org.junit.Assert;
import org.junit.Test;
import dk.dma.ais.binary.SixbitEncoder;
import dk.dma.ais.binary.SixbitException;
import dk.dma.ais.message.AisMessage;
import dk.dma.ais.message.AisMessage6;
import dk.dma.ais.message.AisMessageException;
import dk.dma.ais.message.binary.AsmAcknowledge;
import dk.dma.ais.message.binary.Capability;
import dk.dma.ais.sentence.Abm;
import dk.dma.ais.sentence.SentenceException;
import dk.dma.ais.sentence.SentenceLine;
import dk.dma.ais.sentence.Vdm;
public class EncodeBinaryTest {
/**
* Test encoding a binary AIS message
*
* @throws BitExhaustionException
* @throws IllegalArgumentException
*/
@Test
public void binaryEncode() throws SixbitException {
Capability capability = new Capability();
capability.setReqDac(296);
SixbitEncoder encoder = capability.getEncoded();
int destination = 992199007;
AisMessage6 msg6 = new AisMessage6();
msg6.setUserId(219015063);
msg6.setDestination(destination);
msg6.setRetransmit(0);
msg6.setAppMessage(capability);
encoder = msg6.getEncoded();
String encoded = encoder.encode();
String expected = "63@oWUkdShEt04=:000000000000";
System.out.println("encoded: " + encoded);
System.out.println("expected: " + expected);
System.out.println("pad bits: " + encoder.getPadBits());
Assert.assertTrue(encoded.equals(expected));
Vdm vdm = new Vdm();
vdm.setTalker("AI");
vdm.setTotal(1);
vdm.setNum(1);
vdm.setMessageData(msg6);
vdm.setSequence(0);
encoded = vdm.getEncoded();
System.out.println("VDM encoded: " + encoded);
Abm abm = new Abm();
abm.setTalker("AI");
abm.setTotal(1);
abm.setNum(1);
abm.setSequence(0);
abm.setBinaryData(msg6);
abm.setDestination(destination);
encoded = abm.getEncoded();
System.out.println("ABM encoded: " + encoded);
}
@Test
public void encodeAsmAcknowledge() throws SixbitException, SentenceException, AisMessageException {
AsmAcknowledge acknowledge = new AsmAcknowledge();
acknowledge.setReceivedFi(28);
acknowledge.setReceivedDac(2);
acknowledge.setAiAvailable(1);
acknowledge.setAiResponse(1);
acknowledge.setTextSequenceNum(800);
AisMessage6 msg6 = new AisMessage6();
msg6.setDestination(992199013);
msg6.setAppMessage(acknowledge);
msg6.setRetransmit(0);
String[] sentences = Vdm.createSentences(msg6, 0);
Assert.assertEquals(1, sentences.length);
Vdm vdm = new Vdm();
int res = vdm.parse(new SentenceLine(sentences[0]));
Assert.assertEquals(0, res);
msg6 = (AisMessage6) AisMessage.getInstance(vdm);
acknowledge = (AsmAcknowledge) msg6.getApplicationMessage();
Assert.assertEquals(28, acknowledge.getReceivedFi());
Assert.assertEquals(2, acknowledge.getReceivedDac());
Assert.assertEquals(1, acknowledge.getAiAvailable());
Assert.assertEquals(1, acknowledge.getAiResponse());
Assert.assertEquals(800, acknowledge.getTextSequenceNum());
}
}