diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2025-04-16 14:22:16 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2025-04-16 16:40:03 +0800 |
| commit | a720d7a69f73b59d5622661e46ca86c97790e75a (patch) | |
| tree | e718987cbe27c65d42327c0f6a5c9ac851a96a1e /lock/fend.c | |
| parent | 28e90cb35d5b6ee3fbe26e45ef8001bda4b8d859 (diff) | |
| download | smart-home-a720d7a69f73b59d5622661e46ca86c97790e75a.tar.gz | |
Use INT0 and INT1 for wakeup.
Diffstat (limited to 'lock/fend.c')
| -rw-r--r-- | lock/fend.c | 56 |
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; +} |
