summaryrefslogtreecommitdiffstats
path: root/ding.c
diff options
context:
space:
mode:
Diffstat (limited to 'ding.c')
-rw-r--r--ding.c43
1 files changed, 38 insertions, 5 deletions
diff --git a/ding.c b/ding.c
index 34ff38c..2bf9fe6 100644
--- a/ding.c
+++ b/ding.c
@@ -1,6 +1,7 @@
#include <stdint.h>
#include <string.h>
+#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <util/delay.h>
@@ -8,24 +9,56 @@
#include "uart.h"
#include "util.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
+
+static volatile int rxdr = 0;
+
int main(void)
{
- const char *s = "hello world!";
- uint8_t slen = strlen(s);
+ uint8_t n;
+ char buf[MAXPDLEN + 1];
uint8_t rxaddr[ADDRLEN] = { 194, 178, 82 };
uint8_t txaddr[ADDRLEN] = { 194, 178, 83 };
- wdt_init();
+ //wdt_stop();
uart_init();
radio_init(rxaddr);
radio_print_config();
+ sei();
+ radio_listen();
+
+ _delay_ms(2000);
+ radio_sendto(txaddr, "SYN", 3);
+
for (;;) {
- radio_sendto(txaddr, s, slen);
- wdt_reset();
+ if (rxdr) {
+ n = radio_recv(buf, MAXPDLEN);
+ buf[n] = '\0';
+ rxdr = 0;
+ if (strncmp(buf, "ACK", 3) == 0) {
+ uart_write("INFO: ");
+ uart_write_line(buf);
+ }
+ } else {
+ uart_write_line("No IRQ");
+ }
+
_delay_ms(2000);
+ radio_sendto(txaddr, "SYN", 3);
}
return 0;
}
+
+ISR(RX_PCINTVEC)
+{
+ rxdr = 1;
+}