Hey everyone, I’m working with two custom-built RAK3172 boards and trying to set up peer-to-peer (P2P) FSK communication using the RUI3 API.
I’m running into an issue with the api.lora.precv(65533) function. When I transmit packets of the same length, everything works perfectly. However, if I send consecutive packets with different lengths, the receiving board gets a malformed “SUCCESS” packet, followed by an “ERROR” packet.
From what I can tell, it seems like when a longer packet is received after a shorter one, the received data isn’t fully overwriting the transmit buffer; instead, it’s only writing the new, extra bytes. This is causing data corruption.
Is this the expected behavior of the api.lora.precv(65533) function? If not, what’s the right way to continuously transmit and receive FSK packets of varying lengths?
Thanks for any help!
Test code:
const uint8_t DEVICE_UID_SENDER = 0x5C;
uint8_t uid8;
uint8_t buf[10] = {0};
uint8_t val = 0;
volatile bool received = false;
void onReceiveStatic(rui_lora_p2p_recv_t data) { received = true; }
void setup() {
Serial.begin(115200);
delay(2000);
uid8 = *(uint8_t *)0x1FFF7580;
Serial.printf("uid8: %02X\r\n", uid8);
api.lora.registerPRecvCallback(onReceiveStatic);
api.lora.precv(65533);
if (uid8 == DEVICE_UID_SENDER) {
Serial.println("Device is sender");
delay(1000);
api.lora.psend(random(sizeof(buf)), buf);
} else {
Serial.println("Device is receiver");
}
}
void loop() {
if (received) {
delay(1000);
size_t len = random(sizeof(buf)) + 1;
api.lora.psend(len, buf);
memset(buf, val++, sizeof(buf));
received = false;
}
}
Sender logs:
17:20:35.561 -> uid8: 5C
17:20:35.596 -> Device is sender
17:20:36.586 -> Current Work Mode: FSK.
17:20:36.586 -> +EVT:TXFSK DONE
17:20:37.616 -> +EVT:RXFSK:0:2:00000066
17:20:37.616 -> +EVT:RXFSK RECEIVE ERROR
17:20:38.651 -> +EVT:TXFSK DONE
17:20:39.638 -> +EVT:RXFSK:-31:0:00000000
17:20:40.639 -> +EVT:TXFSK DONE
17:20:41.683 -> +EVT:RXFSK:-30:0:010101
17:20:42.694 -> +EVT:TXFSK DONE
17:20:43.708 -> +EVT:RXFSK:-32:0:02020202020202020202
17:20:44.708 -> +EVT:TXFSK DONE
17:20:45.741 -> +EVT:RXFSK:-30:0:03
17:20:46.719 -> +EVT:TXFSK DONE
17:20:47.728 -> +EVT:RXFSK:-31:0:040404040404040404
17:20:48.776 -> +EVT:TXFSK DONE
17:20:49.787 -> +EVT:RXFSK:-31:0:050505
17:20:50.802 -> +EVT:TXFSK DONE
17:20:51.822 -> +EVT:RXFSK:-31:0:06060606060606
17:20:52.804 -> +EVT:TXFSK DONE
17:20:53.839 -> +EVT:RXFSK:-32:0:07070707070707
17:20:54.869 -> +EVT:TXFSK DONE
17:20:55.866 -> +EVT:RXFSK:-31:0:08080808080808080808
17:20:56.867 -> +EVT:TXFSK DONE
17:20:57.896 -> +EVT:RXFSK:-30:0:0909
17:20:58.886 -> +EVT:TXFSK DONE
17:20:59.910 -> +EVT:RXFSK:-30:0:0A0A
17:21:00.942 -> +EVT:TXFSK DONE
17:21:01.943 -> +EVT:RXFSK:-31:0:0B0B0B0B
17:21:02.939 -> +EVT:TXFSK DONE
17:21:03.992 -> +EVT:RXFSK:-31:0:0C0C0C0C0C0C
17:21:04.992 -> +EVT:TXFSK DONE
17:21:06.008 -> +EVT:RXFSK:-31:0:0D0D0D0D0D0D0D0D0D
17:21:07.021 -> +EVT:TXFSK DONE
Receiver logs:
17:20:33.204 -> uid8: BA
17:20:33.204 -> Device is receiver
17:20:33.204 -> Current Work Mode: FSK.
17:20:36.633 -> +EVT:RXFSK:-29:2:000000
17:20:37.617 -> +EVT:TXFSK DONE
17:20:38.651 -> +EVT:RXFSK:-30:2:00000000
17:20:39.639 -> +EVT:TXFSK DONE
17:20:40.683 -> +EVT:RXFSK:-29:2:000000
17:20:41.644 -> +EVT:TXFSK DONE
17:20:42.695 -> +EVT:RXFSK:-29:3:01010100AF347F8EE680
17:20:42.695 -> +EVT:RXFSK RECEIVE ERROR
17:20:43.708 -> +EVT:TXFSK DONE
17:20:44.709 -> +EVT:RXFSK:-30:2:02
17:20:45.741 -> +EVT:TXFSK DONE
17:20:46.720 -> +EVT:RXFSK:-30:2:030202020202020202
17:20:46.756 -> +EVT:RXFSK RECEIVE ERROR
17:20:47.728 -> +EVT:TXFSK DONE
17:20:48.777 -> +EVT:RXFSK:-30:2:040404
17:20:49.754 -> +EVT:TXFSK DONE
17:20:50.802 -> +EVT:RXFSK:-30:2:05050504040404
17:20:50.802 -> +EVT:RXFSK RECEIVE ERROR
17:20:51.822 -> +EVT:TXFSK DONE
17:20:52.804 -> +EVT:RXFSK:-31:2:06060606060606
17:20:53.840 -> +EVT:TXFSK DONE
17:20:54.830 -> +EVT:RXFSK:-31:2:07070707070707040402
17:20:54.870 -> +EVT:RXFSK RECEIVE ERROR
17:20:55.867 -> +EVT:TXFSK DONE
17:20:56.898 -> +EVT:RXFSK:-30:2:0808
17:20:57.896 -> +EVT:TXFSK DONE
17:20:58.929 -> +EVT:RXFSK:-29:2:0909
17:20:59.910 -> +EVT:TXFSK DONE
17:21:00.942 -> +EVT:RXFSK:-29:2:0A0A0808
17:21:00.942 -> +EVT:RXFSK RECEIVE ERROR
17:21:01.943 -> +EVT:TXFSK DONE
17:21:02.939 -> +EVT:RXFSK:-29:2:0B0B0B0B0808
17:21:02.939 -> +EVT:RXFSK RECEIVE ERROR
17:21:03.992 -> +EVT:TXFSK DONE
17:21:04.992 -> +EVT:RXFSK:-29:2:0C0C0C0C0C0C080808
17:21:04.992 -> +EVT:RXFSK RECEIVE ERROR
17:21:06.008 -> +EVT:TXFSK DONE
17:21:07.021 -> +EVT:RXFSK:-29:2:0D0D0D0D
17:21:08.027 -> +EVT:TXFSK DONE