diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2025-04-30 10:38:42 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2025-04-30 10:38:42 +0800 |
| commit | bea69e2d834fdf3453506c5e66a0077c62fe885f (patch) | |
| tree | 2619eeafaf2fcda04728317c04e645f5902c65df /lock/bend.c | |
| parent | 5d26d71218d7f0b537d19f5471971da1f53d99ed (diff) | |
| download | smart-home-bea69e2d834fdf3453506c5e66a0077c62fe885f.tar.gz | |
Radio power down and mcu sleep for backend is working.
Diffstat (limited to 'lock/bend.c')
| -rw-r--r-- | lock/bend.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lock/bend.c b/lock/bend.c index 3957c55..03934d1 100644 --- a/lock/bend.c +++ b/lock/bend.c @@ -3,6 +3,8 @@ #include <stdint.h> #include <string.h> +#include <avr/wdt.h> +#include <avr/sleep.h> #include <avr/interrupt.h> #include <util/delay.h> @@ -63,6 +65,15 @@ static inline void keydel(char *buf, uint8_t n) buf[i] = 0; } +static inline void init_wdt(void) +{ + cli(); + wdt_reset(); + WDTCSR |= (1 << WDCE) | ( 1 << WDE); + WDTCSR = (1 << WDP2) | (1 << WDP1) | (1 << WDP0); + WDTCSR |= (1 << WDIE); +} + static inline void init_rx(void) { RX_DDR &= ~(1 << RX_PIN); @@ -112,6 +123,7 @@ int main(void) char buf[WDLEN], key[WDLEN], msg[WDLEN]; + init_wdt(); init_rx(); init_btns(); init_servo(); @@ -124,6 +136,9 @@ int main(void) radio_listen(); for (;;) { + if (!rxd) + _delay_ms(250); + if (rxd) { radio_recv(buf, WDLEN); rxd = 0; @@ -142,6 +157,13 @@ int main(void) keydel(key, WDLEN); } } + } else { + radio_pwr_dwn(); + sleep_enable(); + sleep_bod_disable(); + sleep_cpu(); + sleep_disable(); + radio_listen(); } } return 0; @@ -163,3 +185,7 @@ ISR(INT1_vect) if (is_btn_pressed(PIND, UNLOCK_PIN)) unlock(); } + +ISR(WDT_vect) +{ +} |
