diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2025-02-09 17:55:18 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2025-02-09 17:55:18 +0800 |
| commit | 27a890cdf09df58c624047927cb97fbe97728c9c (patch) | |
| tree | f6b5da78ac54183d3dc726ed6f1adc73fcd0cc48 /nrf24l01/recv.c | |
| parent | 2d2310b58c34c13212568a2d01c3af7b03c91c48 (diff) | |
| download | smart-home-27a890cdf09df58c624047927cb97fbe97728c9c.tar.gz | |
wip.
Diffstat (limited to 'nrf24l01/recv.c')
| -rw-r--r-- | nrf24l01/recv.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/nrf24l01/recv.c b/nrf24l01/recv.c new file mode 100644 index 0000000..1c6ac0f --- /dev/null +++ b/nrf24l01/recv.c @@ -0,0 +1,64 @@ +#include <avr/io.h> +#include <avr/interrupt.h> + +#include "radio.h" +#include "serial.h" + +#define RX_PIN PD7 +#define RX_DDR DDRD +#define RX_PORT PORTD +#define RX_PCIE PCIE2 +#define RX_PCINT PCINT23 +#define RX_PCMSK PCMSK2 +#define RX_PCINTVEC PCINT2_vect + +#define MAX_PAYLOAD_LEN 60 + +static char *s = "hello, world!"; +static uint8_t slen = 13; + +int main(void) +{ + struct radio_cfg cfg; + + cfg.netid = 0x01; + cfg.nodeid = 0x01; + cfg.payload_len = slen; + + RX_DDR &= ~(1 << RX_PIN); + RX_PORT &= ~(1 << RX_PIN); + PCICR |= (1 << RX_PCIE); + RX_PCMSK |= (1 << RX_PCINT); + + serial_init(); + + radio_init(&cfg); + radio_listen(); + + sei(); + + for (;;) + ; + + return 0; +} + +ISR(RX_PCINTVEC) +{ + uint8_t i, n; + char buf[MAX_PAYLOAD_LEN]; + + cli(); + + serial_write_line("Detected pin change IRQ"); + + n = radio_recv(buf, MAX_PAYLOAD_LEN - 1); + buf[n] = '\0'; + + for (i = 0; i < n; i++) + serial_write(buf[i]); + serial_write('\r'); + serial_write('\n'); + + sei(); +} |
