Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88d6a5cd23
|
||
|
|
c4b169cb80
|
||
|
|
03377b4b9f | ||
|
|
1a62d78443 | ||
|
|
1488abb517 | ||
|
|
1f52a17fc2 | ||
|
|
7f6f21cdb7 |
@@ -23,6 +23,10 @@ TinyFrame is re-entrant and supports creating multiple instances with the limita
|
|||||||
that their structure (field sizes and checksum type) must be the same. There is a support
|
that their structure (field sizes and checksum type) must be the same. There is a support
|
||||||
for adding multi-threaded access to a shared instance using a mutex (via a callback stub).
|
for adding multi-threaded access to a shared instance using a mutex (via a callback stub).
|
||||||
|
|
||||||
|
## Ports
|
||||||
|
|
||||||
|
A partial port to Python can be found at [MightyPork/PonyFrame](https://github.com/MightyPork/PonyFrame)
|
||||||
|
|
||||||
## Frame structure
|
## Frame structure
|
||||||
|
|
||||||
All fields in the message frame have a configurable size (see the top of the header file).
|
All fields in the message frame have a configurable size (see the top of the header file).
|
||||||
|
|||||||
+10
-3
@@ -481,10 +481,11 @@ void _TF_FN TF_AcceptChar(TinyFrame *tf, unsigned char c)
|
|||||||
|
|
||||||
#if !TF_USE_SOF_BYTE
|
#if !TF_USE_SOF_BYTE
|
||||||
if (tf->state == TFState_SOF) {
|
if (tf->state == TFState_SOF) {
|
||||||
TF_ParsBeginFrame();
|
pars_begin_frame();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//@formatter:off
|
||||||
switch (tf->state) {
|
switch (tf->state) {
|
||||||
case TFState_SOF:
|
case TFState_SOF:
|
||||||
if (c == TF_SOF_BYTE) {
|
if (c == TF_SOF_BYTE) {
|
||||||
@@ -536,6 +537,7 @@ void _TF_FN TF_AcceptChar(TinyFrame *tf, unsigned char c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (tf->len == 0) {
|
if (tf->len == 0) {
|
||||||
|
// if the message has no body, we're done.
|
||||||
TF_HandleReceivedMessage(tf);
|
TF_HandleReceivedMessage(tf);
|
||||||
TF_ResetParser(tf);
|
TF_ResetParser(tf);
|
||||||
break;
|
break;
|
||||||
@@ -547,7 +549,7 @@ void _TF_FN TF_AcceptChar(TinyFrame *tf, unsigned char c)
|
|||||||
|
|
||||||
CKSUM_RESET(tf->cksum); // Start collecting the payload
|
CKSUM_RESET(tf->cksum); // Start collecting the payload
|
||||||
|
|
||||||
if (tf->len >= TF_MAX_PAYLOAD_RX) {
|
if (tf->len > TF_MAX_PAYLOAD_RX) {
|
||||||
// ERROR - frame too long. Consume, but do not store.
|
// ERROR - frame too long. Consume, but do not store.
|
||||||
tf->discard_data = true;
|
tf->discard_data = true;
|
||||||
}
|
}
|
||||||
@@ -588,8 +590,10 @@ void _TF_FN TF_AcceptChar(TinyFrame *tf, unsigned char c)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
//@formatter:on
|
||||||
|
|
||||||
// we get here after finishing HEAD, if no data are to be received - handle and clear
|
// we get here after finishing HEAD, if no data are to be received - handle and clear
|
||||||
|
// TODO verify - this seems unreachable under normal circumstances
|
||||||
if (tf->len == 0 && tf->state == TFState_DATA) {
|
if (tf->len == 0 && tf->state == TFState_DATA) {
|
||||||
TF_HandleReceivedMessage(tf);
|
TF_HandleReceivedMessage(tf);
|
||||||
TF_ResetParser(tf);
|
TF_ResetParser(tf);
|
||||||
@@ -771,6 +775,8 @@ static bool _TF_FN TF_SendFrame(TinyFrame *tf, TF_Msg *msg, TF_Listener listener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Checksum only if message had a body
|
||||||
|
if (msg->len > 0) {
|
||||||
// Flush if checksum wouldn't fit in the buffer
|
// Flush if checksum wouldn't fit in the buffer
|
||||||
if (TF_SENDBUF_LEN - len < sizeof(TF_CKSUM)) {
|
if (TF_SENDBUF_LEN - len < sizeof(TF_CKSUM)) {
|
||||||
TF_WriteImpl(tf, (const uint8_t *) tf->sendbuf, len);
|
TF_WriteImpl(tf, (const uint8_t *) tf->sendbuf, len);
|
||||||
@@ -779,8 +785,9 @@ static bool _TF_FN TF_SendFrame(TinyFrame *tf, TF_Msg *msg, TF_Listener listener
|
|||||||
|
|
||||||
// Add checksum, flush what remains to be sent
|
// Add checksum, flush what remains to be sent
|
||||||
len += TF_ComposeTail(tf->sendbuf + len, &cksum);
|
len += TF_ComposeTail(tf->sendbuf + len, &cksum);
|
||||||
TF_WriteImpl(tf, (const uint8_t *) tf->sendbuf, len);
|
}
|
||||||
|
|
||||||
|
TF_WriteImpl(tf, (const uint8_t *) tf->sendbuf, len);
|
||||||
TF_ReleaseTx(tf);
|
TF_ReleaseTx(tf);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@
|
|||||||
* Upstream URL: https://github.com/MightyPork/TinyFrame
|
* Upstream URL: https://github.com/MightyPork/TinyFrame
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define TF_VERSION "2.0.2"
|
#define TF_VERSION "2.0.5"
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
#include <stdint.h> // for uint8_t etc
|
#include <stdint.h> // for uint8_t etc
|
||||||
|
|||||||
Reference in New Issue
Block a user