RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.irobot.internal.descriptors; 00002 00003 import rlpark.plugin.robot.internal.disco.drops.DropByteArray; 00004 import zephyr.plugin.core.api.signals.Signal; 00005 00006 public class HeaderNode implements SerialLinkNode { 00007 public final Signal<Integer> onMisalignedPackets = new Signal<Integer>(); 00008 private final byte[] header; 00009 private final int checksum; 00010 private int checkedByte = 0; 00011 private int misalignedByte = 0; 00012 00013 public HeaderNode(int... header) { 00014 this(DropByteArray.toBytes(header)); 00015 } 00016 00017 public HeaderNode(byte[] header) { 00018 this.header = header; 00019 checksum = ChecksumNode.sum(header); 00020 } 00021 00022 @Override 00023 public void start() { 00024 misalignedByte = 0; 00025 checkedByte = 0; 00026 } 00027 00028 @Override 00029 public void step(Byte b) { 00030 if (b == header[checkedByte]) 00031 checkedByte++; 00032 else { 00033 // System.out.println(String.format("Received %d, expected %d", b, 00034 // header[checkedByte])); 00035 misalignedByte++; 00036 onMisalignedPackets.fire(misalignedByte); 00037 // if (misalignedByte % 1000 == 0) 00038 // System.err.println(String.format("Warning: %d misaligned packets", 00039 // misalignedByte)); 00040 checkedByte = 0; 00041 } 00042 } 00043 00044 @Override 00045 public boolean isDone() { 00046 boolean result = checkedByte == header.length; 00047 if (result && misalignedByte > 0) 00048 System.err.println(String.format("Warning: %d misaligned packets", misalignedByte)); 00049 return result; 00050 } 00051 00052 @Override 00053 public int sum() { 00054 return checksum; 00055 } 00056 }