summaryrefslogtreecommitdiffstats
path: root/lock/fend.c
diff options
context:
space:
mode:
Diffstat (limited to 'lock/fend.c')
-rw-r--r--lock/fend.c56
1 files changed, 52 insertions, 4 deletions
diff --git a/lock/fend.c b/lock/fend.c
index 7d86ab1..41e907d 100644
--- a/lock/fend.c
+++ b/lock/fend.c
@@ -11,24 +11,72 @@
#include "uart.h"
#include "util.h"
+#define BTN_PIN PINB
+#define BTN_PCIE PCIE0
+#define BTN_PCINTVEC PCINT0_vect
+#define LOCK_BTN PB0
+#define LOCK_BTN_PCINT PCINT0
+
+#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
+
+uint8_t syncing = 0;
+static volatile uint8_t rxdr = 0;
+static volatile uint8_t btn_press = 0;
+
int main(void)
{
- uint8_t n;
+ uint8_t n, rc;
uint8_t rxaddr[ADDRLEN] = { 194, 178, 82 };
uint8_t txaddr[ADDRLEN] = { 194, 178, 83 };
- char buf[WDLEN + 1], msg[WDLEN + 1];
+ char buf[WDLEN + 1], key[WDLEN + 1];
+
+ RX_DDR &= ~(1 << RX_PIN);
+ RX_PORT |= (1 << RX_PIN);
+ PCICR |= (1 << RX_PCIE);
+ RX_PCMSK |= (1 << RX_PCINT);
uart_init();
+ btn_init();
radio_init(rxaddr);
radio_print_config();
sei();
for (;;) {
- _delay_ms(2000);
- }
+ if (rxdr) {
+ rxdr = 0;
+ if (syncing) {
+ n = radio_recv(buf, WDLEN);
+ buf[n] = '\0';
+ xor(KEY, buf, key, WDLEN);
+ }
+ }
+ if (btn_press) {
+ syncing = 1;
+ btn_press = 0;
+ xor(KEY, SYN, buf, WDLEN);
+ do {
+ rc = radio_sendto(txaddr, buf, WDLEN);
+ } while (!rc);
+ }
+ }
return 0;
}
+ISR(RX_PCINTVEC)
+{
+ rxdr = 1;
+}
+
+ISR(BTN_PCINTVEC)
+{
+ btn_press = 1;
+}