#include "mydefs.h"
#include "crc.h"
#include <stdlib.h>
#include "lcd.h"

const unsigned char CRC_Tab8Value[256] = {
   (unsigned char) 0x00, (unsigned char) 0x9B, (unsigned char) 0xAD,
(unsigned char) 0x36, (unsigned char) 0xC1, (unsigned char) 0x5A,
(unsigned char) 0x6C, (unsigned char) 0xF7,
   (unsigned char) 0x19, (unsigned char) 0x82, (unsigned char) 0xB4,
(unsigned char) 0x2F, (unsigned char) 0xD8, (unsigned char) 0x43,
(unsigned char) 0x75, (unsigned char) 0xEE,
   (unsigned char) 0x32, (unsigned char) 0xA9, (unsigned char) 0x9F,
(unsigned char) 0x04, (unsigned char) 0xF3, (unsigned char) 0x68,
(unsigned char) 0x5E, (unsigned char) 0xC5,
   (unsigned char) 0x2B, (unsigned char) 0xB0, (unsigned char) 0x86,
(unsigned char) 0x1D, (unsigned char) 0xEA, (unsigned char) 0x71,
(unsigned char) 0x47, (unsigned char) 0xDC,
   (unsigned char) 0x64, (unsigned char) 0xFF, (unsigned char) 0xC9,
(unsigned char) 0x52, (unsigned char) 0xA5, (unsigned char) 0x3E,
(unsigned char) 0x08, (unsigned char) 0x93,
   (unsigned char) 0x7D, (unsigned char) 0xE6, (unsigned char) 0xD0,
(unsigned char) 0x4B, (unsigned char) 0xBC, (unsigned char) 0x27,
(unsigned char) 0x11, (unsigned char) 0x8A,
   (unsigned char) 0x56, (unsigned char) 0xCD, (unsigned char) 0xFB,
(unsigned char) 0x60, (unsigned char) 0x97, (unsigned char) 0x0C,
(unsigned char) 0x3A, (unsigned char) 0xA1,
   (unsigned char) 0x4F, (unsigned char) 0xD4, (unsigned char) 0xE2,
(unsigned char) 0x79, (unsigned char) 0x8E, (unsigned char) 0x15,
(unsigned char) 0x23, (unsigned char) 0xB8,
   (unsigned char) 0xC8, (unsigned char) 0x53, (unsigned char) 0x65,
(unsigned char) 0xFE, (unsigned char) 0x09, (unsigned char) 0x92,
(unsigned char) 0xA4, (unsigned char) 0x3F,
   (unsigned char) 0xD1, (unsigned char) 0x4A, (unsigned char) 0x7C,
(unsigned char) 0xE7, (unsigned char) 0x10, (unsigned char) 0x8B,
(unsigned char) 0xBD, (unsigned char) 0x26,
   (unsigned char) 0xFA, (unsigned char) 0x61, (unsigned char) 0x57,
(unsigned char) 0xCC, (unsigned char) 0x3B, (unsigned char) 0xA0,
(unsigned char) 0x96, (unsigned char) 0x0D,
   (unsigned char) 0xE3, (unsigned char) 0x78, (unsigned char) 0x4E,
(unsigned char) 0xD5, (unsigned char) 0x22, (unsigned char) 0xB9,
(unsigned char) 0x8F, (unsigned char) 0x14,
   (unsigned char) 0xAC, (unsigned char) 0x37, (unsigned char) 0x01,
(unsigned char) 0x9A, (unsigned char) 0x6D, (unsigned char) 0xF6,
(unsigned char) 0xC0, (unsigned char) 0x5B,
   (unsigned char) 0xB5, (unsigned char) 0x2E, (unsigned char) 0x18,
(unsigned char) 0x83, (unsigned char) 0x74, (unsigned char) 0xEF,
(unsigned char) 0xD9, (unsigned char) 0x42,
   (unsigned char) 0x9E, (unsigned char) 0x05, (unsigned char) 0x33,
(unsigned char) 0xA8, (unsigned char) 0x5F, (unsigned char) 0xC4,
(unsigned char) 0xF2, (unsigned char) 0x69,
   (unsigned char) 0x87, (unsigned char) 0x1C, (unsigned char) 0x2A,
(unsigned char) 0xB1, (unsigned char) 0x46, (unsigned char) 0xDD,
(unsigned char) 0xEB, (unsigned char) 0x70,
   (unsigned char) 0x0B, (unsigned char) 0x90, (unsigned char) 0xA6,
(unsigned char) 0x3D, (unsigned char) 0xCA, (unsigned char) 0x51,
(unsigned char) 0x67, (unsigned char) 0xFC,
   (unsigned char) 0x12, (unsigned char) 0x89, (unsigned char) 0xBF,
(unsigned char) 0x24, (unsigned char) 0xD3, (unsigned char) 0x48,
(unsigned char) 0x7E, (unsigned char) 0xE5,
   (unsigned char) 0x39, (unsigned char) 0xA2, (unsigned char) 0x94,
(unsigned char) 0x0F, (unsigned char) 0xF8, (unsigned char) 0x63,
(unsigned char) 0x55, (unsigned char) 0xCE,
   (unsigned char) 0x20, (unsigned char) 0xBB, (unsigned char) 0x8D,
(unsigned char) 0x16, (unsigned char) 0xE1, (unsigned char) 0x7A,
(unsigned char) 0x4C, (unsigned char) 0xD7,
   (unsigned char) 0x6F, (unsigned char) 0xF4, (unsigned char) 0xC2,
(unsigned char) 0x59, (unsigned char) 0xAE, (unsigned char) 0x35,
(unsigned char) 0x03, (unsigned char) 0x98,
   (unsigned char) 0x76, (unsigned char) 0xED, (unsigned char) 0xDB,
(unsigned char) 0x40, (unsigned char) 0xB7, (unsigned char) 0x2C,
(unsigned char) 0x1A, (unsigned char) 0x81,
   (unsigned char) 0x5D, (unsigned char) 0xC6, (unsigned char) 0xF0,
(unsigned char) 0x6B, (unsigned char) 0x9C, (unsigned char) 0x07,
(unsigned char) 0x31, (unsigned char) 0xAA,
   (unsigned char) 0x44, (unsigned char) 0xDF, (unsigned char) 0xE9,
(unsigned char) 0x72, (unsigned char) 0x85, (unsigned char) 0x1E,
(unsigned char) 0x28, (unsigned char) 0xB3,
   (unsigned char) 0xC3, (unsigned char) 0x58, (unsigned char) 0x6E,
(unsigned char) 0xF5, (unsigned char) 0x02, (unsigned char) 0x99,
(unsigned char) 0xAF, (unsigned char) 0x34,
   (unsigned char) 0xDA, (unsigned char) 0x41, (unsigned char) 0x77,
(unsigned char) 0xEC, (unsigned char) 0x1B, (unsigned char) 0x80,
(unsigned char) 0xB6, (unsigned char) 0x2D,
   (unsigned char) 0xF1, (unsigned char) 0x6A, (unsigned char) 0x5C,
(unsigned char) 0xC7, (unsigned char) 0x30, (unsigned char) 0xAB,
(unsigned char) 0x9D, (unsigned char) 0x06,
   (unsigned char) 0xE8, (unsigned char) 0x73, (unsigned char) 0x45,
(unsigned char) 0xDE, (unsigned char) 0x29, (unsigned char) 0xB2,
(unsigned char) 0x84, (unsigned char) 0x1F,
   (unsigned char) 0xA7, (unsigned char) 0x3C, (unsigned char) 0x0A,
(unsigned char) 0x91, (unsigned char) 0x66, (unsigned char) 0xFD,
(unsigned char) 0xCB, (unsigned char) 0x50,
   (unsigned char) 0xBE, (unsigned char) 0x25, (unsigned char) 0x13,
(unsigned char) 0x88, (unsigned char) 0x7F, (unsigned char) 0xE4,
(unsigned char) 0xD2, (unsigned char) 0x49,
   (unsigned char) 0x95, (unsigned char) 0x0E, (unsigned char) 0x38,
(unsigned char) 0xA3, (unsigned char) 0x54, (unsigned char) 0xCF,
(unsigned char) 0xF9, (unsigned char) 0x62,
   (unsigned char) 0x8C, (unsigned char) 0x17, (unsigned char) 0x21,
(unsigned char) 0xBA, (unsigned char) 0x4D, (unsigned char) 0xD6,
(unsigned char) 0xE0, (unsigned char) 0x7B
};


unsigned char crc8_tab(unsigned char data, unsigned char crc_init)
{
   unsigned char crc;

   crc = (unsigned char) (CRC_Tab8Value[crc_init] ^ data);
   return (crc);
}


unsigned char crc_analyse(void)
{

  int i;
  char uc_crc;
 unsigned char pos=ebus_pos-1 ;
  uc_crc = (unsigned char) 0;
  for (i = 0; i < pos; i++)
  {
    uc_crc = crc8_tab(ebus_buffer[i], uc_crc);
  }
  if ((ebus_buffer[pos])==uc_crc) return 1;
  else return 0;
}

unsigned char crc_calculation_to_send(unsigned char DATA, unsigned char DATA_SIZE)
{

  int i;
  char uc_crc;
  uc_crc = (unsigned char) 0;
  for (i = 0; i < DATA_SIZE; i++)
  {
    uc_crc = crc8_tab(DATA_TABLE[DATA][i], uc_crc);
  }
 return uc_crc;
}
