fixed bugz
This commit is contained in:
+9
-8
@@ -40,7 +40,7 @@ typedef struct _GenericListener_struct_ {
|
||||
/**
|
||||
* Frame parser internal state
|
||||
*/
|
||||
static struct TinyFrameInstance {
|
||||
static struct TinyFrameStruct {
|
||||
/* Own state */
|
||||
TF_PEER peer_bit; //!< Own peer bit (unqiue to avoid msg ID clash)
|
||||
TF_ID next_id; //!< Next frame / frame chain ID
|
||||
@@ -341,7 +341,7 @@ static void _TF_FN TF_HandleReceivedMessage(void)
|
||||
// ID listeners first
|
||||
for (i = 0; i < tf.count_id_lst; i++) {
|
||||
ilst = &tf.id_listeners[i];
|
||||
if (ilst->fn && ilst->id == frame_id) {
|
||||
if (ilst->fn && ilst->id == msg.frame_id) {
|
||||
msg.userdata = ilst->userdata;
|
||||
if (ilst->fn(&msg)) return;
|
||||
}
|
||||
@@ -352,7 +352,7 @@ static void _TF_FN TF_HandleReceivedMessage(void)
|
||||
// Type listeners
|
||||
for (i = 0; i < tf.count_type_lst; i++) {
|
||||
tlst = &tf.type_listeners[i];
|
||||
if (tlst->fn && tlst->type == type) {
|
||||
if (tlst->fn && tlst->type == msg.type) {
|
||||
if (tlst->fn(&msg)) return;
|
||||
}
|
||||
}
|
||||
@@ -476,7 +476,7 @@ void _TF_FN TF_AcceptChar(unsigned char c)
|
||||
|
||||
CKSUM_RESET(tf.cksum); // Start collecting the payload
|
||||
|
||||
if (tf.len >= TF_MAX_PAYLOAD) {
|
||||
if (tf.len >= TF_MAX_PAYLOAD_RX) {
|
||||
// ERROR - frame too long. Consume, but do not store.
|
||||
tf.discard_data = true;
|
||||
}
|
||||
@@ -546,7 +546,7 @@ static inline int _TF_FN TF_Compose(uint8_t *outbuff, TF_ID *id_ptr,
|
||||
CKSUM_RESET(cksum);
|
||||
|
||||
// sanitize len
|
||||
if (data_len > TF_MAX_PAYLOAD) {
|
||||
if (data_len > TF_MAX_PAYLOAD_TX) {
|
||||
return TF_ERROR;
|
||||
}
|
||||
|
||||
@@ -626,7 +626,7 @@ bool _TF_FN TF_Send(TF_MSG *msg, TF_LISTENER listener, TF_TICKS timeout)
|
||||
|
||||
if (len == TF_ERROR) return false;
|
||||
|
||||
if (listener) TF_AddIdListener(msg->frame_id, listener);
|
||||
if (listener) TF_AddIdListener(msg, listener, timeout);
|
||||
|
||||
TF_WriteImpl((const uint8_t *) tf.sendbuf, (TF_LEN)len);
|
||||
return true;
|
||||
@@ -644,6 +644,7 @@ bool _TF_FN TF_Respond(TF_MSG *msg, bool renew)
|
||||
|
||||
bool _TF_FN TF_RenewIdListener(TF_ID id)
|
||||
{
|
||||
size_t i;
|
||||
IdListener *lst;
|
||||
for (i = 0; i < tf.count_id_lst; i++) {
|
||||
lst = &tf.id_listeners[i];
|
||||
@@ -658,7 +659,7 @@ bool _TF_FN TF_RenewIdListener(TF_ID id)
|
||||
/** Timebase hook - for timeouts */
|
||||
void _TF_FN TF_Tick(void)
|
||||
{
|
||||
int i;
|
||||
size_t i;
|
||||
TF_MSG msg;
|
||||
IdListener *lst;
|
||||
|
||||
@@ -677,7 +678,7 @@ void _TF_FN TF_Tick(void)
|
||||
msg.userdata = lst->userdata;
|
||||
msg.data = NULL; // this is a signal that listener should clean up
|
||||
|
||||
lst->fn(msg);
|
||||
lst->fn(&msg);
|
||||
lst->fn = NULL; // Discard listener
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -139,7 +139,7 @@ typedef enum {
|
||||
} TF_PEER;
|
||||
|
||||
/** Data structure for sending / receiving messages */
|
||||
typedef struct {
|
||||
typedef struct _TF_MSG_STRUCT_ {
|
||||
TF_ID frame_id; // message ID
|
||||
bool is_response; // internal flag, set when using the Respond function. frame_id is then kept unchanged.
|
||||
TF_TYPE type; // received or sent message type
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
#include <string.h>
|
||||
#include "TinyFrame.h"
|
||||
|
||||
typedef unsigned char* pu8;
|
||||
|
||||
static void dumpFrame(const uint8_t *buff, TF_LEN len);
|
||||
|
||||
/**
|
||||
@@ -20,19 +22,21 @@ void TF_WriteImpl(const uint8_t *buff, TF_LEN len)
|
||||
}
|
||||
|
||||
/** An example listener function */
|
||||
bool myListener(TF_ID frame_id, TF_TYPE type, const uint8_t *buff, TF_LEN len)
|
||||
bool myListener(TF_MSG *msg)
|
||||
{
|
||||
printf("\033[33mRX frame\n"
|
||||
" type: %02Xh\n"
|
||||
" data: \"%.*s\"\n"
|
||||
" len: %u\n"
|
||||
" id: %Xh\033[0m\n", type, len, buff, len, frame_id);
|
||||
" id: %Xh\033[0m\n",
|
||||
msg->type, msg->len, msg->data, msg->len, msg->frame_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool testIdListener(TF_ID frame_id, TF_TYPE type, const uint8_t *buff, TF_LEN len)
|
||||
bool testIdListener(TF_MSG *msg)
|
||||
{
|
||||
printf("OK - ID Listener triggered for msg (type %02X, id %Xh)!", type, frame_id);
|
||||
printf("OK - ID Listener triggered for msg (type %02X, id %Xh)!",
|
||||
msg->type, msg->frame_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -44,20 +48,27 @@ void main(void)
|
||||
|
||||
printf("------ Simulate sending a message --------\n");
|
||||
|
||||
TF_Send(0x22, (unsigned char*)"Hello TinyFrame", 16, NULL, NULL);
|
||||
TF_MSG msg;
|
||||
TF_ClearMsg(&msg);
|
||||
msg.type = 0x22;
|
||||
msg.data = (pu8)"Hello TinyFrame";
|
||||
msg.len = 16;
|
||||
TF_Send(&msg, NULL, 0);
|
||||
|
||||
const char *longstr = "Lorem ipsum dolor sit amet.";
|
||||
TF_Send(0x33, (unsigned char*)longstr, (TF_LEN)(strlen(longstr)+1), NULL, NULL);
|
||||
msg.type = 0x33;
|
||||
msg.data = (pu8)longstr;
|
||||
msg.len = strlen(longstr)+1; // add the null byte
|
||||
TF_Send(&msg, NULL, 0);
|
||||
|
||||
TF_Send(0x44, (unsigned char*)"Hello2", 7, NULL, NULL);
|
||||
msg.type = 0x44;
|
||||
msg.data = (pu8)"Hello2";
|
||||
msg.len = 7;
|
||||
TF_Send(&msg, NULL, 0);
|
||||
|
||||
TF_Send0(0xF0, NULL, NULL);
|
||||
|
||||
TF_Send1(0xF1, 'Q', NULL, NULL);
|
||||
|
||||
TF_Send2(0xF2, 'A', 'Z', NULL, NULL);
|
||||
|
||||
TF_Send0(0x77, testIdListener, NULL);
|
||||
msg.len = 0;
|
||||
msg.type = 0x77;
|
||||
TF_Send(&msg, testIdListener, 0);
|
||||
}
|
||||
|
||||
// helper func for testing
|
||||
|
||||
Reference in New Issue
Block a user