diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2025-05-17 10:57:12 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2025-05-17 10:57:12 +0800 |
| commit | 4f80330bae049dec0e69433a0e87c5427553febe (patch) | |
| tree | 178a939a1b700434dc13bb064be4f275c06cc639 /lock/fend.c | |
| parent | d02d12832a302ce811c60daa43d02856de777135 (diff) | |
| download | smart-home-4f80330bae049dec0e69433a0e87c5427553febe.tar.gz | |
Rename files and use -f flag in rm.
Diffstat (limited to 'lock/fend.c')
| -rw-r--r-- | lock/fend.c | 160 |
1 files changed, 0 insertions, 160 deletions
diff --git a/lock/fend.c b/lock/fend.c deleted file mode 100644 index 1d1fe12..0000000 --- a/lock/fend.c +++ /dev/null @@ -1,160 +0,0 @@ -/* Lock front, connected to the fingerprint scanner */ - -#include <stdint.h> -#include <stdlib.h> - -#include <avr/wdt.h> -#include <avr/sleep.h> -#include <avr/interrupt.h> -#include <util/delay.h> - -#include "fpm.h" -#include "nrfm.h" -#include "util.h" - -#define LOCK_PIN PD2 -#define UNLOCK_PIN PD3 - -#define RX_IRQ_PIN PC1 -#define RX_DDR DDRC -#define RX_PIN PINC -#define RX_ICR PCICR -#define RX_IE PCIE1 -#define RX_INT PCINT9 -#define RX_MSK PCMSK1 -#define RX_INTVEC PCINT1_vect - -#define VCC_MIN 4000 - -static volatile uint8_t rxd = 0; -static volatile uint8_t sync = 0; -static volatile uint8_t islock = 0; -static volatile uint8_t isunlock = 0; - -static inline void wdt_off(void) -{ - cli(); - wdt_reset(); - MCUSR &= ~(1 << WDRF); - WDTCSR |= (1 << WDCE) | (1 << WDE); - WDTCSR = 0x00; -} - -static inline void init_rx(void) -{ - RX_DDR &= ~(1 << RX_IRQ_PIN); - RX_ICR |= (1 << RX_IE); - RX_MSK |= (1 << RX_INT); -} - -static inline void init_btns(void) -{ - DDRD &= ~((1 << LOCK_PIN) | (1 << UNLOCK_PIN)); - PORTD |= ((1 << LOCK_PIN) | (1 << UNLOCK_PIN)); - - EICRA = 0b00000000; - EIMSK = (1 << INT0) | (1 << INT1); -} - -int main(void) -{ - int i, retries; - uint8_t rxaddr[ADDRLEN] = { 194, 178, 82 }; - uint8_t txaddr[ADDRLEN] = { 194, 178, 83 }; - - char buf[WDLEN], key[WDLEN]; - - wdt_off(); - led_init(); - fpm_init(); - - init_rx(); - init_btns(); - - radio_init(rxaddr); - - sei(); - radio_listen(); - - for (;;) { - if (!sync && (islock || isunlock)) { - if (isunlock) { - if (!fpm_match()) { - isunlock = 0; - continue; - } - } - - xor(KEY, SYN, buf, WDLEN); - retries = 0; - do { - sync = radio_sendto(txaddr, buf, WDLEN); - retries++; - _delay_ms(50); - } while (!sync && retries < 40); - - if (!sync) { - islock = 0; - isunlock = 0; - } - } - - if (rxd) { - radio_recv(buf, WDLEN); - rxd = 0; - if (sync && (islock || isunlock)) { - sync = 0; - xor(KEY, buf, key, WDLEN); - if (islock) { - islock = 0; - xor(key, LOCK, buf, WDLEN); - if (radio_sendto(txaddr, buf, WDLEN)) - led_locked(); - } else if (isunlock) { - isunlock = 0; - xor(key, UNLOCK, buf, WDLEN); - if (radio_sendto(txaddr, buf, WDLEN)) - led_unlocked(); - } - } - } - - if (!sync) { - if (getvcc() < VCC_MIN) { - for (i = 0; i < 5; i++) { - led_bat(); - _delay_ms(100); - } - } - - radio_pwr_dwn(); - sleep_bod_disable(); - set_sleep_mode(SLEEP_MODE_PWR_DOWN); - sleep_mode(); - radio_listen(); - } - } - return 0; -} - -ISR(RX_INTVEC) -{ - if (!(RX_PIN & (1 << RX_IRQ_PIN))) - rxd = 1; -} - -ISR(INT0_vect) -{ - if (is_btn_pressed(PIND, LOCK_PIN)) { - sync = 0; - islock = 1; - } -} - -ISR(INT1_vect) -{ - if (is_btn_pressed(PIND, UNLOCK_PIN)) { - sync = 0; - isunlock = 1; - } -} |
