diff --git a/TinyFrame/TF_Config.h b/TinyFrame/TF_Config.h index fb9f757..f66d408 100644 --- a/TinyFrame/TF_Config.h +++ b/TinyFrame/TF_Config.h @@ -5,6 +5,7 @@ #ifndef TF_CONFIG_H #define TF_CONFIG_H +#include "platform.h" #include //#include // 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 ------------------------------ diff --git a/TinyFrame/TF_Integration.c b/TinyFrame/TF_Integration.c index c858097..de2cf0a 100644 --- a/TinyFrame/TF_Integration.c +++ b/TinyFrame/TF_Integration.c @@ -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; } } diff --git a/TinyFrame/TinyFrame.c b/TinyFrame/TinyFrame.c index f7d5dcb..07d4cf8 100644 --- a/TinyFrame/TinyFrame.c +++ b/TinyFrame/TinyFrame.c @@ -1,8 +1,6 @@ //--------------------------------------------------------------------------- #include "TinyFrame.h" #include -#include -#include //--------------------------------------------------------------------------- // 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) { diff --git a/comm/messages.c b/comm/messages.c index 25fb1aa..8714d2e 100644 --- a/comm/messages.c +++ b/comm/messages.c @@ -57,7 +57,7 @@ static void job_unhandled_resp(Job *job) static TF_Result lst_default(TinyFrame *tf, TF_Msg *msg) { - dbg("!! Unhandled msg type %d, frame_id %d", (int)msg->type, (int)msg->frame_id); + dbg("!! Unhandled msg type %02"PRIx8", frame_id 0x%04"PRIx16, msg->type, msg->frame_id); Job job = { .cb = job_unhandled_resp, .frame_id = msg->frame_id, diff --git a/framework/unit_registry.c b/framework/unit_registry.c index 7b2b123..e933253 100644 --- a/framework/unit_registry.c +++ b/framework/unit_registry.c @@ -2,6 +2,7 @@ // Created by MightyPork on 2017/11/26. // +#include #include "platform.h" #include "utils/avrlibc.h" #include "comm/messages.h" diff --git a/freertos.c b/freertos.c index d042d19..7cd05f5 100644 --- a/freertos.c +++ b/freertos.c @@ -59,9 +59,9 @@ /* Variables -----------------------------------------------------------------*/ #define STACK_MAIN 160 -#define STACK_MSG 170 -#define STACK_LP 128 -#define STACK_HP 128 +#define STACK_MSG 230 +#define STACK_LP 180 +#define STACK_HP 150 osThreadId tskMainHandle; uint32_t mainTaskBuffer[ STACK_MAIN ]; diff --git a/tasks/task_msg.c b/tasks/task_msg.c index 8c2db78..da7b415 100644 --- a/tasks/task_msg.c +++ b/tasks/task_msg.c @@ -2,8 +2,9 @@ // Created by MightyPork on 2017/12/22. // -#include #include "platform.h" +#include "comm/messages.h" +#include "utils/hexdump.h" #include "task_msg.h" #include "sched_queue.h" @@ -15,6 +16,10 @@ void TaskMessaging(const void * argument) while (1) { xQueueReceive(queRxDataHandle, &slot, osWaitForever); assert_param(slot.len>0 && slot.len<=64); // check the len is within bounds + + + hexDump("MSG", slot.data, slot.len); + TF_Accept(comm, slot.data, slot.len); } } \ No newline at end of file diff --git a/units/test/unit_test.c b/units/test/unit_test.c index 8e78730..f310064 100644 --- a/units/test/unit_test.c +++ b/units/test/unit_test.c @@ -183,6 +183,7 @@ static bool Tst_handleRequest(Unit *unit, TF_ID frame_id, uint8_t command, Paylo switch (command) { case CMD_PING: + dbg("Ping msg!"); tf_respond_ok(frame_id); //sched_respond_suc(frame_id); break; @@ -198,7 +199,7 @@ static bool Tst_handleRequest(Unit *unit, TF_ID frame_id, uint8_t command, Paylo .len = len, }; - PRINTF("Rx len %d: ", (int)len); + PRINTF("ECHO, len %d: ", (int)len); PUTSN((char *) cpy, len); PUTS("\r\n");