Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package device.packet;
- import device.packet.decoder.PacketDataDecoder;
- import static device.packet.response.DeviceResponse.success;
- public abstract class AbstractPacket implements Packet {
- public static final int SERIAL_NUMBER_INDEX = 5;
- public static final int SERIAL_NUMBER_LENGTH = 20;
- private static final int PROTOCOL_START_INDEX = 25;
- private static final short RESPONSE_VERSION = 0x04;
- private static final int BLANK_RESPONSE_LENGTH = 0x001F;
- protected final byte[] hexDataBytes;
- private final byte[] serialNumberBytes;
- private int protocol;
- private String serialNumber;
- public AbstractPacket(int protocol, String inHexDataPacket) {
- this(protocol, PacketDataDecoder.convertHexDataToByteArray(inHexDataPacket));
- }
- public AbstractPacket(int protocol, byte[] hexDataBytes) {
- this.protocol = protocol;
- this.hexDataBytes = hexDataBytes;
- this.serialNumberBytes = PacketDataDecoder.copyOfBytesRange(hexDataBytes, SERIAL_NUMBER_INDEX, SERIAL_NUMBER_LENGTH);
- this.serialNumber = new String(serialNumberBytes).trim();
- }
- public AbstractPacket(byte[] hexDataBytes) {
- this(parseProtocol(hexDataBytes), hexDataBytes);
- }
- public void validate() {
- }
- @Override
- public String getSerialNumber() {
- return serialNumber;
- }
- public byte[] getSerialNumberBytes() {
- return serialNumberBytes;
- }
- public static int parseProtocol(String inHexDataPacket) {
- byte[] dataPacket = PacketDataDecoder.convertHexDataToByteArray(inHexDataPacket);
- return parseProtocol(dataPacket);
- }
- public static int parseProtocol(byte[] packetBytes) {
- return PacketDataDecoder.parseU16BigEndian(packetBytes, PROTOCOL_START_INDEX);
- }
- public int parseRpm() {
- return 0;
- }
- public int getProtocol() {
- return protocol;
- }
- public byte[] respond() {
- return success()
- .withLength(BLANK_RESPONSE_LENGTH)
- .withVersion(RESPONSE_VERSION)
- .withSerialNumber(getSerialNumberBytes())
- .withCommandType(getProtocol())
- .respond();
- }
- }
Add Comment
Please, Sign In to add comment