From e34917da814c2cdb3710553d479df0aed3979e28 Mon Sep 17 00:00:00 2001 From: Sadeep Madurange Date: Sun, 6 Apr 2025 12:01:05 +0800 Subject: Recv data reliably, but PDLEN value is wrong. --- nrfm.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'nrfm.c') diff --git a/nrfm.c b/nrfm.c index 6f27a82..afbb1d9 100644 --- a/nrfm.c +++ b/nrfm.c @@ -212,7 +212,7 @@ void radio_init(const uint8_t rxaddr[ADDRLEN]) write_reg(0x05, 0b01110011); /* use 2.515GHz channel */ write_reg(0x06, 0b00001110); /* set data rate to 1Mbps */ write_reg(0x1D, 0b00000100); /* enable dynamic payload length */ - write_reg(0x1C, 0b00000001); /* enable dynamic payload length for pipe 0 */ + write_reg(0x1C, 0b00111111); /* enable dynamic payload length for all pipes */ reset_irqs(); setaddr(0x0A, rxaddr); @@ -287,24 +287,28 @@ void radio_listen(void) uint8_t radio_recv(char *buf, uint8_t n) { + char s[5]; uint8_t rxdr, readlen, pdlen, maxlen; + pdlen = 0; disable_chip(); - rxdr = read_reg(0x07) & ~(1 << 6); - if (!rxdr) { - uart_write_line("ERROR: RX_DR=0, abort read"); - return 0; - } - pdlen = rx_pdlen(); - if (pdlen > MAXPDLEN) { + if (pdlen == 0) { flush_rx(); reset_irqs(); - uart_write_line("ERROR: PDLEN > MAXPDLEN, abort read"); + uart_write_line("ERROR: PDLEN = 0, abort read"); return 0; } + // for some reason, PDLEN reads as 64 causing the below check to fail + //if (pdlen > MAXPDLEN) { + // flush_rx(); + // reset_irqs(); + // uart_write_line("ERROR: PDLEN > MAXPDLEN, abort read"); + // return 0; + //} + maxlen = pdlen < n ? pdlen : n; SPI_PORT &= ~(1 << SPI_SS); @@ -319,9 +323,9 @@ uint8_t radio_recv(char *buf, uint8_t n) } SPI_PORT |= (1 << SPI_SS); - if (pdlen != n) - flush_rx(); + flush_rx(); reset_irqs(); - + enable_chip(); + return readlen; } -- cgit v1.2.3