#include "crc.h"

uint16_t crc16(uint8_t byte, uint16_t fcs) {
    uint8_t bit;

    for (bit=0; bit<8; bit++) {
        fcs ^= (byte & 0x01);
        fcs = (fcs & 0x01) ? (fcs >> 1) ^ 0x8408 : (fcs >> 1);
        byte = byte >> 1;
    }

    return fcs;
}

uint16_t crc16_buf(uint8_t* buf,uint16_t len, uint16_t fcs) {
    uint16_t crc = fcs;
    short i = 0;

    for (i = 0; i<len; i++) {
        crc = crc16(buf[i], crc);
    }

    return crc;
}
