summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c152
1 files changed, 57 insertions, 95 deletions
diff --git a/main.c b/main.c
index 3ee8fc6..2ea6165 100644
--- a/main.c
+++ b/main.c
@@ -3,84 +3,31 @@
*
*/
-#define bit_clr(a,b) ((a) &=~(1<<(b)))
-#define bit_set(a,b) ((a) |= (1<<(b)))
-#define bit_tst(a,b) ((a) & (1<<(b)))
-#define bit_change(a,b) ((a) ^= (1<<(b)))
-
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
+#include <avr/sleep.h>
+#include <avr/wdt.h>
#include <util/delay.h>
-#define Soft_UART_TX_PORT PORTD
-#define Soft_UART_TX_DDR DDRD
-#define Soft_UART_TX_PIN 3
-#define Soft_UART_Baud 9600
-#include "Soft_UART_Timer1.h"
-
#include "fpm.h"
-static inline void uart_write(const char *s)
-{
- for (; *s; s++) {
- Soft_UART_send_byte(*s);
- }
- Soft_UART_send_byte('\r');
- Soft_UART_send_byte('\n');
-}
+#define TOUCH_PIN PB0
+#define TOUCH_DDR DDRB
+#define TOUCH_PORT PORTB
+#define TOUCH_PCIE PCIE0
+#define TOUCH_PCINT PCINT0
+#define TOUCH_PCMSK PCMSK0
+#define TOUCH_PCINTVEC PCINT0_vect
-static inline void print_config(void)
+static inline void wdt_off(void)
{
- const int SLEN = 25;
-
- char s[SLEN];
- struct fpm_cfg cfg;
-
- if (fpm_getcfg(&cfg)) {
- uart_write("FPM config:");
- snprintf(s, SLEN, "\tstatus: 0x%02X", cfg.status);
- uart_write(s);
- snprintf(s, SLEN, "\tsysid: 0x%02X", cfg.sysid);
- uart_write(s);
- snprintf(s, SLEN, "\tcap: %d", cfg.cap);
- uart_write(s);
- snprintf(s, SLEN, "\tsec: %d", cfg.sec_level);
- uart_write(s);
- snprintf(s, SLEN, "\taddr: 0x%02X%02X%02X%02X", cfg.addr[0],
- cfg.addr[1], cfg.addr[2], cfg.addr[3]);
- uart_write(s);
- snprintf(s, SLEN, "\tpkt size: %d", cfg.pkt_size);
- uart_write(s);
-
- if (cfg.baud == 1)
- uart_write("\tbaud: 9600");
- else if (cfg.baud == 2)
- uart_write("\tbaud: 19200");
- else if (cfg.baud == 3)
- uart_write("\tbaud: 28800");
- else if (cfg.baud == 4)
- uart_write("\tbaud: 38400");
- else if (cfg.baud == 5)
- uart_write("\tbaud: 48000");
- else if (cfg.baud == 6)
- uart_write("\tbaud: 57600");
- else if (cfg.baud == 7)
- uart_write("\tbaud: 67200");
- else if (cfg.baud == 8)
- uart_write("\tbaud: 76800");
- else if (cfg.baud == 9)
- uart_write("\tbaud: 86400");
- else if (cfg.baud == 10)
- uart_write("\tbaud: 96000");
- else if (cfg.baud == 11)
- uart_write("\tbaud: 105600");
- else if (cfg.baud == 12)
- uart_write("\tbaud: 115200");
- } else {
- uart_write("Valid FPM config not found");
- }
+ cli();
+ wdt_reset();
+ MCUSR &= ~(1 << WDRF);
+ WDTCSR |= (1 << WDCE) | (1 << WDE);
+ WDTCSR = 0x00;
}
int main(void)
@@ -89,41 +36,56 @@ int main(void)
uint8_t ismatch;
uint16_t template_count;
- cli();
- Soft_UART_init();
- bit_set(DDRB,5);
+ wdt_off();
+
+ //cli();
+ //Soft_UART_init();
+ //bit_set(DDRB,5);
+
+ TOUCH_DDR &= ~(1 << TOUCH_PIN);
+ PCICR |= (1 << TOUCH_PCIE);
+ TOUCH_PCMSK |= (1 << TOUCH_PCINT);
+
+ DDRB |= (1 << PB5);
+ PORTB &= ~(1 << PB5);
+
sei();
if (fpm_init()) {
- print_config();
- template_count = fpm_getcount();
- snprintf(s, 30, "Template count: %d", template_count);
- uart_write(s);
-
- if (template_count == 0) {
- uart_write("Enroll fingerprint");
- if (fpm_enroll()) {
- uart_write("Enrolled fingerprint");
- } else {
- uart_write("Enrollment error");
- }
-
- template_count = fpm_getcount();
- snprintf(s, 30, "New template count: %d", template_count);
- uart_write(s);
- }
-
- uart_write("Authentcating...");
- if (fpm_match())
- uart_write("Fingerprint match");
- else
- uart_write("No match");
+ //print_config();
+ //template_count = fpm_getcount();
+ //snprintf(s, 30, "Template count: %d", template_count);
+ //uart_write(s);
+
+ //if (template_count == 0) {
+ // uart_write("Enroll fingerprint");
+ // if (fpm_enroll()) {
+ // uart_write("Enrolled fingerprint");
+ // } else {
+ // uart_write("Enrollment error");
+ // }
+
+ // template_count = fpm_getcount();
+ // snprintf(s, 30, "New template count: %d", template_count);
+ // uart_write(s);
+ //}
}
while (1)
{
- _delay_ms(1000);
+ set_sleep_mode(SLEEP_MODE_PWR_DOWN);
+ sleep_mode();
+
+ if (fpm_match()) {
+ PORTB |= (1 << PB5);
+ _delay_ms(500);
+ PORTB &= ~(1 << PB5);
+ }
}
return 0;
}
+
+ISR(TOUCH_PCINTVEC)
+{
+}