#include <avr/io.h>
#include "SPISlave.h"
#include "head_oled_i2c.h"

static int index = 0;
static int arIndex = 0;
static char data[255];

void SPI_SlaveInit(void)
{
  DDR_SPI = (1 << DD_MISO);
  SPCR = (1 << SPE) | (1 << SPIE);
}

// Функция для вычисления контрольной суммы XOR
char CRC8(char *data, int length) {
  char crc = 0x00;
  char poly = 0x07; // полином для CRC8

  for (int i = 0; i < length; i++) {
      crc ^= data[i]; // XOR текущего байта с crc

      for (int j = 0; j < length; j++) {
          if (crc & 0x80) { // если старший бит crc равен 1
              crc = (crc << 1) ^ poly; // сдвигаем crc на 1 бит влево и XOR с полиномом
          } else {
              crc <<= 1; // иначе просто сдвигаем на 1 бит влево
          }
      }
  }

  return crc;
}

char crc8(char *data, int len) {
  char crc = 0x00;
  while (len--) {
    crc ^= *data++;
    for (int i = 0; i < 8; i++) {
      if (crc & 0x80) {
        crc = (crc << 1) ^ 0x07;
      } else {
        crc <<= 1;
      }
    }
  }
  return crc;
}


// Проверка массива на ноль
char checkArray(char *arr, int size) {
  for (int i = 0; i < size; i++) {
      if (arr[i] != 0) {
          return 1;
      }
  }
  return 0;
}