diff options
Diffstat (limited to 'recipes-connectivity/lora/lora-packet-forwarder/lora-packet-forwarder-dedup-rx.patch')
-rw-r--r-- | recipes-connectivity/lora/lora-packet-forwarder/lora-packet-forwarder-dedup-rx.patch | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/recipes-connectivity/lora/lora-packet-forwarder/lora-packet-forwarder-dedup-rx.patch b/recipes-connectivity/lora/lora-packet-forwarder/lora-packet-forwarder-dedup-rx.patch new file mode 100644 index 0000000..b80bb26 --- /dev/null +++ b/recipes-connectivity/lora/lora-packet-forwarder/lora-packet-forwarder-dedup-rx.patch @@ -0,0 +1,47 @@ +diff --git a/lora_pkt_fwd/src/lora_pkt_fwd.c b/lora_pkt_fwd/src/lora_pkt_fwd.c +index 801f28d..7c94308 100644 +--- a/lora_pkt_fwd/src/lora_pkt_fwd.c ++++ b/lora_pkt_fwd/src/lora_pkt_fwd.c +@@ -1536,6 +1556,41 @@ void thread_up(void) { + memcpy((void *)(buff_up + buff_index), (void *)"{\"rxpk\":[", 9); + buff_index += 9; + ++ if (nb_pkt > 1) { ++ uint32_t check_addr = 0; ++ uint16_t check_fcnt = 0; ++ float check_snr = -30.0; ++ ++ for (i=0; i < nb_pkt; ++i) { ++ p = &rxpkt[i]; ++ check_addr = p->payload[1]; ++ check_addr |= p->payload[2] << 8; ++ check_addr |= p->payload[3] << 16; ++ check_addr |= p->payload[4] << 24; ++ ++ check_fcnt = p->payload[6]; ++ check_fcnt |= p->payload[7] << 8; ++ ++ check_snr = p->snr; ++ ++ for (j=0; j < nb_pkt; ++j) { ++ p = &rxpkt[j]; ++ mote_addr = p->payload[1]; ++ mote_addr |= p->payload[2] << 8; ++ mote_addr |= p->payload[3] << 16; ++ mote_addr |= p->payload[4] << 24; ++ ++ mote_fcnt = p->payload[6]; ++ mote_fcnt |= p->payload[7] << 8; ++ ++ if (check_addr == mote_addr && check_fcnt == mote_fcnt && p->snr < check_snr) { ++ // set status of duplicate packets rx'd on wrong channel ++ p->status = 1; ++ } ++ } ++ } ++ } ++ + /* serialize Lora packets metadata and payload */ + pkt_in_dgram = 0; + for (i=0; i < nb_pkt; ++i) { + |