/* Copyright (C) 2015-2017 Carsten Pfeiffer This file is part of Gadgetbridge. Gadgetbridge is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gadgetbridge is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.util; public class CheckSums { public static int getCRC8(byte[] seq) { int len = seq.length; int i = 0; byte crc = 0x00; while (len-- > 0) { byte extract = seq[i++]; for (byte tempI = 8; tempI != 0; tempI--) { byte sum = (byte) ((crc & 0xff) ^ (extract & 0xff)); sum = (byte) ((sum & 0xff) & 0x01); crc = (byte) ((crc & 0xff) >>> 1); if (sum != 0) { crc = (byte) ((crc & 0xff) ^ 0x8c); } extract = (byte) ((extract & 0xff) >>> 1); } } return (crc & 0xff); } //thanks http://stackoverflow.com/questions/13209364/convert-c-crc16-to-java-crc16 public static int getCRC16(byte[] seq) { int crc = 0xFFFF; for (int j = 0; j < seq.length; j++) { crc = ((crc >>> 8) | (crc << 8)) & 0xffff; crc ^= (seq[j] & 0xff);//byte to int, trunc sign crc ^= ((crc & 0xff) >> 4); crc ^= (crc << 12) & 0xffff; crc ^= ((crc & 0xFF) << 5) & 0xffff; } crc &= 0xffff; return crc; } }