/**
* Copyright (C) 2019 Johan van der Vyver
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#ifndef __VOLTRONIC__CRC__H__
#define __VOLTRONIC__CRC__H__
#include
/**
* The underlying numeric type used to store the CRC
*/
#if defined(_WIN32) || defined(WIN32)
#include "windows.h"
typedef unsigned __int16 voltronic_crc_t;
#else
#include
typedef uint16_t voltronic_crc_t;
#endif
/**
* Write a voltronic_crc_t to a buffer
*
* crc - CRC to write
* buffer - Buffer to write CRC to or NULL/0
*
* Returns the size of the CRC
*/
int write_voltronic_crc(
const voltronic_crc_t crc,
char* buffer);
/**
* Read a voltronic_crc_t from a buffer
*
* buffer - Buffer to read CRC from;
* If the buffer is smaller than the size
* returned by write_voltronic_crc behavoir is undefined
*
* Returns the CRC read from the buffer
*/
voltronic_crc_t read_voltronic_crc(const char* buffer);
/**
* Calculate the Voltronic CRC by reading a buffer and calculating the CRC from the bytes
*
* buffer - Buffer to read from
* buffer_length - Number of bytes in the buffer
*
* Returns the CRC created from the bytes in the buffer
*/
voltronic_crc_t calculate_voltronic_crc(
const char* buffer,
size_t buffer_length);
#endif