RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.irobot.internal.descriptors; 00002 00003 import java.util.List; 00004 00005 00006 public class ChecksumNode implements SerialLinkNode { 00007 private final List<SerialLinkNode> checksumeds; 00008 private int checksum = 0; 00009 00010 public ChecksumNode(List<SerialLinkNode> serialLinkNodes) { 00011 checksumeds = serialLinkNodes; 00012 } 00013 00014 @Override 00015 public void start() { 00016 } 00017 00018 @Override 00019 public void step(Byte b) { 00020 checksum = 0x00ff & b; 00021 } 00022 00023 @Override 00024 public boolean isDone() { 00025 return true; 00026 } 00027 00028 public boolean isPacketValid() { 00029 int sum = checksum; 00030 for (SerialLinkNode checksumed : checksumeds) 00031 sum += checksumed.sum(); 00032 if (sum % 256 != 0) 00033 System.err.println(String.format("Warning: checksum error (%d->%d)", sum, sum % 256)); 00034 return sum % 256 == 0; 00035 } 00036 00037 public void reset() { 00038 checksum = (byte) 1; 00039 } 00040 00041 public static int sum(byte[] data) { 00042 int result = 0; 00043 for (byte b : data) 00044 result += b & 0x00ff; 00045 return result; 00046 } 00047 00048 @Override 00049 public int sum() { 00050 return checksum; 00051 } 00052 }