added CRC8 1-wire type checksum
This commit is contained in:
+2
-2
@@ -30,10 +30,10 @@
|
|||||||
#define TF_TYPE_BYTES 1
|
#define TF_TYPE_BYTES 1
|
||||||
|
|
||||||
// Checksum type. Options:
|
// Checksum type. Options:
|
||||||
// TF_CKSUM_NONE, TF_CKSUM_XOR, TF_CKSUM_CRC16, TF_CKSUM_CRC32
|
// TF_CKSUM_NONE, TF_CKSUM_XOR, TF_CKSUM_CRC8, TF_CKSUM_CRC16, TF_CKSUM_CRC32
|
||||||
// TF_CKSUM_CUSTOM8, TF_CKSUM_CUSTOM16, TF_CKSUM_CUSTOM32
|
// TF_CKSUM_CUSTOM8, TF_CKSUM_CUSTOM16, TF_CKSUM_CUSTOM32
|
||||||
// Custom checksums require you to implement checksum functions (see TinyFrame.h)
|
// Custom checksums require you to implement checksum functions (see TinyFrame.h)
|
||||||
#define TF_CKSUM_TYPE TF_CKSUM_CUSTOM8
|
#define TF_CKSUM_TYPE TF_CKSUM_CRC16
|
||||||
|
|
||||||
// Use a SOF byte to mark the start of a frame
|
// Use a SOF byte to mark the start of a frame
|
||||||
#define TF_USE_SOF_BYTE 1
|
#define TF_USE_SOF_BYTE 1
|
||||||
|
|||||||
+20
@@ -43,6 +43,26 @@
|
|||||||
TF_CKSUM TF_CksumAdd(TF_CKSUM cksum, uint8_t byte) { return cksum ^ byte; }
|
TF_CKSUM TF_CksumAdd(TF_CKSUM cksum, uint8_t byte) { return cksum ^ byte; }
|
||||||
TF_CKSUM TF_CksumEnd(TF_CKSUM cksum) { return (TF_CKSUM) ~cksum; }
|
TF_CKSUM TF_CksumEnd(TF_CKSUM cksum) { return (TF_CKSUM) ~cksum; }
|
||||||
|
|
||||||
|
#elif TF_CKSUM_TYPE == TF_CKSUM_CRC8
|
||||||
|
|
||||||
|
static inline uint8_t crc8_bits(uint8_t data)
|
||||||
|
{
|
||||||
|
uint8_t crc = 0;
|
||||||
|
if(data & 1) crc ^= 0x5e;
|
||||||
|
if(data & 2) crc ^= 0xbc;
|
||||||
|
if(data & 4) crc ^= 0x61;
|
||||||
|
if(data & 8) crc ^= 0xc2;
|
||||||
|
if(data & 0x10) crc ^= 0x9d;
|
||||||
|
if(data & 0x20) crc ^= 0x23;
|
||||||
|
if(data & 0x40) crc ^= 0x46;
|
||||||
|
if(data & 0x80) crc ^= 0x8c;
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
TF_CKSUM TF_CksumStart(void) { return 0; }
|
||||||
|
TF_CKSUM TF_CksumAdd(TF_CKSUM cksum, uint8_t byte) { return crc8_bits(byte ^ cksum); }
|
||||||
|
TF_CKSUM TF_CksumEnd(TF_CKSUM cksum) { return cksum; }
|
||||||
|
|
||||||
#elif TF_CKSUM_TYPE == TF_CKSUM_CRC16
|
#elif TF_CKSUM_TYPE == TF_CKSUM_CRC16
|
||||||
|
|
||||||
// TODO try to replace with an algorithm
|
// TODO try to replace with an algorithm
|
||||||
|
|||||||
+13
-10
@@ -20,13 +20,14 @@
|
|||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
// Checksum type (0 = none, 8 = ~XOR, 16 = CRC16 0x8005, 32 = CRC32)
|
// Checksum type (0 = none, 8 = ~XOR, 16 = CRC16 0x8005, 32 = CRC32)
|
||||||
#define TF_CKSUM_NONE 0
|
#define TF_CKSUM_NONE 0 // no checksums
|
||||||
#define TF_CKSUM_XOR 8
|
#define TF_CKSUM_XOR 8 // inverted xor of all payload bytes
|
||||||
#define TF_CKSUM_CRC16 16
|
#define TF_CKSUM_CRC8 9 // Dallas/Maxim CRC8 (1-wire)
|
||||||
#define TF_CKSUM_CRC32 32
|
#define TF_CKSUM_CRC16 16 // CRC16 with the polynomial 0x8005 (x^16 + x^15 + x^2 + 1)
|
||||||
#define TF_CKSUM_CUSTOM8 1
|
#define TF_CKSUM_CRC32 32 // CRC32 with the polynomial 0xedb88320
|
||||||
#define TF_CKSUM_CUSTOM16 2
|
#define TF_CKSUM_CUSTOM8 1 // Custom 8-bit checksum
|
||||||
#define TF_CKSUM_CUSTOM32 3
|
#define TF_CKSUM_CUSTOM16 2 // Custom 16-bit checksum
|
||||||
|
#define TF_CKSUM_CUSTOM32 3 // Custom 32-bit checksum
|
||||||
|
|
||||||
#include "TF_Config.h"
|
#include "TF_Config.h"
|
||||||
|
|
||||||
@@ -65,7 +66,7 @@ typedef uint32_t TF_ID;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if (TF_CKSUM_TYPE == TF_CKSUM_XOR) || (TF_CKSUM_TYPE == TF_CKSUM_NONE) || (TF_CKSUM_TYPE == TF_CKSUM_CUSTOM8)
|
#if (TF_CKSUM_TYPE == TF_CKSUM_XOR) || (TF_CKSUM_TYPE == TF_CKSUM_NONE) || (TF_CKSUM_TYPE == TF_CKSUM_CUSTOM8) || (TF_CKSUM_TYPE == TF_CKSUM_CRC8)
|
||||||
// ~XOR (if 0, still use 1 byte - it won't be used)
|
// ~XOR (if 0, still use 1 byte - it won't be used)
|
||||||
typedef uint8_t TF_CKSUM;
|
typedef uint8_t TF_CKSUM;
|
||||||
#elif (TF_CKSUM_TYPE == TF_CKSUM_CRC16) || (TF_CKSUM_TYPE == TF_CKSUM_CUSTOM16)
|
#elif (TF_CKSUM_TYPE == TF_CKSUM_CRC16) || (TF_CKSUM_TYPE == TF_CKSUM_CUSTOM16)
|
||||||
@@ -320,12 +321,14 @@ bool TF_SendSimple(TinyFrame *tf, TF_TYPE type, const uint8_t *data, TF_LEN len)
|
|||||||
* @param timeout - listener expiry time in ticks
|
* @param timeout - listener expiry time in ticks
|
||||||
* @return success
|
* @return success
|
||||||
*/
|
*/
|
||||||
bool TF_Query(TinyFrame *tf, TF_Msg *msg, TF_Listener listener, TF_TICKS timeout);
|
bool TF_Query(TinyFrame *tf, TF_Msg *msg,
|
||||||
|
TF_Listener listener, TF_TICKS timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Like TF_Query, but without the struct
|
* Like TF_Query, but without the struct
|
||||||
*/
|
*/
|
||||||
bool TF_QuerySimple(TinyFrame *tf, TF_TYPE type, const uint8_t *data, TF_LEN len,
|
bool TF_QuerySimple(TinyFrame *tf, TF_TYPE type,
|
||||||
|
const uint8_t *data, TF_LEN len,
|
||||||
TF_Listener listener, TF_TICKS timeout);
|
TF_Listener listener, TF_TICKS timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user