diff options
| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | main.c | 134 |
2 files changed, 73 insertions, 65 deletions
@@ -1,8 +1,7 @@ CC = avr-gcc MCU = atmega328p PORT = /dev/cuaU0 -TARGET = fend -FPM_NEWPWD = 0x00 +TARGET = app SRC = main.c fpm.c OBJ = $(SRC:.c=.o) @@ -13,7 +12,6 @@ CFLAGS += -Wall CFLAGS += -mmcu=$(MCU) CFLAGS += -DBAUD=57600 CFLAGS += -DF_CPU=16000000UL -CFLAGS += -DDEBUG=0 CFLAGS += -DFPM_PWD=$(FPM_PWD) CFLAGS += -ffunction-sections -fdata-sections @@ -3,89 +3,99 @@ * */ +#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" -#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 uart_write(const char *s) +{ + for (; *s; s++) { + Soft_UART_send_byte(*s); + } + Soft_UART_send_byte('\r'); + Soft_UART_send_byte('\n'); +} -static inline void wdt_off(void) +static inline void print_config(void) { - cli(); - wdt_reset(); - MCUSR &= ~(1 << WDRF); - WDTCSR |= (1 << WDCE) | (1 << WDE); - WDTCSR = 0x00; + 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"); + } } int main(void) { - char s[30]; - uint8_t ismatch; - uint16_t template_count; - - 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); - + cli(); + Soft_UART_init(); + bit_set(DDRB,5); 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("FPM detected"); + print_config(); } - + while (1) { - 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) -{ -} |
