updated tinyframe
This commit is contained in:
@@ -57,9 +57,9 @@ typedef uint8_t TF_COUNT;
|
||||
// --- Listener counts - determine sizes of the static slot tables ---
|
||||
|
||||
// Frame ID listeners (wait for response / multi-part message)
|
||||
#define TF_MAX_ID_LST 10
|
||||
#define TF_MAX_ID_LST 5
|
||||
// Frame Type listeners (wait for frame with a specific first payload byte)
|
||||
#define TF_MAX_TYPE_LST 10
|
||||
#define TF_MAX_TYPE_LST 5
|
||||
// Generic listeners (fallback if no other listener catches it)
|
||||
#define TF_MAX_GEN_LST 1
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#include "TinyFrame.h"
|
||||
#include <malloc.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// Compatibility with ESP8266 SDK
|
||||
@@ -243,6 +245,7 @@ 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;
|
||||
}
|
||||
|
||||
@@ -372,6 +375,13 @@ static void _TF_FN TF_HandleReceivedMessage(TinyFrame *tf)
|
||||
if (res == TF_RENEW) {
|
||||
renew_id_listener(ilst);
|
||||
}
|
||||
|
||||
if (res == TF_CLOSE) {
|
||||
// Set userdata to NULL to avoid calling user for cleanup
|
||||
ilst->userdata = NULL;
|
||||
ilst->userdata2 = NULL;
|
||||
cleanup_id_listener(tf, i, ilst);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -389,8 +399,12 @@ static void _TF_FN TF_HandleReceivedMessage(TinyFrame *tf)
|
||||
res = tlst->fn(tf, &msg);
|
||||
|
||||
if (res != TF_NEXT) {
|
||||
// if it's TF_CLOSE, we assume user already cleaned up userdata
|
||||
// TF_RENEW doesn't make sense here because type listeners don't expire
|
||||
// type listeners don't have userdata.
|
||||
// TF_RENEW doesn't make sense here because type listeners don't expire = same as TF_STAY
|
||||
|
||||
if (res == TF_CLOSE) {
|
||||
cleanup_type_listener(tf, i, tlst);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -404,8 +418,16 @@ static void _TF_FN TF_HandleReceivedMessage(TinyFrame *tf)
|
||||
res = glst->fn(tf, &msg);
|
||||
|
||||
if (res != TF_NEXT) {
|
||||
// if it's TF_CLOSE, we assume user already cleaned up userdata
|
||||
// TF_RENEW doesn't make sense here because generic listeners don't expire
|
||||
// generic listeners don't have userdata.
|
||||
// TF_RENEW doesn't make sense here because generic listeners don't expire = same as TF_STAY
|
||||
|
||||
// note: It's not expected that user will have multiple generic listeners, or
|
||||
// ever actually remove them. They're most useful as default callbacks if no other listener
|
||||
// handled the message.
|
||||
|
||||
if (res == TF_CLOSE) {
|
||||
cleanup_generic_listener(tf, i, glst);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user