summaryrefslogtreecommitdiffstats
path: root/lock/fend.c
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2025-05-17 10:57:12 +0800
committerSadeep Madurange <sadeep@asciimx.com>2025-05-17 10:57:12 +0800
commit4f80330bae049dec0e69433a0e87c5427553febe (patch)
tree178a939a1b700434dc13bb064be4f275c06cc639 /lock/fend.c
parentd02d12832a302ce811c60daa43d02856de777135 (diff)
downloadsmart-home-4f80330bae049dec0e69433a0e87c5427553febe.tar.gz
Rename files and use -f flag in rm.
Diffstat (limited to 'lock/fend.c')
-rw-r--r--lock/fend.c160
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;
- }
-}