diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2025-04-06 12:01:05 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2025-04-06 12:02:57 +0800 |
| commit | e34917da814c2cdb3710553d479df0aed3979e28 (patch) | |
| tree | 6123fcfca767bae09e9ecb26feb24f033ab64fdc /nrfm.c | |
| parent | fd373e4cdf77c09e71f8c708d4e353f9091f36e4 (diff) | |
| download | avr-nrf24l01-driver-e34917da814c2cdb3710553d479df0aed3979e28.tar.gz | |
Recv data reliably, but PDLEN value is wrong.
Diffstat (limited to 'nrfm.c')
| -rw-r--r-- | nrfm.c | 28 |
1 files changed, 16 insertions, 12 deletions
@@ -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; } |
