Lib Hoymiles: Added required CRC functions
This commit is contained in:
parent
6c994f3cf6
commit
d139c3d9e5
46
lib/Hoymiles/src/crc.cpp
Normal file
46
lib/Hoymiles/src/crc.cpp
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#include "crc.h"
|
||||||
|
|
||||||
|
uint8_t crc8(uint8_t buf[], uint8_t len)
|
||||||
|
{
|
||||||
|
uint8_t crc = CRC8_INIT;
|
||||||
|
for (uint8_t i = 0; i < len; i++) {
|
||||||
|
crc ^= buf[i];
|
||||||
|
for (uint8_t b = 0; b < 8; b++) {
|
||||||
|
crc = (crc << 1) ^ ((crc & 0x80) ? CRC8_POLY : 0x00);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t crc16(uint8_t buf[], uint8_t len, uint16_t start)
|
||||||
|
{
|
||||||
|
uint16_t crc = start;
|
||||||
|
uint8_t shift = 0;
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < len; i++) {
|
||||||
|
crc = crc ^ buf[i];
|
||||||
|
for (uint8_t bit = 0; bit < 8; bit++) {
|
||||||
|
shift = (crc & 0x0001);
|
||||||
|
crc = crc >> 1;
|
||||||
|
if (shift != 0)
|
||||||
|
crc = crc ^ 0xA001;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t crc16nrf24(uint8_t buf[], uint16_t lenBits, uint16_t startBit, uint16_t crcIn)
|
||||||
|
{
|
||||||
|
uint16_t crc = crcIn;
|
||||||
|
uint8_t idx, val = buf[(startBit >> 3)];
|
||||||
|
|
||||||
|
for (uint16_t bit = startBit; bit < lenBits; bit++) {
|
||||||
|
idx = bit & 0x07;
|
||||||
|
if (0 == idx)
|
||||||
|
val = buf[(bit >> 3)];
|
||||||
|
crc ^= 0x8000 & (val << (8 + idx));
|
||||||
|
crc = (crc & 0x8000) ? ((crc << 1) ^ CRC16_NRF24_POLYNOM) : (crc << 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
13
lib/Hoymiles/src/crc.h
Normal file
13
lib/Hoymiles/src/crc.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
#define CRC8_INIT 0x00
|
||||||
|
#define CRC8_POLY 0x01
|
||||||
|
|
||||||
|
#define CRC16_MODBUS_POLYNOM 0xA001
|
||||||
|
#define CRC16_NRF24_POLYNOM 0x1021
|
||||||
|
|
||||||
|
uint8_t crc8(uint8_t buf[], uint8_t len);
|
||||||
|
uint16_t crc16(uint8_t buf[], uint8_t len, uint16_t start = 0xffff);
|
||||||
|
uint16_t crc16nrf24(uint8_t buf[], uint16_t lenBits, uint16_t startBit = 0, uint16_t crcIn = 0xffff);
|
||||||
Loading…
Reference in New Issue
Block a user