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) {