tf update and some progress
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#ifndef TF_CONFIG_H
|
||||
#define TF_CONFIG_H
|
||||
|
||||
#include "platform.h"
|
||||
#include <stdint.h>
|
||||
//#include <esp8266.h> // when using with esphttpd
|
||||
|
||||
@@ -65,7 +66,7 @@ typedef uint8_t TF_COUNT;
|
||||
|
||||
// Timeout for receiving & parsing a frame
|
||||
// ticks = number of calls to TF_Tick()
|
||||
#define TF_PARSER_TIMEOUT_TICKS 10
|
||||
#define TF_PARSER_TIMEOUT_TICKS 250
|
||||
|
||||
//------------------------- End of user config ------------------------------
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "platform.h"
|
||||
#include "task_main.h"
|
||||
|
||||
#include "utils/hexdump.h"
|
||||
#include "USB/usbd_cdc_if.h"
|
||||
#include "TinyFrame.h"
|
||||
|
||||
@@ -20,9 +21,10 @@ void TF_WriteImpl(TinyFrame *tf, const uint8_t *buff, size_t len)
|
||||
int32_t total = (int32_t) len;
|
||||
while (total > 0) {
|
||||
assert_param(osOK == osSemaphoreWait(semVcomTxReadyHandle, 5000));
|
||||
assert_param(USBD_OK == CDC_Transmit_FS((uint8_t *) buff, (uint16_t) MIN(total, CHUNK)));
|
||||
buff += CHUNK;
|
||||
total -= CHUNK;
|
||||
uint16_t chunksize = (uint16_t) MIN(total, CHUNK);
|
||||
assert_param(USBD_OK == CDC_Transmit_FS((uint8_t *) buff, chunksize));
|
||||
buff += chunksize;
|
||||
total -= chunksize;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+62
-64
@@ -1,8 +1,6 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#include "TinyFrame.h"
|
||||
#include <malloc.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// Compatibility with ESP8266 SDK
|
||||
@@ -245,7 +243,6 @@ bool _TF_FN TF_AddIdListener(TinyFrame *tf, TF_Msg *msg, TF_Listener cb, TF_TICK
|
||||
return true;
|
||||
}
|
||||
}
|
||||
fprintf(stderr,"TF failed to add ID listener\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -375,8 +372,7 @@ static void _TF_FN TF_HandleReceivedMessage(TinyFrame *tf)
|
||||
if (res == TF_RENEW) {
|
||||
renew_id_listener(ilst);
|
||||
}
|
||||
|
||||
if (res == TF_CLOSE) {
|
||||
else if (res == TF_CLOSE) {
|
||||
// Set userdata to NULL to avoid calling user for cleanup
|
||||
ilst->userdata = NULL;
|
||||
ilst->userdata2 = NULL;
|
||||
@@ -485,10 +481,11 @@ void _TF_FN TF_AcceptChar(TinyFrame *tf, unsigned char c)
|
||||
|
||||
#if !TF_USE_SOF_BYTE
|
||||
if (tf->state == TFState_SOF) {
|
||||
TF_ParsBeginFrame();
|
||||
}
|
||||
TF_ParsBeginFrame();
|
||||
}
|
||||
#endif
|
||||
|
||||
//@formatter:off
|
||||
switch (tf->state) {
|
||||
case TFState_SOF:
|
||||
if (c == TF_SOF_BYTE) {
|
||||
@@ -499,63 +496,63 @@ void _TF_FN TF_AcceptChar(TinyFrame *tf, unsigned char c)
|
||||
case TFState_ID:
|
||||
CKSUM_ADD(tf->cksum, c);
|
||||
COLLECT_NUMBER(tf->id, TF_ID) {
|
||||
// Enter LEN state
|
||||
tf->state = TFState_LEN;
|
||||
tf->rxi = 0;
|
||||
}
|
||||
// Enter LEN state
|
||||
tf->state = TFState_LEN;
|
||||
tf->rxi = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case TFState_LEN:
|
||||
CKSUM_ADD(tf->cksum, c);
|
||||
COLLECT_NUMBER(tf->len, TF_LEN) {
|
||||
// Enter TYPE state
|
||||
tf->state = TFState_TYPE;
|
||||
tf->rxi = 0;
|
||||
}
|
||||
// Enter TYPE state
|
||||
tf->state = TFState_TYPE;
|
||||
tf->rxi = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case TFState_TYPE:
|
||||
CKSUM_ADD(tf->cksum, c);
|
||||
COLLECT_NUMBER(tf->type, TF_TYPE) {
|
||||
#if TF_CKSUM_TYPE == TF_CKSUM_NONE
|
||||
tf->state = TFState_DATA;
|
||||
tf->rxi = 0;
|
||||
#else
|
||||
// enter HEAD_CKSUM state
|
||||
tf->state = TFState_HEAD_CKSUM;
|
||||
tf->rxi = 0;
|
||||
tf->ref_cksum = 0;
|
||||
#endif
|
||||
}
|
||||
#if TF_CKSUM_TYPE == TF_CKSUM_NONE
|
||||
tf->state = TFState_DATA;
|
||||
tf->rxi = 0;
|
||||
#else
|
||||
// enter HEAD_CKSUM state
|
||||
tf->state = TFState_HEAD_CKSUM;
|
||||
tf->rxi = 0;
|
||||
tf->ref_cksum = 0;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
case TFState_HEAD_CKSUM:
|
||||
COLLECT_NUMBER(tf->ref_cksum, TF_CKSUM) {
|
||||
// Check the header checksum against the computed value
|
||||
CKSUM_FINALIZE(tf->cksum);
|
||||
COLLECT_NUMBER(tf->ref_cksum, TF_CKSUM) {
|
||||
// Check the header checksum against the computed value
|
||||
CKSUM_FINALIZE(tf->cksum);
|
||||
|
||||
if (tf->cksum != tf->ref_cksum) {
|
||||
TF_ResetParser(tf);
|
||||
break;
|
||||
}
|
||||
if (tf->cksum != tf->ref_cksum) {
|
||||
TF_ResetParser(tf);
|
||||
break;
|
||||
}
|
||||
|
||||
if (tf->len == 0) {
|
||||
TF_HandleReceivedMessage(tf);
|
||||
TF_ResetParser(tf);
|
||||
break;
|
||||
}
|
||||
if (tf->len == 0) {
|
||||
TF_HandleReceivedMessage(tf);
|
||||
TF_ResetParser(tf);
|
||||
break;
|
||||
}
|
||||
|
||||
// Enter DATA state
|
||||
tf->state = TFState_DATA;
|
||||
tf->rxi = 0;
|
||||
// Enter DATA state
|
||||
tf->state = TFState_DATA;
|
||||
tf->rxi = 0;
|
||||
|
||||
CKSUM_RESET(tf->cksum); // Start collecting the payload
|
||||
CKSUM_RESET(tf->cksum); // Start collecting the payload
|
||||
|
||||
if (tf->len >= TF_MAX_PAYLOAD_RX) {
|
||||
// ERROR - frame too long. Consume, but do not store.
|
||||
tf->discard_data = true;
|
||||
}
|
||||
}
|
||||
if (tf->len >= TF_MAX_PAYLOAD_RX) {
|
||||
// ERROR - frame too long. Consume, but do not store.
|
||||
tf->discard_data = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case TFState_DATA:
|
||||
@@ -567,31 +564,32 @@ void _TF_FN TF_AcceptChar(TinyFrame *tf, unsigned char c)
|
||||
}
|
||||
|
||||
if (tf->rxi == tf->len) {
|
||||
#if TF_CKSUM_TYPE == TF_CKSUM_NONE
|
||||
// All done
|
||||
TF_HandleReceivedMessage();
|
||||
TF_ResetParser();
|
||||
#else
|
||||
// Enter DATA_CKSUM state
|
||||
tf->state = TFState_DATA_CKSUM;
|
||||
tf->rxi = 0;
|
||||
tf->ref_cksum = 0;
|
||||
#endif
|
||||
#if TF_CKSUM_TYPE == TF_CKSUM_NONE
|
||||
// All done
|
||||
TF_HandleReceivedMessage();
|
||||
TF_ResetParser();
|
||||
#else
|
||||
// Enter DATA_CKSUM state
|
||||
tf->state = TFState_DATA_CKSUM;
|
||||
tf->rxi = 0;
|
||||
tf->ref_cksum = 0;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
case TFState_DATA_CKSUM:
|
||||
COLLECT_NUMBER(tf->ref_cksum, TF_CKSUM) {
|
||||
// Check the header checksum against the computed value
|
||||
CKSUM_FINALIZE(tf->cksum);
|
||||
if (!tf->discard_data && tf->cksum == tf->ref_cksum) {
|
||||
TF_HandleReceivedMessage(tf);
|
||||
}
|
||||
COLLECT_NUMBER(tf->ref_cksum, TF_CKSUM) {
|
||||
// Check the header checksum against the computed value
|
||||
CKSUM_FINALIZE(tf->cksum);
|
||||
if (!tf->discard_data && tf->cksum == tf->ref_cksum) {
|
||||
TF_HandleReceivedMessage(tf);
|
||||
}
|
||||
|
||||
TF_ResetParser(tf);
|
||||
}
|
||||
TF_ResetParser(tf);
|
||||
}
|
||||
break;
|
||||
}
|
||||
//@formatter:on
|
||||
|
||||
// we get here after finishing HEAD, if no data are to be received - handle and clear
|
||||
if (tf->len == 0 && tf->state == TFState_DATA) {
|
||||
|
||||
Reference in New Issue
Block a user