/*
 *  crc.h
 *  SCXT
 *
 *  Created by Brumbaer on 28.11.08.
 *
 */

static unsigned char crcTable[256];

void buildTable (void) {

	int i;
	unsigned char table[8];

	table[0] = 0x31;
	
	for (i = 1; i < 8; i++) {
		int n = 2 * table[i - 1];
		
		table[i] = (n >= 256) ?	n ^ 0x31 : n;
	}
	
	for (i = 0; i < 256; i++) {
	
		crcTable[i] = 0;
		if (i & 1) crcTable[i] ^= table[0];
		if (i & 2) crcTable[i] ^= table[1];
		if (i & 4) crcTable[i] ^= table[2];
		if (i & 8) crcTable[i] ^= table[3];
		if (i & 16) crcTable[i] ^= table[4];
		if (i & 32) crcTable[i] ^= table[5];
		if (i & 64) crcTable[i] ^= table[6];
		if (i & 128) crcTable[i] ^= table[7];
	}
}

unsigned char crc (unsigned char* buffer, int count) {

	int i;
	unsigned char result = 0;
	
	for (i = 0; i < count - 1; i++) {
		unsigned char idx = buffer[i] ^ result;
		
		result = crcTable[idx];
	}
	
	return result ^ 0xBB;
}

