#include "IR_config.h"

void IR_FOX::setPin(uint8_t pin){
    this->pin = pin;
    port = digitalPinToPort(pin);
    mask = digitalPinToBitMask(pin);
}

void IR_FOX::checkAddressRuleApply(uint16_t address, uint16_t id, bool &flag)
{
    flag = false;
    flag |= id == 0;
    flag |= address == id;
    flag |= address >= IR_Broadcast;
}

uint8_t IR_FOX::crc8(uint8_t *data, uint8_t start, uint8_t end, uint8_t poly)
{ // TODO: сделать возможность межбайтовой проверки
    uint8_t crc = 0xff;
    size_t i, j;
    for (i = start; i < end; i++)
    {
        crc ^= data[i];
        for (j = 0; j < 8; j++)
        {
            if ((crc & 0x80) != 0)
                crc = (uint8_t)((crc << 1) ^ poly);
            else
                crc <<= 1;
        }
    }
    return crc;
};
