updated tinyframe

master
Ondřej Hruška 6 years ago
parent f3113492a9
commit 95cc7e3af5
  1. 4
      gex/protocol/TF_Config.h
  2. 30
      gex/protocol/TinyFrame.c
  3. 2
      main.c

@ -57,9 +57,9 @@ typedef uint8_t TF_COUNT;
// --- Listener counts - determine sizes of the static slot tables --- // --- Listener counts - determine sizes of the static slot tables ---
// Frame ID listeners (wait for response / multi-part message) // 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) // 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) // Generic listeners (fallback if no other listener catches it)
#define TF_MAX_GEN_LST 1 #define TF_MAX_GEN_LST 1

@ -1,6 +1,8 @@
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
#include "TinyFrame.h" #include "TinyFrame.h"
#include <malloc.h> #include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Compatibility with ESP8266 SDK // 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; return true;
} }
} }
fprintf(stderr,"TF failed to add ID listener\n");
return false; return false;
} }
@ -372,6 +375,13 @@ static void _TF_FN TF_HandleReceivedMessage(TinyFrame *tf)
if (res == TF_RENEW) { if (res == TF_RENEW) {
renew_id_listener(ilst); 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; return;
} }
} }
@ -389,8 +399,12 @@ static void _TF_FN TF_HandleReceivedMessage(TinyFrame *tf)
res = tlst->fn(tf, &msg); res = tlst->fn(tf, &msg);
if (res != TF_NEXT) { if (res != TF_NEXT) {
// if it's TF_CLOSE, we assume user already cleaned up userdata // type listeners don't have userdata.
// TF_RENEW doesn't make sense here because type listeners don't expire // 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; return;
} }
} }
@ -404,8 +418,16 @@ static void _TF_FN TF_HandleReceivedMessage(TinyFrame *tf)
res = glst->fn(tf, &msg); res = glst->fn(tf, &msg);
if (res != TF_NEXT) { if (res != TF_NEXT) {
// if it's TF_CLOSE, we assume user already cleaned up userdata // generic listeners don't have userdata.
// TF_RENEW doesn't make sense here because generic listeners don't expire // 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; return;
} }
} }

@ -58,7 +58,7 @@ int main(void)
msg = GEX_Query0(test, 0); msg = GEX_Query0(test, 0);
assert(msg.type == MSG_SUCCESS); assert(msg.type == MSG_SUCCESS);
fprintf(stderr, "\"PING\" cmd: OK.\n"); fprintf(stderr, "\"PING\" cmd: OK.\n");
usleep(50000); //usleep(20000);
} }
#endif #endif

Loading…
Cancel
Save