|
|
|
@ -30,49 +30,49 @@ |
|
|
|
|
//region Resolve data types
|
|
|
|
|
|
|
|
|
|
#if TF_LEN_BYTES == 1 |
|
|
|
|
typedef uint8_t TF_LEN; |
|
|
|
|
typedef uint8_t TF_LEN; |
|
|
|
|
#elif TF_LEN_BYTES == 2 |
|
|
|
|
typedef uint16_t TF_LEN; |
|
|
|
|
typedef uint16_t TF_LEN; |
|
|
|
|
#elif TF_LEN_BYTES == 4 |
|
|
|
|
typedef uint32_t TF_LEN; |
|
|
|
|
typedef uint32_t TF_LEN; |
|
|
|
|
#else |
|
|
|
|
#error Bad value of TF_LEN_BYTES, must be 1, 2 or 4 |
|
|
|
|
#error Bad value of TF_LEN_BYTES, must be 1, 2 or 4 |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if TF_TYPE_BYTES == 1 |
|
|
|
|
typedef uint8_t TF_TYPE; |
|
|
|
|
typedef uint8_t TF_TYPE; |
|
|
|
|
#elif TF_TYPE_BYTES == 2 |
|
|
|
|
typedef uint16_t TF_TYPE; |
|
|
|
|
typedef uint16_t TF_TYPE; |
|
|
|
|
#elif TF_TYPE_BYTES == 4 |
|
|
|
|
typedef uint32_t TF_TYPE; |
|
|
|
|
typedef uint32_t TF_TYPE; |
|
|
|
|
#else |
|
|
|
|
#error Bad value of TF_TYPE_BYTES, must be 1, 2 or 4 |
|
|
|
|
#error Bad value of TF_TYPE_BYTES, must be 1, 2 or 4 |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if TF_ID_BYTES == 1 |
|
|
|
|
typedef uint8_t TF_ID; |
|
|
|
|
typedef uint8_t TF_ID; |
|
|
|
|
#elif TF_ID_BYTES == 2 |
|
|
|
|
typedef uint16_t TF_ID; |
|
|
|
|
typedef uint16_t TF_ID; |
|
|
|
|
#elif TF_ID_BYTES == 4 |
|
|
|
|
typedef uint32_t TF_ID; |
|
|
|
|
typedef uint32_t TF_ID; |
|
|
|
|
#else |
|
|
|
|
#error Bad value of TF_ID_BYTES, must be 1, 2 or 4 |
|
|
|
|
#error Bad value of TF_ID_BYTES, must be 1, 2 or 4 |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if TF_CKSUM_TYPE == TF_CKSUM_XOR || TF_CKSUM_TYPE == TF_CKSUM_NONE |
|
|
|
|
// ~XOR (if 0, still use 1 byte - it won't be used)
|
|
|
|
|
typedef uint8_t TF_CKSUM; |
|
|
|
|
// ~XOR (if 0, still use 1 byte - it won't be used)
|
|
|
|
|
typedef uint8_t TF_CKSUM; |
|
|
|
|
#elif TF_CKSUM_TYPE == TF_CKSUM_CRC16 |
|
|
|
|
// CRC16
|
|
|
|
|
typedef uint16_t TF_CKSUM; |
|
|
|
|
// CRC16
|
|
|
|
|
typedef uint16_t TF_CKSUM; |
|
|
|
|
#elif TF_CKSUM_TYPE == TF_CKSUM_CRC32 |
|
|
|
|
// CRC32
|
|
|
|
|
typedef uint32_t TF_CKSUM; |
|
|
|
|
// CRC32
|
|
|
|
|
typedef uint32_t TF_CKSUM; |
|
|
|
|
#else |
|
|
|
|
#error Bad value for TF_CKSUM_TYPE, must be 8, 16 or 32 |
|
|
|
|
#error Bad value for TF_CKSUM_TYPE, must be 8, 16 or 32 |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
//endregion
|
|
|
|
@ -132,7 +132,7 @@ typedef TF_Result (*TF_Listener)(TinyFrame *tf, TF_Msg *msg); |
|
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
enum TFState { |
|
|
|
|
enum TFState_ { |
|
|
|
|
TFState_SOF = 0, //!< Wait for SOF
|
|
|
|
|
TFState_LEN, //!< Wait for Number Of Bytes
|
|
|
|
|
TFState_HEAD_CKSUM, //!< Wait for header Checksum
|
|
|
|
@ -166,6 +166,7 @@ struct TF_GenericListener_ { |
|
|
|
|
struct TinyFrame_ { |
|
|
|
|
/* Public user data */ |
|
|
|
|
union { |
|
|
|
|
// choice between two representations
|
|
|
|
|
void *userdata; |
|
|
|
|
uint32_t usertag; |
|
|
|
|
}; |
|
|
|
@ -177,7 +178,7 @@ struct TinyFrame_ { |
|
|
|
|
TF_ID next_id; //!< Next frame / frame chain ID
|
|
|
|
|
|
|
|
|
|
/* Parser state */ |
|
|
|
|
enum TFState state; |
|
|
|
|
enum TFState_ state; |
|
|
|
|
TF_TICKS parser_timeout_ticks; |
|
|
|
|
TF_ID id; //!< Incoming packet ID
|
|
|
|
|
TF_LEN len; //!< Payload length
|
|
|
|
@ -304,7 +305,8 @@ bool TF_Query(TinyFrame *tf, TF_Msg *msg, TF_Listener listener, TF_TICKS timeout |
|
|
|
|
/**
|
|
|
|
|
* Like TF_Query, but without the struct |
|
|
|
|
*/ |
|
|
|
|
bool TF_QuerySimple(TinyFrame *tf, TF_TYPE type, const uint8_t *data, TF_LEN len, TF_Listener listener, TF_TICKS timeout); |
|
|
|
|
bool TF_QuerySimple(TinyFrame *tf, TF_TYPE type, const uint8_t *data, TF_LEN len, |
|
|
|
|
TF_Listener listener, TF_TICKS timeout); |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Send a response to a received message. |
|
|
|
|