#include "aSPISlave.h"
#include <avr/io.h>

ISR(SPI_STC_vect) {
  char received = SPDR;
  data[index] = received;
  index++;
}

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

char CRC8(char *data, int length) {
  char crc = 0x00;
  char poly = 0x07;  // полином для CRC8

  for (int i = 0; i < length - 2; 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;
}