From 6dddb7639eca1b512fe555c42204c1afeaaa8d83 Mon Sep 17 00:00:00 2001 From: Stefan `Sec` Zehl Date: Sun, 25 Dec 2011 20:02:41 +0100 Subject: [PATCH] Add propagation test packet --- firmware/funk/mesh.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/firmware/funk/mesh.c b/firmware/funk/mesh.c index 8b9391b..f0ef254 100644 --- a/firmware/funk/mesh.c +++ b/firmware/funk/mesh.c @@ -19,9 +19,9 @@ MPKT meshbuffer[MESHBUFSIZE]; struct NRF_CFG oldconfig; -static int meshgen_gt(char gen){ - unsigned char dif=meshgen-gen; - if(meshgen==0) +static int mesh_gt(char curgen, char newgen){ + unsigned char dif=curgen-newgen; + if(curgen==0) return 1; return (dif>128); }; @@ -53,6 +53,7 @@ int mesh_sanity(uint8_t * pkt){ }; if(MO_TYPE(pkt)!='A' && MO_TYPE(pkt)!='a' && + MO_TYPE(pkt)!='B' && MO_TYPE(pkt)!='E' && MO_TYPE(pkt)!='F' && MO_TYPE(pkt)!='G' && @@ -213,7 +214,7 @@ uint8_t mesh_recvqloop_work(void){ // New mesh generation? if(MO_TYPE(buf)=='T'){ - if(meshgen_gt(MO_GEN(buf))){ + if(mesh_gt(meshgen,MO_GEN(buf))){ meshgen=MO_GEN(buf); _timet=0; meshincctr=0; @@ -241,6 +242,15 @@ uint8_t mesh_recvqloop_work(void){ // Store packet in a same/free slot MPKT* mpkt=meshGetMessage(MO_TYPE(buf)); + // Propagation test + if(MO_TYPE(buf)=='B'){ + if(! mesh_gt(MO_BODY(mpkt->pkt)[0],MO_BODY(buf)[0]) ) + return 0; + (*( + (uint32_t*)(MO_BODY(buf)+6) + ))++; + MO_TIME_set(mpkt->pkt,0); + }; #if 0 // Schnitzel if(MO_TYPE(buf)=='Z'){