RLPark 1.0.0
Reinforcement Learning Framework in Java

HeaderNode.java

Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark