/* 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.message;
import dk.dma.ais.binary.BinArray;
import dk.dma.ais.binary.SixbitEncoder;
import dk.dma.ais.binary.SixbitException;
import dk.dma.ais.sentence.Vdm;
/**
* AIS message 3
*
* Special position report, response to interrogation;(Class A shipborne mobile equipment)
*
* This class handles the content of an AIS class A transponders general position report as defined by ITU-R M.1371-4.
*
* Generally the position report is handled in the super class but there are some ITDMA specific purposes of this class.
*
*/
public class AisMessage3 extends AisPositionMessage {
/** serialVersionUID. */
private static final long serialVersionUID = 1L;
private int slotIncrement; // 13 bits : ITDMA Slot Increment
private int numSlots; // 3 bits : ITDMA Number of Slots
private int keep; // 1 bit : ITDMA Keep Flag
public AisMessage3() {
super(3);
}
public AisMessage3(Vdm vdm) throws AisMessageException, SixbitException {
super(vdm);
parse();
}
public void parse() throws AisMessageException, SixbitException {
BinArray binArray = vdm.getBinArray();
super.parse(binArray);
this.slotIncrement = (int) binArray.getVal(13);
this.numSlots = (int) binArray.getVal(3);
this.keep = (int) binArray.getVal(1);
}
@Override
public SixbitEncoder getEncoded() {
SixbitEncoder encoder = super.encode();
encoder.addVal(slotIncrement, 13);
encoder.addVal(numSlots, 3);
encoder.addVal(keep, 1);
return encoder;
}
public int getSlotIncrement() {
return slotIncrement;
}
public int getNumSlots() {
return numSlots;
}
public int getKeep() {
return keep;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(super.toString());
builder.append(", keep=");
builder.append(keep);
builder.append(", numSlots=");
builder.append(numSlots);
builder.append(", slotIncrement=");
builder.append(slotIncrement);
builder.append("]");
return builder.toString();
}
}