summaryrefslogtreecommitdiffstats
path: root/nrfm.c
diff options
context:
space:
mode:
Diffstat (limited to 'nrfm.c')
-rw-r--r--nrfm.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/nrfm.c b/nrfm.c
index 1c3444a..885155a 100644
--- a/nrfm.c
+++ b/nrfm.c
@@ -291,7 +291,7 @@ void radio_listen(void)
uint8_t radio_recv(char *buf, uint8_t n)
{
char s[3];
- uint8_t readlen, pdlen, maxlen;
+ int readlen, pdlen;
pdlen = 0;
disable_chip();
@@ -304,27 +304,22 @@ uint8_t radio_recv(char *buf, uint8_t n)
return 0;
}
- s[2] = '\0';
- pdlen = 0;
- pdlen = rx_pdlen();
itoa(pdlen, s, 10);
uart_write("DEBUG: PDLEN=");
uart_write_line(s);
- //if (pdlen > MAXPDLEN) {
- // flush_rx();
- // reset_irqs();
- // uart_write_line("ERROR: PDLEN > MAXPDLEN, abort read");
- // return 0;
- //}
-
- maxlen = pdlen < n ? pdlen : n;
+ if (pdlen > MAXPDLEN) {
+ flush_rx();
+ reset_irqs();
+ uart_write_line("ERROR: PDLEN > MAXPDLEN, abort read");
+ return 0;
+ }
SPI_PORT &= ~(1 << SPI_SS);
SPDR = 0b01100001;
while (!(SPSR & (1 << SPIF)))
;
- for (readlen = 0; readlen < maxlen; readlen++) {
+ for (readlen = 0; readlen < pdlen; readlen++) {
SPDR = NOP;
while (!(SPSR & (1 << SPIF)))
;
@@ -336,5 +331,5 @@ uint8_t radio_recv(char *buf, uint8_t n)
reset_irqs();
enable_chip();
- return readlen;
+ return readlen - 1;
}